Merge remote branch 'wireless-next/master' into ath6kl-next
Conflicts: drivers/net/wireless/ath/ath6kl/init.c
This commit is contained in:
commit
7e95e365d5
7655 changed files with 342408 additions and 170690 deletions
2
.mailmap
2
.mailmap
|
@ -68,6 +68,7 @@ Juha Yrjola <juha.yrjola@solidboot.com>
|
||||||
Kay Sievers <kay.sievers@vrfy.org>
|
Kay Sievers <kay.sievers@vrfy.org>
|
||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Koushik <raghavendra.koushik@neterion.com>
|
Koushik <raghavendra.koushik@neterion.com>
|
||||||
|
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||||
Linas Vepstas <linas@austin.ibm.com>
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
|
@ -111,3 +112,4 @@ Uwe Kleine-König <ukl@pengutronix.de>
|
||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
|
|
22
Documentation/ABI/stable/sysfs-acpi-pmprofile
Normal file
22
Documentation/ABI/stable/sysfs-acpi-pmprofile
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
What: /sys/firmware/acpi/pm_profile
|
||||||
|
Date: 03-Nov-2011
|
||||||
|
KernelVersion: v3.2
|
||||||
|
Contact: linux-acpi@vger.kernel.org
|
||||||
|
Description: The ACPI pm_profile sysfs interface exports the platform
|
||||||
|
power management (and performance) requirement expectations
|
||||||
|
as provided by BIOS. The integer value is directly passed as
|
||||||
|
retrieved from the FADT ACPI table.
|
||||||
|
Values: For possible values see ACPI specification:
|
||||||
|
5.2.9 Fixed ACPI Description Table (FADT)
|
||||||
|
Field: Preferred_PM_Profile
|
||||||
|
|
||||||
|
Currently these values are defined by spec:
|
||||||
|
0 Unspecified
|
||||||
|
1 Desktop
|
||||||
|
2 Mobile
|
||||||
|
3 Workstation
|
||||||
|
4 Enterprise Server
|
||||||
|
5 SOHO Server
|
||||||
|
6 Appliance PC
|
||||||
|
7 Performance Server
|
||||||
|
>7 Reserved
|
19
Documentation/ABI/testing/debugfs-ideapad
Normal file
19
Documentation/ABI/testing/debugfs-ideapad
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
What: /sys/kernel/debug/ideapad/cfg
|
||||||
|
Date: Sep 2011
|
||||||
|
KernelVersion: 3.2
|
||||||
|
Contact: Ike Panhc <ike.pan@canonical.com>
|
||||||
|
Description:
|
||||||
|
|
||||||
|
cfg shows the return value of _CFG method in VPC2004 device. It tells machine
|
||||||
|
capability and what graphic component within the machine.
|
||||||
|
|
||||||
|
|
||||||
|
What: /sys/kernel/debug/ideapad/status
|
||||||
|
Date: Sep 2011
|
||||||
|
KernelVersion: 3.2
|
||||||
|
Contact: Ike Panhc <ike.pan@canonical.com>
|
||||||
|
Description:
|
||||||
|
|
||||||
|
status shows infos we can read and tells its meaning and value.
|
||||||
|
|
||||||
|
|
|
@ -206,3 +206,16 @@ Description:
|
||||||
when a discarded area is read the discard_zeroes_data
|
when a discarded area is read the discard_zeroes_data
|
||||||
parameter will be set to one. Otherwise it will be 0 and
|
parameter will be set to one. Otherwise it will be 0 and
|
||||||
the result of reading a discarded area is undefined.
|
the result of reading a discarded area is undefined.
|
||||||
|
What: /sys/block/<disk>/alias
|
||||||
|
Date: Aug 2011
|
||||||
|
Contact: Nao Nishijima <nao.nishijima.xt@hitachi.com>
|
||||||
|
Description:
|
||||||
|
A raw device name of a disk does not always point a same disk
|
||||||
|
each boot-up time. Therefore, users have to use persistent
|
||||||
|
device names, which udev creates when the kernel finds a disk,
|
||||||
|
instead of raw device name. However, kernel doesn't show those
|
||||||
|
persistent names on its messages (e.g. dmesg).
|
||||||
|
This file can store an alias of the disk and it would be
|
||||||
|
appeared in kernel messages if it is set. A disk can have an
|
||||||
|
alias which length is up to 255bytes. Users can use alphabets,
|
||||||
|
numbers, "-" and "_" in alias name. This file is writeonce.
|
||||||
|
|
|
@ -71,3 +71,10 @@ Description: Value of 1 indicates the controller can honor the reset_devices
|
||||||
a dump device, as kdump requires resetting the device in order
|
a dump device, as kdump requires resetting the device in order
|
||||||
to work reliably.
|
to work reliably.
|
||||||
|
|
||||||
|
Where: /sys/bus/pci/devices/<dev>/ccissX/transport_mode
|
||||||
|
Date: July 2011
|
||||||
|
Kernel Version: 3.0
|
||||||
|
Contact: iss_storagedev@hp.com
|
||||||
|
Description: Value of "simple" indicates that the controller has been placed
|
||||||
|
in "simple mode". Value of "performant" indicates that the
|
||||||
|
controller has been placed in "performant mode".
|
||||||
|
|
72
Documentation/ABI/testing/sysfs-driver-wacom
Normal file
72
Documentation/ABI/testing/sysfs-driver-wacom
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
What: /sys/class/hidraw/hidraw*/device/speed
|
||||||
|
Date: April 2010
|
||||||
|
Kernel Version: 2.6.35
|
||||||
|
Contact: linux-bluetooth@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
The /sys/class/hidraw/hidraw*/device/speed file controls
|
||||||
|
reporting speed of Wacom bluetooth tablet. Reading from
|
||||||
|
this file returns 1 if tablet reports in high speed mode
|
||||||
|
or 0 otherwise. Writing to this file one of these values
|
||||||
|
switches reporting speed.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/led
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Attribute group for control of the status LEDs and the OLEDs.
|
||||||
|
This attribute group is only available for Intuos 4 M, L,
|
||||||
|
and XL (with LEDs and OLEDs) and Cintiq 21UX2 (LEDs only).
|
||||||
|
Therefore its presence implicitly signifies the presence of
|
||||||
|
said LEDs and OLEDs on the tablet device.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing to this file sets the status LED luminance (1..127)
|
||||||
|
when the stylus does not touch the tablet surface, and no
|
||||||
|
button is pressed on the stylus. This luminance level is
|
||||||
|
normally lower than the level when a button is pressed.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status1_luminance
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing to this file sets the status LED luminance (1..127)
|
||||||
|
when the stylus touches the tablet surface, or any button is
|
||||||
|
pressed on the stylus.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led0_select
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing to this file sets which one of the four (for Intuos 4)
|
||||||
|
or of the right four (for Cintiq 21UX2) status LEDs is active (0..3).
|
||||||
|
The other three LEDs on the same side are always inactive.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select
|
||||||
|
Date: September 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing to this file sets which one of the left four (for Cintiq 21UX2)
|
||||||
|
status LEDs is active (0..3). The other three LEDs on the left are always
|
||||||
|
inactive.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/buttons_luminance
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing to this file sets the overall luminance level (0..15)
|
||||||
|
of all eight button OLED displays.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/button<n>_rawimg
|
||||||
|
Date: August 2011
|
||||||
|
Contact: linux-input@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
When writing a 1024 byte raw image in Wacom Intuos 4
|
||||||
|
interleaving format to the file, the image shows up on Button N
|
||||||
|
of the device. The image is a 64x32 pixel 4-bit gray image. The
|
||||||
|
1024 byte binary is split up into 16x 64 byte chunks. Each 64
|
||||||
|
byte chunk encodes the image data for two consecutive lines on
|
||||||
|
the display. The low nibble of each byte contains the first
|
||||||
|
line, and the high nibble contains the second line.
|
|
@ -5,19 +5,4 @@ Contact: "Ike Panhc <ike.pan@canonical.com>"
|
||||||
Description:
|
Description:
|
||||||
Control the power of camera module. 1 means on, 0 means off.
|
Control the power of camera module. 1 means on, 0 means off.
|
||||||
|
|
||||||
What: /sys/devices/platform/ideapad/cfg
|
|
||||||
Date: Jun 2011
|
|
||||||
KernelVersion: 3.1
|
|
||||||
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
|
||||||
Description:
|
|
||||||
Ideapad capability bits.
|
|
||||||
Bit 8-10: 1 - Intel graphic only
|
|
||||||
2 - ATI graphic only
|
|
||||||
3 - Nvidia graphic only
|
|
||||||
4 - Intel and ATI graphic
|
|
||||||
5 - Intel and Nvidia graphic
|
|
||||||
Bit 16: Bluetooth exist (1 for exist)
|
|
||||||
Bit 17: 3G exist (1 for exist)
|
|
||||||
Bit 18: Wifi exist (1 for exist)
|
|
||||||
Bit 19: Camera exist (1 for exist)
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
What: /sys/class/hidraw/hidraw*/device/speed
|
|
||||||
Date: April 2010
|
|
||||||
Kernel Version: 2.6.35
|
|
||||||
Contact: linux-bluetooth@vger.kernel.org
|
|
||||||
Description:
|
|
||||||
The /sys/class/hidraw/hidraw*/device/speed file controls
|
|
||||||
reporting speed of wacom bluetooth tablet. Reading from
|
|
||||||
this file returns 1 if tablet reports in high speed mode
|
|
||||||
or 0 otherwise. Writing to this file one of these values
|
|
||||||
switches reporting speed.
|
|
|
@ -166,8 +166,8 @@ if (condition)
|
||||||
else
|
else
|
||||||
do_that();
|
do_that();
|
||||||
|
|
||||||
This does not apply if one branch of a conditional statement is a single
|
This does not apply if only one branch of a conditional statement is a single
|
||||||
statement. Use braces in both branches.
|
statement; in the latter case use braces in both branches:
|
||||||
|
|
||||||
if (condition) {
|
if (condition) {
|
||||||
do_this();
|
do_this();
|
||||||
|
|
|
@ -50,6 +50,13 @@ specify the GFP_ flags (see kmalloc) for the allocation (the
|
||||||
implementation may choose to ignore flags that affect the location of
|
implementation may choose to ignore flags that affect the location of
|
||||||
the returned memory, like GFP_DMA).
|
the returned memory, like GFP_DMA).
|
||||||
|
|
||||||
|
void *
|
||||||
|
dma_zalloc_coherent(struct device *dev, size_t size,
|
||||||
|
dma_addr_t *dma_handle, gfp_t flag)
|
||||||
|
|
||||||
|
Wraps dma_alloc_coherent() and also zeroes the returned memory if the
|
||||||
|
allocation attempt succeeded.
|
||||||
|
|
||||||
void
|
void
|
||||||
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
|
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
|
||||||
dma_addr_t dma_handle)
|
dma_addr_t dma_handle)
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
The Linux DRM layer contains code intended to support the needs
|
The Linux DRM layer contains code intended to support the needs
|
||||||
of complex graphics devices, usually containing programmable
|
of complex graphics devices, usually containing programmable
|
||||||
pipelines well suited to 3D graphics acceleration. Graphics
|
pipelines well suited to 3D graphics acceleration. Graphics
|
||||||
drivers in the kernel can make use of DRM functions to make
|
drivers in the kernel may make use of DRM functions to make
|
||||||
tasks like memory management, interrupt handling and DMA easier,
|
tasks like memory management, interrupt handling and DMA easier,
|
||||||
and provide a uniform interface to applications.
|
and provide a uniform interface to applications.
|
||||||
</para>
|
</para>
|
||||||
|
@ -57,10 +57,10 @@
|
||||||
existing drivers.
|
existing drivers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
First, we'll go over some typical driver initialization
|
First, we go over some typical driver initialization
|
||||||
requirements, like setting up command buffers, creating an
|
requirements, like setting up command buffers, creating an
|
||||||
initial output configuration, and initializing core services.
|
initial output configuration, and initializing core services.
|
||||||
Subsequent sections will cover core internals in more detail,
|
Subsequent sections cover core internals in more detail,
|
||||||
providing implementation notes and examples.
|
providing implementation notes and examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The core of every DRM driver is struct drm_driver. Drivers
|
The core of every DRM driver is struct drm_driver. Drivers
|
||||||
will typically statically initialize a drm_driver structure,
|
typically statically initialize a drm_driver structure,
|
||||||
then pass it to drm_init() at load time.
|
then pass it to drm_init() at load time.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -88,8 +88,8 @@
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
static struct drm_driver driver = {
|
static struct drm_driver driver = {
|
||||||
/* don't use mtrr's here, the Xserver or user space app should
|
/* Don't use MTRRs here; the Xserver or userspace app should
|
||||||
* deal with them for intel hardware.
|
* deal with them for Intel hardware.
|
||||||
*/
|
*/
|
||||||
.driver_features =
|
.driver_features =
|
||||||
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
||||||
|
@ -154,8 +154,8 @@
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above, taken from the i915 DRM driver, the driver
|
In the example above, taken from the i915 DRM driver, the driver
|
||||||
sets several flags indicating what core features it supports.
|
sets several flags indicating what core features it supports;
|
||||||
We'll go over the individual callbacks in later sections. Since
|
we go over the individual callbacks in later sections. Since
|
||||||
flags indicate which features your driver supports to the DRM
|
flags indicate which features your driver supports to the DRM
|
||||||
core, you need to set most of them prior to calling drm_init(). Some,
|
core, you need to set most of them prior to calling drm_init(). Some,
|
||||||
like DRIVER_MODESET can be set later based on user supplied parameters,
|
like DRIVER_MODESET can be set later based on user supplied parameters,
|
||||||
|
@ -203,8 +203,8 @@
|
||||||
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
DRIVER_HAVE_IRQ indicates whether the driver has a IRQ
|
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ
|
||||||
handler, DRIVER_IRQ_SHARED indicates whether the device &
|
handler. DRIVER_IRQ_SHARED indicates whether the device &
|
||||||
handler support shared IRQs (note that this is required of
|
handler support shared IRQs (note that this is required of
|
||||||
PCI drivers).
|
PCI drivers).
|
||||||
</para>
|
</para>
|
||||||
|
@ -214,8 +214,8 @@
|
||||||
<term>DRIVER_DMA_QUEUE</term>
|
<term>DRIVER_DMA_QUEUE</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
If the driver queues DMA requests and completes them
|
Should be set if the driver queues DMA requests and completes them
|
||||||
asynchronously, this flag should be set. Deprecated.
|
asynchronously. Deprecated.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -238,7 +238,7 @@
|
||||||
</variablelist>
|
</variablelist>
|
||||||
<para>
|
<para>
|
||||||
In this specific case, the driver requires AGP and supports
|
In this specific case, the driver requires AGP and supports
|
||||||
IRQs. DMA, as we'll see, is handled by device specific ioctls
|
IRQs. DMA, as discussed later, is handled by device-specific ioctls
|
||||||
in this case. It also supports the kernel mode setting APIs, though
|
in this case. It also supports the kernel mode setting APIs, though
|
||||||
unlike in the actual i915 driver source, this example unconditionally
|
unlike in the actual i915 driver source, this example unconditionally
|
||||||
exports KMS capability.
|
exports KMS capability.
|
||||||
|
@ -269,36 +269,34 @@
|
||||||
initial output configuration.
|
initial output configuration.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Note that the tasks performed at driver load time must not
|
If compatibility is a concern (e.g. with drivers converted over
|
||||||
conflict with DRM client requirements. For instance, if user
|
to the new interfaces from the old ones), care must be taken to
|
||||||
|
prevent device initialization and control that is incompatible with
|
||||||
|
currently active userspace drivers. For instance, if user
|
||||||
level mode setting drivers are in use, it would be problematic
|
level mode setting drivers are in use, it would be problematic
|
||||||
to perform output discovery & configuration at load time.
|
to perform output discovery & configuration at load time.
|
||||||
Likewise, if pre-memory management aware user level drivers are
|
Likewise, if user-level drivers unaware of memory management are
|
||||||
in use, memory management and command buffer setup may need to
|
in use, memory management and command buffer setup may need to
|
||||||
be omitted. These requirements are driver specific, and care
|
be omitted. These requirements are driver-specific, and care
|
||||||
needs to be taken to keep both old and new applications and
|
needs to be taken to keep both old and new applications and
|
||||||
libraries working. The i915 driver supports the "modeset"
|
libraries working. The i915 driver supports the "modeset"
|
||||||
module parameter to control whether advanced features are
|
module parameter to control whether advanced features are
|
||||||
enabled at load time or in legacy fashion. If compatibility is
|
enabled at load time or in legacy fashion.
|
||||||
a concern (e.g. with drivers converted over to the new interfaces
|
|
||||||
from the old ones), care must be taken to prevent incompatible
|
|
||||||
device initialization and control with the currently active
|
|
||||||
userspace drivers.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Driver private & performance counters</title>
|
<title>Driver private & performance counters</title>
|
||||||
<para>
|
<para>
|
||||||
The driver private hangs off the main drm_device structure and
|
The driver private hangs off the main drm_device structure and
|
||||||
can be used for tracking various device specific bits of
|
can be used for tracking various device-specific bits of
|
||||||
information, like register offsets, command buffer status,
|
information, like register offsets, command buffer status,
|
||||||
register state for suspend/resume, etc. At load time, a
|
register state for suspend/resume, etc. At load time, a
|
||||||
driver can simply allocate one and set drm_device.dev_priv
|
driver may simply allocate one and set drm_device.dev_priv
|
||||||
appropriately; at unload the driver can free it and set
|
appropriately; it should be freed and drm_device.dev_priv set
|
||||||
drm_device.dev_priv to NULL.
|
to NULL when the driver is unloaded.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The DRM supports several counters which can be used for rough
|
The DRM supports several counters which may be used for rough
|
||||||
performance characterization. Note that the DRM stat counter
|
performance characterization. Note that the DRM stat counter
|
||||||
system is not often used by applications, and supporting
|
system is not often used by applications, and supporting
|
||||||
additional counters is completely optional.
|
additional counters is completely optional.
|
||||||
|
@ -307,15 +305,15 @@
|
||||||
These interfaces are deprecated and should not be used. If performance
|
These interfaces are deprecated and should not be used. If performance
|
||||||
monitoring is desired, the developer should investigate and
|
monitoring is desired, the developer should investigate and
|
||||||
potentially enhance the kernel perf and tracing infrastructure to export
|
potentially enhance the kernel perf and tracing infrastructure to export
|
||||||
GPU related performance information to performance monitoring
|
GPU related performance information for consumption by performance
|
||||||
tools and applications.
|
monitoring tools and applications.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Configuring the device</title>
|
<title>Configuring the device</title>
|
||||||
<para>
|
<para>
|
||||||
Obviously, device configuration will be device specific.
|
Obviously, device configuration is device-specific.
|
||||||
However, there are several common operations: finding a
|
However, there are several common operations: finding a
|
||||||
device's PCI resources, mapping them, and potentially setting
|
device's PCI resources, mapping them, and potentially setting
|
||||||
up an IRQ handler.
|
up an IRQ handler.
|
||||||
|
@ -323,10 +321,10 @@
|
||||||
<para>
|
<para>
|
||||||
Finding & mapping resources is fairly straightforward. The
|
Finding & mapping resources is fairly straightforward. The
|
||||||
DRM wrapper functions, drm_get_resource_start() and
|
DRM wrapper functions, drm_get_resource_start() and
|
||||||
drm_get_resource_len() can be used to find BARs on the given
|
drm_get_resource_len(), may be used to find BARs on the given
|
||||||
drm_device struct. Once those values have been retrieved, the
|
drm_device struct. Once those values have been retrieved, the
|
||||||
driver load function can call drm_addmap() to create a new
|
driver load function can call drm_addmap() to create a new
|
||||||
mapping for the BAR in question. Note you'll probably want a
|
mapping for the BAR in question. Note that you probably want a
|
||||||
drm_local_map_t in your driver private structure to track any
|
drm_local_map_t in your driver private structure to track any
|
||||||
mappings you create.
|
mappings you create.
|
||||||
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
||||||
|
@ -335,20 +333,20 @@
|
||||||
<para>
|
<para>
|
||||||
if compatibility with other operating systems isn't a concern
|
if compatibility with other operating systems isn't a concern
|
||||||
(DRM drivers can run under various BSD variants and OpenSolaris),
|
(DRM drivers can run under various BSD variants and OpenSolaris),
|
||||||
native Linux calls can be used for the above, e.g. pci_resource_*
|
native Linux calls may be used for the above, e.g. pci_resource_*
|
||||||
and iomap*/iounmap. See the Linux device driver book for more
|
and iomap*/iounmap. See the Linux device driver book for more
|
||||||
info.
|
info.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once you have a register map, you can use the DRM_READn() and
|
Once you have a register map, you may use the DRM_READn() and
|
||||||
DRM_WRITEn() macros to access the registers on your device, or
|
DRM_WRITEn() macros to access the registers on your device, or
|
||||||
use driver specific versions to offset into your MMIO space
|
use driver-specific versions to offset into your MMIO space
|
||||||
relative to a driver specific base pointer (see I915_READ for
|
relative to a driver-specific base pointer (see I915_READ for
|
||||||
example).
|
an example).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your device supports interrupt generation, you may want to
|
If your device supports interrupt generation, you may want to
|
||||||
setup an interrupt handler at driver load time as well. This
|
set up an interrupt handler when the driver is loaded. This
|
||||||
is done using the drm_irq_install() function. If your device
|
is done using the drm_irq_install() function. If your device
|
||||||
supports vertical blank interrupts, it should call
|
supports vertical blank interrupts, it should call
|
||||||
drm_vblank_init() to initialize the core vblank handling code before
|
drm_vblank_init() to initialize the core vblank handling code before
|
||||||
|
@ -357,7 +355,7 @@
|
||||||
</para>
|
</para>
|
||||||
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
||||||
<para>
|
<para>
|
||||||
Once your interrupt handler is registered (it'll use your
|
Once your interrupt handler is registered (it uses your
|
||||||
drm_driver.irq_handler as the actual interrupt handling
|
drm_driver.irq_handler as the actual interrupt handling
|
||||||
function), you can safely enable interrupts on your device,
|
function), you can safely enable interrupts on your device,
|
||||||
assuming any other state your interrupt handler uses is also
|
assuming any other state your interrupt handler uses is also
|
||||||
|
@ -371,10 +369,10 @@
|
||||||
using the pci_map_rom() call, a convenience function that
|
using the pci_map_rom() call, a convenience function that
|
||||||
takes care of mapping the actual ROM, whether it has been
|
takes care of mapping the actual ROM, whether it has been
|
||||||
shadowed into memory (typically at address 0xc0000) or exists
|
shadowed into memory (typically at address 0xc0000) or exists
|
||||||
on the PCI device in the ROM BAR. Note that once you've
|
on the PCI device in the ROM BAR. Note that after the ROM
|
||||||
mapped the ROM and extracted any necessary information, be
|
has been mapped and any necessary information has been extracted,
|
||||||
sure to unmap it; on many devices the ROM address decoder is
|
it should be unmapped; on many devices, the ROM address decoder is
|
||||||
shared with other BARs, so leaving it mapped can cause
|
shared with other BARs, so leaving it mapped could cause
|
||||||
undesired behavior like hangs or memory corruption.
|
undesired behavior like hangs or memory corruption.
|
||||||
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
||||||
</para>
|
</para>
|
||||||
|
@ -389,9 +387,9 @@
|
||||||
should support a memory manager.
|
should support a memory manager.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your driver supports memory management (it should!), you'll
|
If your driver supports memory management (it should!), you
|
||||||
need to set that up at load time as well. How you initialize
|
need to set that up at load time as well. How you initialize
|
||||||
it depends on which memory manager you're using, TTM or GEM.
|
it depends on which memory manager you're using: TTM or GEM.
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>TTM initialization</title>
|
<title>TTM initialization</title>
|
||||||
|
@ -401,7 +399,7 @@
|
||||||
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
||||||
graphics devices. If your device has dedicated RAM, supporting
|
graphics devices. If your device has dedicated RAM, supporting
|
||||||
TTM is desirable. TTM also integrates tightly with your
|
TTM is desirable. TTM also integrates tightly with your
|
||||||
driver specific buffer execution function. See the radeon
|
driver-specific buffer execution function. See the radeon
|
||||||
driver for examples.
|
driver for examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -429,21 +427,21 @@
|
||||||
created by the memory manager at runtime. Your global TTM should
|
created by the memory manager at runtime. Your global TTM should
|
||||||
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
||||||
object should be sizeof(struct ttm_mem_global), and the init and
|
object should be sizeof(struct ttm_mem_global), and the init and
|
||||||
release hooks should point at your driver specific init and
|
release hooks should point at your driver-specific init and
|
||||||
release routines, which will probably eventually call
|
release routines, which probably eventually call
|
||||||
ttm_mem_global_init and ttm_mem_global_release respectively.
|
ttm_mem_global_init and ttm_mem_global_release, respectively.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once your global TTM accounting structure is set up and initialized
|
Once your global TTM accounting structure is set up and initialized
|
||||||
(done by calling ttm_global_item_ref on the global object you
|
by calling ttm_global_item_ref() on it,
|
||||||
just created), you'll need to create a buffer object TTM to
|
you need to create a buffer object TTM to
|
||||||
provide a pool for buffer object allocation by clients and the
|
provide a pool for buffer object allocation by clients and the
|
||||||
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
||||||
and its size should be sizeof(struct ttm_bo_global). Again,
|
and its size should be sizeof(struct ttm_bo_global). Again,
|
||||||
driver specific init and release functions can be provided,
|
driver-specific init and release functions may be provided,
|
||||||
likely eventually calling ttm_bo_global_init and
|
likely eventually calling ttm_bo_global_init() and
|
||||||
ttm_bo_global_release, respectively. Also like the previous
|
ttm_bo_global_release(), respectively. Also, like the previous
|
||||||
object, ttm_global_item_ref is used to create an initial reference
|
object, ttm_global_item_ref() is used to create an initial reference
|
||||||
count for the TTM, which will call your initialization function.
|
count for the TTM, which will call your initialization function.
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
@ -453,27 +451,26 @@
|
||||||
GEM is an alternative to TTM, designed specifically for UMA
|
GEM is an alternative to TTM, designed specifically for UMA
|
||||||
devices. It has simpler initialization and execution requirements
|
devices. It has simpler initialization and execution requirements
|
||||||
than TTM, but has no VRAM management capability. Core GEM
|
than TTM, but has no VRAM management capability. Core GEM
|
||||||
initialization is comprised of a basic drm_mm_init call to create
|
is initialized by calling drm_mm_init() to create
|
||||||
a GTT DRM MM object, which provides an address space pool for
|
a GTT DRM MM object, which provides an address space pool for
|
||||||
object allocation. In a KMS configuration, the driver will
|
object allocation. In a KMS configuration, the driver
|
||||||
need to allocate and initialize a command ring buffer following
|
needs to allocate and initialize a command ring buffer following
|
||||||
basic GEM initialization. Most UMA devices have a so-called
|
core GEM initialization. A UMA device usually has what is called a
|
||||||
"stolen" memory region, which provides space for the initial
|
"stolen" memory region, which provides space for the initial
|
||||||
framebuffer and large, contiguous memory regions required by the
|
framebuffer and large, contiguous memory regions required by the
|
||||||
device. This space is not typically managed by GEM, and must
|
device. This space is not typically managed by GEM, and it must
|
||||||
be initialized separately into its own DRM MM object.
|
be initialized separately into its own DRM MM object.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Initialization will be driver specific, and will depend on
|
Initialization is driver-specific. In the case of Intel
|
||||||
the architecture of the device. In the case of Intel
|
|
||||||
integrated graphics chips like 965GM, GEM initialization can
|
integrated graphics chips like 965GM, GEM initialization can
|
||||||
be done by calling the internal GEM init function,
|
be done by calling the internal GEM init function,
|
||||||
i915_gem_do_init(). Since the 965GM is a UMA device
|
i915_gem_do_init(). Since the 965GM is a UMA device
|
||||||
(i.e. it doesn't have dedicated VRAM), GEM will manage
|
(i.e. it doesn't have dedicated VRAM), GEM manages
|
||||||
making regular RAM available for GPU operations. Memory set
|
making regular RAM available for GPU operations. Memory set
|
||||||
aside by the BIOS (called "stolen" memory by the i915
|
aside by the BIOS (called "stolen" memory by the i915
|
||||||
driver) will be managed by the DRM memrange allocator; the
|
driver) is managed by the DRM memrange allocator; the
|
||||||
rest of the aperture will be managed by GEM.
|
rest of the aperture is managed by GEM.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
/* Basic memrange allocator for stolen space (aka vram) */
|
/* Basic memrange allocator for stolen space (aka vram) */
|
||||||
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
||||||
|
@ -483,7 +480,7 @@
|
||||||
<!--!Edrivers/char/drm/drm_memrange.c-->
|
<!--!Edrivers/char/drm/drm_memrange.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once the memory manager has been set up, we can allocate the
|
Once the memory manager has been set up, we may allocate the
|
||||||
command buffer. In the i915 case, this is also done with a
|
command buffer. In the i915 case, this is also done with a
|
||||||
GEM function, i915_gem_init_ringbuffer().
|
GEM function, i915_gem_init_ringbuffer().
|
||||||
</para>
|
</para>
|
||||||
|
@ -493,16 +490,25 @@
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Output configuration</title>
|
<title>Output configuration</title>
|
||||||
<para>
|
<para>
|
||||||
The final initialization task is output configuration. This involves
|
The final initialization task is output configuration. This involves:
|
||||||
finding and initializing the CRTCs, encoders and connectors
|
<itemizedlist>
|
||||||
for your device, creating an initial configuration and
|
<listitem>
|
||||||
registering a framebuffer console driver.
|
Finding and initializing the CRTCs, encoders, and connectors
|
||||||
|
for the device.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Creating an initial configuration.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Registering a framebuffer console driver.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>Output discovery and initialization</title>
|
<title>Output discovery and initialization</title>
|
||||||
<para>
|
<para>
|
||||||
Several core functions exist to create CRTCs, encoders and
|
Several core functions exist to create CRTCs, encoders, and
|
||||||
connectors, namely drm_crtc_init(), drm_connector_init() and
|
connectors, namely: drm_crtc_init(), drm_connector_init(), and
|
||||||
drm_encoder_init(), along with several "helper" functions to
|
drm_encoder_init(), along with several "helper" functions to
|
||||||
perform common tasks.
|
perform common tasks.
|
||||||
</para>
|
</para>
|
||||||
|
@ -555,10 +561,10 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above (again, taken from the i915 driver), a
|
In the example above (again, taken from the i915 driver), a
|
||||||
CRT connector and encoder combination is created. A device
|
CRT connector and encoder combination is created. A device-specific
|
||||||
specific i2c bus is also created, for fetching EDID data and
|
i2c bus is also created for fetching EDID data and
|
||||||
performing monitor detection. Once the process is complete,
|
performing monitor detection. Once the process is complete,
|
||||||
the new connector is registered with sysfs, to make its
|
the new connector is registered with sysfs to make its
|
||||||
properties available to applications.
|
properties available to applications.
|
||||||
</para>
|
</para>
|
||||||
<sect4>
|
<sect4>
|
||||||
|
@ -567,12 +573,12 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
Since many PC-class graphics devices have similar display output
|
Since many PC-class graphics devices have similar display output
|
||||||
designs, the DRM provides a set of helper functions to make
|
designs, the DRM provides a set of helper functions to make
|
||||||
output management easier. The core helper routines handle
|
output management easier. The core helper routines handle
|
||||||
encoder re-routing and disabling of unused functions following
|
encoder re-routing and the disabling of unused functions following
|
||||||
mode set. Using the helpers is optional, but recommended for
|
mode setting. Using the helpers is optional, but recommended for
|
||||||
devices with PC-style architectures (i.e. a set of display planes
|
devices with PC-style architectures (i.e. a set of display planes
|
||||||
for feeding pixels to encoders which are in turn routed to
|
for feeding pixels to encoders which are in turn routed to
|
||||||
connectors). Devices with more complex requirements needing
|
connectors). Devices with more complex requirements needing
|
||||||
finer grained management can opt to use the core callbacks
|
finer grained management may opt to use the core callbacks
|
||||||
directly.
|
directly.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -580,17 +586,25 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
</para>
|
</para>
|
||||||
</sect4>
|
</sect4>
|
||||||
<para>
|
<para>
|
||||||
For each encoder, CRTC and connector, several functions must
|
Each encoder object needs to provide:
|
||||||
be provided, depending on the object type. Encoder objects
|
<itemizedlist>
|
||||||
need to provide a DPMS (basically on/off) function, mode fixup
|
<listitem>
|
||||||
(for converting requested modes into native hardware timings),
|
A DPMS (basically on/off) function.
|
||||||
and prepare, set and commit functions for use by the core DRM
|
</listitem>
|
||||||
helper functions. Connector helpers need to provide mode fetch and
|
<listitem>
|
||||||
validity functions as well as an encoder matching function for
|
A mode-fixup function (for converting requested modes into
|
||||||
returning an ideal encoder for a given connector. The core
|
native hardware timings).
|
||||||
connector functions include a DPMS callback, (deprecated)
|
</listitem>
|
||||||
save/restore routines, detection, mode probing, property handling,
|
<listitem>
|
||||||
and cleanup functions.
|
Functions (prepare, set, and commit) for use by the core DRM
|
||||||
|
helper functions.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Connector helpers need to provide functions (mode-fetch, validity,
|
||||||
|
and encoder-matching) for returning an ideal encoder for a given
|
||||||
|
connector. The core connector functions include a DPMS callback,
|
||||||
|
save/restore routines (deprecated), detection, mode probing,
|
||||||
|
property handling, and cleanup functions.
|
||||||
</para>
|
</para>
|
||||||
<!--!Edrivers/char/drm/drm_crtc.h-->
|
<!--!Edrivers/char/drm/drm_crtc.h-->
|
||||||
<!--!Edrivers/char/drm/drm_crtc.c-->
|
<!--!Edrivers/char/drm/drm_crtc.c-->
|
||||||
|
@ -605,22 +619,33 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<title>VBlank event handling</title>
|
<title>VBlank event handling</title>
|
||||||
<para>
|
<para>
|
||||||
The DRM core exposes two vertical blank related ioctls:
|
The DRM core exposes two vertical blank related ioctls:
|
||||||
DRM_IOCTL_WAIT_VBLANK and DRM_IOCTL_MODESET_CTL.
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_WAIT_VBLANK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This takes a struct drm_wait_vblank structure as its argument,
|
||||||
|
and it is used to block or request a signal when a specified
|
||||||
|
vblank event occurs.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_MODESET_CTL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This should be called by application level drivers before and
|
||||||
|
after mode setting, since on many devices the vertical blank
|
||||||
|
counter is reset at that time. Internally, the DRM snapshots
|
||||||
|
the last vblank count when the ioctl is called with the
|
||||||
|
_DRM_PRE_MODESET command, so that the counter won't go backwards
|
||||||
|
(which is dealt with when _DRM_POST_MODESET is used).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
<!--!Edrivers/char/drm/drm_irq.c-->
|
<!--!Edrivers/char/drm/drm_irq.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
DRM_IOCTL_WAIT_VBLANK takes a struct drm_wait_vblank structure
|
|
||||||
as its argument, and is used to block or request a signal when a
|
|
||||||
specified vblank event occurs.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
DRM_IOCTL_MODESET_CTL should be called by application level
|
|
||||||
drivers before and after mode setting, since on many devices the
|
|
||||||
vertical blank counter will be reset at that time. Internally,
|
|
||||||
the DRM snapshots the last vblank count when the ioctl is called
|
|
||||||
with the _DRM_PRE_MODESET command so that the counter won't go
|
|
||||||
backwards (which is dealt with when _DRM_POST_MODESET is used).
|
|
||||||
</para>
|
|
||||||
<para>
|
<para>
|
||||||
To support the functions above, the DRM core provides several
|
To support the functions above, the DRM core provides several
|
||||||
helper functions for tracking vertical blank counters, and
|
helper functions for tracking vertical blank counters, and
|
||||||
|
@ -632,24 +657,24 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
register. The enable and disable vblank callbacks should enable
|
register. The enable and disable vblank callbacks should enable
|
||||||
and disable vertical blank interrupts, respectively. In the
|
and disable vertical blank interrupts, respectively. In the
|
||||||
absence of DRM clients waiting on vblank events, the core DRM
|
absence of DRM clients waiting on vblank events, the core DRM
|
||||||
code will use the disable_vblank() function to disable
|
code uses the disable_vblank() function to disable
|
||||||
interrupts, which saves power. They'll be re-enabled again when
|
interrupts, which saves power. They are re-enabled again when
|
||||||
a client calls the vblank wait ioctl above.
|
a client calls the vblank wait ioctl above.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Devices that don't provide a count register can simply use an
|
A device that doesn't provide a count register may simply use an
|
||||||
internal atomic counter incremented on every vertical blank
|
internal atomic counter incremented on every vertical blank
|
||||||
interrupt, and can make their enable and disable vblank
|
interrupt (and then treat the enable_vblank() and disable_vblank()
|
||||||
functions into no-ops.
|
callbacks as no-ops).
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Memory management</title>
|
<title>Memory management</title>
|
||||||
<para>
|
<para>
|
||||||
The memory manager lies at the heart of many DRM operations, and
|
The memory manager lies at the heart of many DRM operations; it
|
||||||
is also required to support advanced client features like OpenGL
|
is required to support advanced client features like OpenGL
|
||||||
pbuffers. The DRM currently contains two memory managers, TTM
|
pbuffers. The DRM currently contains two memory managers: TTM
|
||||||
and GEM.
|
and GEM.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -679,41 +704,46 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<para>
|
<para>
|
||||||
GEM-enabled drivers must provide gem_init_object() and
|
GEM-enabled drivers must provide gem_init_object() and
|
||||||
gem_free_object() callbacks to support the core memory
|
gem_free_object() callbacks to support the core memory
|
||||||
allocation routines. They should also provide several driver
|
allocation routines. They should also provide several driver-specific
|
||||||
specific ioctls to support command execution, pinning, buffer
|
ioctls to support command execution, pinning, buffer
|
||||||
read & write, mapping, and domain ownership transfers.
|
read & write, mapping, and domain ownership transfers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
On a fundamental level, GEM involves several operations: memory
|
On a fundamental level, GEM involves several operations:
|
||||||
allocation and freeing, command execution, and aperture management
|
<itemizedlist>
|
||||||
at command execution time. Buffer object allocation is relatively
|
<listitem>Memory allocation and freeing</listitem>
|
||||||
|
<listitem>Command execution</listitem>
|
||||||
|
<listitem>Aperture management at command execution time</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Buffer object allocation is relatively
|
||||||
straightforward and largely provided by Linux's shmem layer, which
|
straightforward and largely provided by Linux's shmem layer, which
|
||||||
provides memory to back each object. When mapped into the GTT
|
provides memory to back each object. When mapped into the GTT
|
||||||
or used in a command buffer, the backing pages for an object are
|
or used in a command buffer, the backing pages for an object are
|
||||||
flushed to memory and marked write combined so as to be coherent
|
flushed to memory and marked write combined so as to be coherent
|
||||||
with the GPU. Likewise, when the GPU finishes rendering to an object,
|
with the GPU. Likewise, if the CPU accesses an object after the GPU
|
||||||
if the CPU accesses it, it must be made coherent with the CPU's view
|
has finished rendering to the object, then the object must be made
|
||||||
|
coherent with the CPU's view
|
||||||
of memory, usually involving GPU cache flushing of various kinds.
|
of memory, usually involving GPU cache flushing of various kinds.
|
||||||
This core CPU<->GPU coherency management is provided by the GEM
|
This core CPU<->GPU coherency management is provided by a
|
||||||
set domain function, which evaluates an object's current domain and
|
device-specific ioctl, which evaluates an object's current domain and
|
||||||
performs any necessary flushing or synchronization to put the object
|
performs any necessary flushing or synchronization to put the object
|
||||||
into the desired coherency domain (note that the object may be busy,
|
into the desired coherency domain (note that the object may be busy,
|
||||||
i.e. an active render target; in that case the set domain function
|
i.e. an active render target; in that case, setting the domain
|
||||||
will block the client and wait for rendering to complete before
|
blocks the client and waits for rendering to complete before
|
||||||
performing any necessary flushing operations).
|
performing any necessary flushing operations).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Perhaps the most important GEM function is providing a command
|
Perhaps the most important GEM function is providing a command
|
||||||
execution interface to clients. Client programs construct command
|
execution interface to clients. Client programs construct command
|
||||||
buffers containing references to previously allocated memory objects
|
buffers containing references to previously allocated memory objects,
|
||||||
and submit them to GEM. At that point, GEM will take care to bind
|
and then submit them to GEM. At that point, GEM takes care to bind
|
||||||
all the objects into the GTT, execute the buffer, and provide
|
all the objects into the GTT, execute the buffer, and provide
|
||||||
necessary synchronization between clients accessing the same buffers.
|
necessary synchronization between clients accessing the same buffers.
|
||||||
This often involves evicting some objects from the GTT and re-binding
|
This often involves evicting some objects from the GTT and re-binding
|
||||||
others (a fairly expensive operation), and providing relocation
|
others (a fairly expensive operation), and providing relocation
|
||||||
support which hides fixed GTT offsets from clients. Clients must
|
support which hides fixed GTT offsets from clients. Clients must
|
||||||
take care not to submit command buffers that reference more objects
|
take care not to submit command buffers that reference more objects
|
||||||
than can fit in the GTT or GEM will reject them and no rendering
|
than can fit in the GTT; otherwise, GEM will reject them and no rendering
|
||||||
will occur. Similarly, if several objects in the buffer require
|
will occur. Similarly, if several objects in the buffer require
|
||||||
fence registers to be allocated for correct rendering (e.g. 2D blits
|
fence registers to be allocated for correct rendering (e.g. 2D blits
|
||||||
on pre-965 chips), care must be taken not to require more fence
|
on pre-965 chips), care must be taken not to require more fence
|
||||||
|
@ -729,7 +759,7 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<title>Output management</title>
|
<title>Output management</title>
|
||||||
<para>
|
<para>
|
||||||
At the core of the DRM output management code is a set of
|
At the core of the DRM output management code is a set of
|
||||||
structures representing CRTCs, encoders and connectors.
|
structures representing CRTCs, encoders, and connectors.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
A CRTC is an abstraction representing a part of the chip that
|
A CRTC is an abstraction representing a part of the chip that
|
||||||
|
@ -765,21 +795,19 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Framebuffer management</title>
|
<title>Framebuffer management</title>
|
||||||
<para>
|
<para>
|
||||||
In order to set a mode on a given CRTC, encoder and connector
|
Clients need to provide a framebuffer object which provides a source
|
||||||
configuration, clients need to provide a framebuffer object which
|
of pixels for a CRTC to deliver to the encoder(s) and ultimately the
|
||||||
will provide a source of pixels for the CRTC to deliver to the encoder(s)
|
connector(s). A framebuffer is fundamentally a driver-specific memory
|
||||||
and ultimately the connector(s) in the configuration. A framebuffer
|
object, made into an opaque handle by the DRM's addfb() function.
|
||||||
is fundamentally a driver specific memory object, made into an opaque
|
Once a framebuffer has been created this way, it may be passed to the
|
||||||
handle by the DRM addfb function. Once an fb has been created this
|
KMS mode setting routines for use in a completed configuration.
|
||||||
way it can be passed to the KMS mode setting routines for use in
|
|
||||||
a configuration.
|
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Command submission & fencing</title>
|
<title>Command submission & fencing</title>
|
||||||
<para>
|
<para>
|
||||||
This should cover a few device specific command submission
|
This should cover a few device-specific command submission
|
||||||
implementations.
|
implementations.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
@ -789,7 +817,7 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<para>
|
<para>
|
||||||
The DRM core provides some suspend/resume code, but drivers
|
The DRM core provides some suspend/resume code, but drivers
|
||||||
wanting full suspend/resume support should provide save() and
|
wanting full suspend/resume support should provide save() and
|
||||||
restore() functions. These will be called at suspend,
|
restore() functions. These are called at suspend,
|
||||||
hibernate, or resume time, and should perform any state save or
|
hibernate, or resume time, and should perform any state save or
|
||||||
restore required by your device across suspend or hibernate
|
restore required by your device across suspend or hibernate
|
||||||
states.
|
states.
|
||||||
|
@ -812,8 +840,8 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
<para>
|
<para>
|
||||||
The DRM core exports several interfaces to applications,
|
The DRM core exports several interfaces to applications,
|
||||||
generally intended to be used through corresponding libdrm
|
generally intended to be used through corresponding libdrm
|
||||||
wrapper functions. In addition, drivers export device specific
|
wrapper functions. In addition, drivers export device-specific
|
||||||
interfaces for use by userspace drivers & device aware
|
interfaces for use by userspace drivers & device-aware
|
||||||
applications through ioctls and sysfs files.
|
applications through ioctls and sysfs files.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
@ -822,8 +850,8 @@ void intel_crt_init(struct drm_device *dev)
|
||||||
management, memory management, and output management.
|
management, memory management, and output management.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Cover generic ioctls and sysfs layout here. Only need high
|
Cover generic ioctls and sysfs layout here. We only need high-level
|
||||||
level info, since man pages will cover the rest.
|
info, since man pages should cover the rest.
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
|
|
@ -352,6 +352,7 @@ typedef enum fe_delivery_system {
|
||||||
SYS_CMMB,
|
SYS_CMMB,
|
||||||
SYS_DAB,
|
SYS_DAB,
|
||||||
SYS_DVBT2,
|
SYS_DVBT2,
|
||||||
|
SYS_TURBO,
|
||||||
} fe_delivery_system_t;
|
} fe_delivery_system_t;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
|
@ -809,6 +810,8 @@ typedef enum fe_hierarchy {
|
||||||
<listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem>
|
||||||
<listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem>
|
||||||
<listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem>
|
||||||
|
<listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem>
|
||||||
|
<listitem><para><link linkend="DTV-TONE"><constant>DTV_TONE</constant></link></para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
<para>Future implementations might add those two missing parameters:</para>
|
<para>Future implementations might add those two missing parameters:</para>
|
||||||
<itemizedlist mark='opencircle'>
|
<itemizedlist mark='opencircle'>
|
||||||
|
@ -818,25 +821,18 @@ typedef enum fe_hierarchy {
|
||||||
</section>
|
</section>
|
||||||
<section id="dvbs2-params">
|
<section id="dvbs2-params">
|
||||||
<title>DVB-S2 delivery system</title>
|
<title>DVB-S2 delivery system</title>
|
||||||
<para>The following parameters are valid for DVB-S2:</para>
|
<para>In addition to all parameters valid for DVB-S, DVB-S2 supports the following parameters:</para>
|
||||||
<itemizedlist mark='opencircle'>
|
<itemizedlist mark='opencircle'>
|
||||||
<listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem>
|
||||||
<listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-TONE"><constant>DTV_TONE</constant></link></para></listitem>
|
|
||||||
<listitem><para><link linkend="DTV-PILOT"><constant>DTV_PILOT</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-PILOT"><constant>DTV_PILOT</constant></link></para></listitem>
|
||||||
<listitem><para><link linkend="DTV-ROLLOFF"><constant>DTV_ROLLOFF</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-ROLLOFF"><constant>DTV_ROLLOFF</constant></link></para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
<para>Future implementations might add those two missing parameters:</para>
|
</section>
|
||||||
|
<section id="turbo-params">
|
||||||
|
<title>Turbo code delivery system</title>
|
||||||
|
<para>In addition to all parameters valid for DVB-S, turbo code supports the following parameters:</para>
|
||||||
<itemizedlist mark='opencircle'>
|
<itemizedlist mark='opencircle'>
|
||||||
<listitem><para><link linkend="DTV-DISEQC-MASTER"><constant>DTV_DISEQC_MASTER</constant></link></para></listitem>
|
<listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem>
|
||||||
<listitem><para><link linkend="DTV-DISEQC-SLAVE-REPLY"><constant>DTV_DISEQC_SLAVE_REPLY</constant></link></para></listitem>
|
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
<section id="isdbs-params">
|
<section id="isdbs-params">
|
||||||
|
|
|
@ -205,7 +205,7 @@ a partial path like:</para>
|
||||||
additional include file <emphasis
|
additional include file <emphasis
|
||||||
role="tt">linux/dvb/version.h</emphasis> exists, which defines the
|
role="tt">linux/dvb/version.h</emphasis> exists, which defines the
|
||||||
constant <emphasis role="tt">DVB_API_VERSION</emphasis>. This document
|
constant <emphasis role="tt">DVB_API_VERSION</emphasis>. This document
|
||||||
describes <emphasis role="tt">DVB_API_VERSION 3</emphasis>.
|
describes <emphasis role="tt">DVB_API_VERSION 5.4</emphasis>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -2370,6 +2370,14 @@ that used it. It was originally scheduled for removal in 2.6.35.
|
||||||
</listitem>
|
</listitem>
|
||||||
</orderedlist>
|
</orderedlist>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>V4L2 in Linux 3.2</title>
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to userspace.</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section id="other">
|
<section id="other">
|
||||||
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
||||||
|
@ -2478,6 +2486,9 @@ ioctls.</para>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Flash API. <xref linkend="flash-controls" /></para>
|
<para>Flash API. <xref linkend="flash-controls" /></para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>&VIDIOC-CREATE-BUFS; and &VIDIOC-PREPARE-BUF; ioctls.</para>
|
||||||
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
|
@ -232,8 +232,9 @@ control is deprecated. New drivers and applications should use the
|
||||||
<entry>Enables a power line frequency filter to avoid
|
<entry>Enables a power line frequency filter to avoid
|
||||||
flicker. Possible values for <constant>enum v4l2_power_line_frequency</constant> are:
|
flicker. Possible values for <constant>enum v4l2_power_line_frequency</constant> are:
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_DISABLED</constant> (0),
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_DISABLED</constant> (0),
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_50HZ</constant> (1) and
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_50HZ</constant> (1),
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_60HZ</constant> (2).</entry>
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_60HZ</constant> (2) and
|
||||||
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_AUTO</constant> (3).</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_CID_HUE_AUTO</constant></entry>
|
<entry><constant>V4L2_CID_HUE_AUTO</constant></entry>
|
||||||
|
|
|
@ -266,7 +266,7 @@
|
||||||
|
|
||||||
<para>When satisfied with the try results, applications can set the active
|
<para>When satisfied with the try results, applications can set the active
|
||||||
formats by setting the <structfield>which</structfield> argument to
|
formats by setting the <structfield>which</structfield> argument to
|
||||||
<constant>V4L2_SUBDEV_FORMAT_TRY</constant>. Active formats are changed
|
<constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. Active formats are changed
|
||||||
exactly as try formats by drivers. To avoid modifying the hardware state
|
exactly as try formats by drivers. To avoid modifying the hardware state
|
||||||
during format negotiation, applications should negotiate try formats first
|
during format negotiation, applications should negotiate try formats first
|
||||||
and then modify the active settings using the try formats returned during
|
and then modify the active settings using the try formats returned during
|
||||||
|
|
|
@ -927,6 +927,33 @@ ioctl is called.</entry>
|
||||||
Applications set or clear this flag before calling the
|
Applications set or clear this flag before calling the
|
||||||
<constant>VIDIOC_QBUF</constant> ioctl.</entry>
|
<constant>VIDIOC_QBUF</constant> ioctl.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_PREPARED</constant></entry>
|
||||||
|
<entry>0x0400</entry>
|
||||||
|
<entry>The buffer has been prepared for I/O and can be queued by the
|
||||||
|
application. Drivers set or clear this flag when the
|
||||||
|
<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link>, <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_PREPARE_BUF</link>, <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_QBUF</link> or <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant></entry>
|
||||||
|
<entry>0x0400</entry>
|
||||||
|
<entry>Caches do not have to be invalidated for this buffer.
|
||||||
|
Typically applications shall use this flag if the data captured in the buffer
|
||||||
|
is not going to be touched by the CPU, instead the buffer will, probably, be
|
||||||
|
passed on to a DMA-capable hardware unit for further processing or output.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant></entry>
|
||||||
|
<entry>0x0800</entry>
|
||||||
|
<entry>Caches do not have to be cleaned for this buffer.
|
||||||
|
Typically applications shall use this flag for output buffers if the data
|
||||||
|
in this buffer has not been created by the CPU but by some DMA-capable unit,
|
||||||
|
in which case caches have not been used.</entry>
|
||||||
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -127,6 +127,13 @@ structs, ioctls) must be noted in more detail in the history chapter
|
||||||
(compat.xml), along with the possible impact on existing drivers and
|
(compat.xml), along with the possible impact on existing drivers and
|
||||||
applications. -->
|
applications. -->
|
||||||
|
|
||||||
|
<revision>
|
||||||
|
<revnumber>3.2</revnumber>
|
||||||
|
<date>2011-08-26</date>
|
||||||
|
<authorinitials>hv</authorinitials>
|
||||||
|
<revremark>Added V4L2_CTRL_FLAG_VOLATILE.</revremark>
|
||||||
|
</revision>
|
||||||
|
|
||||||
<revision>
|
<revision>
|
||||||
<revnumber>3.1</revnumber>
|
<revnumber>3.1</revnumber>
|
||||||
<date>2011-06-27</date>
|
<date>2011-06-27</date>
|
||||||
|
@ -410,7 +417,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||||
</partinfo>
|
</partinfo>
|
||||||
|
|
||||||
<title>Video for Linux Two API Specification</title>
|
<title>Video for Linux Two API Specification</title>
|
||||||
<subtitle>Revision 3.1</subtitle>
|
<subtitle>Revision 3.2</subtitle>
|
||||||
|
|
||||||
<chapter id="common">
|
<chapter id="common">
|
||||||
&sub-common;
|
&sub-common;
|
||||||
|
@ -462,6 +469,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||||
&sub-close;
|
&sub-close;
|
||||||
&sub-ioctl;
|
&sub-ioctl;
|
||||||
<!-- All ioctls go here. -->
|
<!-- All ioctls go here. -->
|
||||||
|
&sub-create-bufs;
|
||||||
&sub-cropcap;
|
&sub-cropcap;
|
||||||
&sub-dbg-g-chip-ident;
|
&sub-dbg-g-chip-ident;
|
||||||
&sub-dbg-g-register;
|
&sub-dbg-g-register;
|
||||||
|
@ -504,6 +512,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||||
&sub-queryctrl;
|
&sub-queryctrl;
|
||||||
&sub-query-dv-preset;
|
&sub-query-dv-preset;
|
||||||
&sub-querystd;
|
&sub-querystd;
|
||||||
|
&sub-prepare-buf;
|
||||||
&sub-reqbufs;
|
&sub-reqbufs;
|
||||||
&sub-s-hw-freq-seek;
|
&sub-s-hw-freq-seek;
|
||||||
&sub-streamon;
|
&sub-streamon;
|
||||||
|
|
139
Documentation/DocBook/media/v4l/vidioc-create-bufs.xml
Normal file
139
Documentation/DocBook/media/v4l/vidioc-create-bufs.xml
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
<refentry id="vidioc-create-bufs">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_CREATE_BUFS</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_CREATE_BUFS</refname>
|
||||||
|
<refpurpose>Create buffers for Memory Mapped or User Pointer I/O</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_create_buffers *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_CREATE_BUFS</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This ioctl is used to create buffers for <link linkend="mmap">memory
|
||||||
|
mapped</link> or <link linkend="userp">user pointer</link>
|
||||||
|
I/O. It can be used as an alternative or in addition to the
|
||||||
|
<constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter control over buffers
|
||||||
|
is required. This ioctl can be called multiple times to create buffers of
|
||||||
|
different sizes.</para>
|
||||||
|
|
||||||
|
<para>To allocate device buffers applications initialize relevant fields of
|
||||||
|
the <structname>v4l2_create_buffers</structname> structure. They set the
|
||||||
|
<structfield>type</structfield> field in the
|
||||||
|
<structname>v4l2_format</structname> structure, embedded in this
|
||||||
|
structure, to the respective stream or buffer type.
|
||||||
|
<structfield>count</structfield> must be set to the number of required buffers.
|
||||||
|
<structfield>memory</structfield> specifies the required I/O method. The
|
||||||
|
<structfield>format</structfield> field shall typically be filled in using
|
||||||
|
either the <constant>VIDIOC_TRY_FMT</constant> or
|
||||||
|
<constant>VIDIOC_G_FMT</constant> ioctl(). Additionally, applications can adjust
|
||||||
|
<structfield>sizeimage</structfield> fields to fit their specific needs. The
|
||||||
|
<structfield>reserved</structfield> array must be zeroed.</para>
|
||||||
|
|
||||||
|
<para>When the ioctl is called with a pointer to this structure the driver
|
||||||
|
will attempt to allocate up to the requested number of buffers and store the
|
||||||
|
actual number allocated and the starting index in the
|
||||||
|
<structfield>count</structfield> and the <structfield>index</structfield> fields
|
||||||
|
respectively. On return <structfield>count</structfield> can be smaller than
|
||||||
|
the number requested. The driver may also increase buffer sizes if required,
|
||||||
|
however, it will not update <structfield>sizeimage</structfield> field values.
|
||||||
|
The user has to use <constant>VIDIOC_QUERYBUF</constant> to retrieve that
|
||||||
|
information.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-create-buffers">
|
||||||
|
<title>struct <structname>v4l2_create_buffers</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>The starting buffer index, returned by the driver.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>count</structfield></entry>
|
||||||
|
<entry>The number of buffers requested or granted.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-memory;</entry>
|
||||||
|
<entry><structfield>memory</structfield></entry>
|
||||||
|
<entry>Applications set this field to
|
||||||
|
<constant>V4L2_MEMORY_MMAP</constant> or
|
||||||
|
<constant>V4L2_MEMORY_USERPTR</constant>.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-format;</entry>
|
||||||
|
<entry><structfield>format</structfield></entry>
|
||||||
|
<entry>Filled in by the application, preserved by the driver.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[8]</entry>
|
||||||
|
<entry>A place holder for future extensions.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENOMEM</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>No memory to allocate buffers for <link linkend="mmap">memory
|
||||||
|
mapped</link> I/O.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The buffer type (<structfield>type</structfield> field) or the
|
||||||
|
requested I/O method (<structfield>memory</structfield>) is not
|
||||||
|
supported.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
|
@ -86,6 +86,12 @@
|
||||||
<entry>Event data for event V4L2_EVENT_CTRL.
|
<entry>Event data for event V4L2_EVENT_CTRL.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>&v4l2-event-frame-sync;</entry>
|
||||||
|
<entry><structfield>frame</structfield></entry>
|
||||||
|
<entry>Event data for event V4L2_EVENT_FRAME_SYNC.</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>__u8</entry>
|
<entry>__u8</entry>
|
||||||
|
@ -135,6 +141,129 @@
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="v4l2-event-vsync">
|
||||||
|
<title>struct <structname>v4l2_event_vsync</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u8</entry>
|
||||||
|
<entry><structfield>field</structfield></entry>
|
||||||
|
<entry>The upcoming field. See &v4l2-field;.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="v4l2-event-ctrl">
|
||||||
|
<title>struct <structname>v4l2_event_ctrl</structname></title>
|
||||||
|
<tgroup cols="4">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>changes</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>A bitmask that tells what has changed. See <xref linkend="changes-flags" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>type</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The type of the control. See &v4l2-ctrl-type;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>union (anonymous)</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__s32</entry>
|
||||||
|
<entry><structfield>value</structfield></entry>
|
||||||
|
<entry>The 32-bit value of the control for 32-bit control types.
|
||||||
|
This is 0 for string controls since the value of a string
|
||||||
|
cannot be passed using &VIDIOC-DQEVENT;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>__s64</entry>
|
||||||
|
<entry><structfield>value64</structfield></entry>
|
||||||
|
<entry>The 64-bit value of the control for 64-bit control types.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>flags</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The control flags. See <xref linkend="control-flags" />.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__s32</entry>
|
||||||
|
<entry><structfield>minimum</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The minimum value of the control. See &v4l2-queryctrl;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__s32</entry>
|
||||||
|
<entry><structfield>maximum</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The maximum value of the control. See &v4l2-queryctrl;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__s32</entry>
|
||||||
|
<entry><structfield>step</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The step value of the control. See &v4l2-queryctrl;.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__s32</entry>
|
||||||
|
<entry><structfield>default_value</structfield></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>The default value value of the control. See &v4l2-queryctrl;.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table frame="none" pgwide="1" id="v4l2-event-frame-sync">
|
||||||
|
<title>struct <structname>v4l2_event_frame_sync</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>frame_sequence</structfield></entry>
|
||||||
|
<entry>
|
||||||
|
The sequence number of the frame being received.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="changes-flags">
|
||||||
|
<title>Changes</title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-def;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_EVENT_CTRL_CH_VALUE</constant></entry>
|
||||||
|
<entry>0x0001</entry>
|
||||||
|
<entry>This control event was triggered because the value of the control
|
||||||
|
changed. Special case: if a button control is pressed, then this
|
||||||
|
event is sent as well, even though there is not explicit value
|
||||||
|
associated with a button control.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_EVENT_CTRL_CH_FLAGS</constant></entry>
|
||||||
|
<entry>0x0002</entry>
|
||||||
|
<entry>This control event was triggered because the control flags
|
||||||
|
changed.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
<refsect1>
|
<refsect1>
|
||||||
&return-value;
|
&return-value;
|
||||||
|
|
88
Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml
Normal file
88
Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<refentry id="vidioc-prepare-buf">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_PREPARE_BUF</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_PREPARE_BUF</refname>
|
||||||
|
<refpurpose>Prepare a buffer for I/O</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_buffer *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_PREPARE_BUF</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>Applications can optionally call the
|
||||||
|
<constant>VIDIOC_PREPARE_BUF</constant> ioctl to pass ownership of the buffer
|
||||||
|
to the driver before actually enqueuing it, using the
|
||||||
|
<constant>VIDIOC_QBUF</constant> ioctl, and to prepare it for future I/O.
|
||||||
|
Such preparations may include cache invalidation or cleaning. Performing them
|
||||||
|
in advance saves time during the actual I/O. In case such cache operations are
|
||||||
|
not required, the application can use one of
|
||||||
|
<constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant> and
|
||||||
|
<constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant> flags to skip the respective
|
||||||
|
step.</para>
|
||||||
|
|
||||||
|
<para>The <structname>v4l2_buffer</structname> structure is
|
||||||
|
specified in <xref linkend="buffer" />.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File I/O is in progress.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The buffer <structfield>type</structfield> is not
|
||||||
|
supported, or the <structfield>index</structfield> is out of bounds,
|
||||||
|
or no buffers have been allocated yet, or the
|
||||||
|
<structfield>userptr</structfield> or
|
||||||
|
<structfield>length</structfield> are invalid.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
|
@ -406,6 +406,15 @@ flag is typically present for relative controls or action controls where
|
||||||
writing a value will cause the device to carry out a given action
|
writing a value will cause the device to carry out a given action
|
||||||
(⪚ motor control) but no meaningful value can be returned.</entry>
|
(⪚ motor control) but no meaningful value can be returned.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_CTRL_FLAG_VOLATILE</constant></entry>
|
||||||
|
<entry>0x0080</entry>
|
||||||
|
<entry>This control is volatile, which means that the value of the control
|
||||||
|
changes continuously. A typical example would be the current gain value if the device
|
||||||
|
is in auto-gain mode. In such a case the hardware calculates the gain value based on
|
||||||
|
the lighting conditions which can change over time. Note that setting a new value for
|
||||||
|
a volatile control will have no effect. The new value will just be ignored.</entry>
|
||||||
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -138,6 +138,22 @@
|
||||||
field of the oldest event.</para>
|
field of the oldest event.</para>
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_EVENT_FRAME_SYNC</constant></entry>
|
||||||
|
<entry>4</entry>
|
||||||
|
<entry>
|
||||||
|
<para>Triggered immediately when the reception of a
|
||||||
|
frame has begun. This event has a
|
||||||
|
&v4l2-event-frame-sync; associated with it.</para>
|
||||||
|
|
||||||
|
<para>If the hardware needs to be stopped in the case of a
|
||||||
|
buffer underrun it might not be able to generate this event.
|
||||||
|
In such cases the <structfield>frame_sequence</structfield>
|
||||||
|
field in &v4l2-event-frame-sync; will not be incremented. This
|
||||||
|
causes two consecutive frame sequence numbers to have n times
|
||||||
|
frame interval in between them.</para>
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_EVENT_PRIVATE_START</constant></entry>
|
<entry><constant>V4L2_EVENT_PRIVATE_START</constant></entry>
|
||||||
<entry>0x08000000</entry>
|
<entry>0x08000000</entry>
|
||||||
|
@ -183,113 +199,6 @@
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-event-vsync">
|
|
||||||
<title>struct <structname>v4l2_event_vsync</structname></title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u8</entry>
|
|
||||||
<entry><structfield>field</structfield></entry>
|
|
||||||
<entry>The upcoming field. See &v4l2-field;.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-event-ctrl">
|
|
||||||
<title>struct <structname>v4l2_event_ctrl</structname></title>
|
|
||||||
<tgroup cols="4">
|
|
||||||
&cs-str;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>changes</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>A bitmask that tells what has changed. See <xref linkend="changes-flags" />.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>type</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The type of the control. See &v4l2-ctrl-type;.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>union (anonymous)</entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry></entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>value</structfield></entry>
|
|
||||||
<entry>The 32-bit value of the control for 32-bit control types.
|
|
||||||
This is 0 for string controls since the value of a string
|
|
||||||
cannot be passed using &VIDIOC-DQEVENT;.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>__s64</entry>
|
|
||||||
<entry><structfield>value64</structfield></entry>
|
|
||||||
<entry>The 64-bit value of the control for 64-bit control types.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__u32</entry>
|
|
||||||
<entry><structfield>flags</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The control flags. See <xref linkend="control-flags" />.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>minimum</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The minimum value of the control. See &v4l2-queryctrl;.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>maximum</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The maximum value of the control. See &v4l2-queryctrl;.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>step</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The step value of the control. See &v4l2-queryctrl;.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>__s32</entry>
|
|
||||||
<entry><structfield>default_value</structfield></entry>
|
|
||||||
<entry></entry>
|
|
||||||
<entry>The default value value of the control. See &v4l2-queryctrl;.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="changes-flags">
|
|
||||||
<title>Changes</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
&cs-def;
|
|
||||||
<tbody valign="top">
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_EVENT_CTRL_CH_VALUE</constant></entry>
|
|
||||||
<entry>0x0001</entry>
|
|
||||||
<entry>This control event was triggered because the value of the control
|
|
||||||
changed. Special case: if a button control is pressed, then this
|
|
||||||
event is sent as well, even though there is not explicit value
|
|
||||||
associated with a button control.</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_EVENT_CTRL_CH_FLAGS</constant></entry>
|
|
||||||
<entry>0x0002</entry>
|
|
||||||
<entry>This control event was triggered because the control flags
|
|
||||||
changed.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
<refsect1>
|
<refsect1>
|
||||||
&return-value;
|
&return-value;
|
||||||
|
|
|
@ -572,7 +572,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The simplest way to activate the FLASH based bad block table support
|
The simplest way to activate the FLASH based bad block table support
|
||||||
is to set the option NAND_USE_FLASH_BBT in the option field of
|
is to set the option NAND_BBT_USE_FLASH in the bbt_option field of
|
||||||
the nand chip structure before calling nand_scan(). For AG-AND
|
the nand chip structure before calling nand_scan(). For AG-AND
|
||||||
chips is this done by default.
|
chips is this done by default.
|
||||||
This activates the default FLASH based bad block table functionality
|
This activates the default FLASH based bad block table functionality
|
||||||
|
@ -773,20 +773,6 @@ struct nand_oobinfo {
|
||||||
done according to the default builtin scheme.
|
done according to the default builtin scheme.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
<sect2 id="User_space_placement_selection">
|
|
||||||
<title>User space placement selection</title>
|
|
||||||
<para>
|
|
||||||
All non ecc functions like mtd->read and mtd->write use an internal
|
|
||||||
structure, which can be set by an ioctl. This structure is preset
|
|
||||||
to the autoplacement default.
|
|
||||||
<programlisting>
|
|
||||||
ioctl (fd, MEMSETOOBSEL, oobsel);
|
|
||||||
</programlisting>
|
|
||||||
oobsel is a pointer to a user supplied structure of type
|
|
||||||
nand_oobconfig. The contents of this structure must match the
|
|
||||||
criteria of the filesystem, which will be used. See an example in utils/nandwrite.c.
|
|
||||||
</para>
|
|
||||||
</sect2>
|
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="Spare_area_autoplacement_default">
|
<sect1 id="Spare_area_autoplacement_default">
|
||||||
<title>Spare area autoplacement default schemes</title>
|
<title>Spare area autoplacement default schemes</title>
|
||||||
|
@ -1158,9 +1144,6 @@ in this page</entry>
|
||||||
These constants are defined in nand.h. They are ored together to describe
|
These constants are defined in nand.h. They are ored together to describe
|
||||||
the functionality.
|
the functionality.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
/* Use a flash based bad block table. This option is parsed by the
|
|
||||||
* default bad block table function (nand_default_bbt). */
|
|
||||||
#define NAND_USE_FLASH_BBT 0x00010000
|
|
||||||
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
||||||
* This can only work if we have the ecc bytes directly behind the
|
* This can only work if we have the ecc bytes directly behind the
|
||||||
* data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
|
* data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
|
||||||
|
|
|
@ -4288,7 +4288,7 @@ struct _snd_pcm_runtime {
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
struct snd_rawmidi *rmidi;
|
struct snd_rawmidi *rmidi;
|
||||||
snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags,
|
snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags,
|
||||||
irq, irq_flags, &rmidi);
|
irq, &rmidi);
|
||||||
]]>
|
]]>
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</informalexample>
|
</informalexample>
|
||||||
|
@ -4343,6 +4343,13 @@ struct _snd_pcm_runtime {
|
||||||
by itself to start processing the output stream in the irq handler.
|
by itself to start processing the output stream in the irq handler.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the MPU-401 interface shares its interrupt with the other logical
|
||||||
|
devices on the card, set <constant>MPU401_INFO_IRQ_HOOK</constant>
|
||||||
|
(see <link linkend="midi-interface-interrupt-handler"><citetitle>
|
||||||
|
below</citetitle></link>).
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Usually, the port address corresponds to the command port and
|
Usually, the port address corresponds to the command port and
|
||||||
port + 1 corresponds to the data port. If not, you may change
|
port + 1 corresponds to the data port. If not, you may change
|
||||||
|
@ -4375,14 +4382,12 @@ struct _snd_pcm_runtime {
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The 6th argument specifies the irq number for UART. If the irq
|
The 6th argument specifies the ISA irq number that will be
|
||||||
is already allocated, pass 0 to the 7th argument
|
allocated. If no interrupt is to be allocated (because your
|
||||||
(<parameter>irq_flags</parameter>). Otherwise, pass the flags
|
code is already allocating a shared interrupt, or because the
|
||||||
for irq allocation
|
device does not use interrupts), pass -1 instead.
|
||||||
(<constant>SA_XXX</constant> bits) to it, and the irq will be
|
For a MPU-401 device without an interrupt, a polling timer
|
||||||
reserved by the mpu401-uart layer. If the card doesn't generate
|
will be used instead.
|
||||||
UART interrupts, pass -1 as the irq number. Then a timer
|
|
||||||
interrupt will be invoked for polling.
|
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -4390,12 +4395,13 @@ struct _snd_pcm_runtime {
|
||||||
<title>Interrupt Handler</title>
|
<title>Interrupt Handler</title>
|
||||||
<para>
|
<para>
|
||||||
When the interrupt is allocated in
|
When the interrupt is allocated in
|
||||||
<function>snd_mpu401_uart_new()</function>, the private
|
<function>snd_mpu401_uart_new()</function>, an exclusive ISA
|
||||||
interrupt handler is used, hence you don't have anything else to do
|
interrupt handler is automatically used, hence you don't have
|
||||||
than creating the mpu401 stuff. Otherwise, you have to call
|
anything else to do than creating the mpu401 stuff. Otherwise, you
|
||||||
<function>snd_mpu401_uart_interrupt()</function> explicitly when
|
have to set <constant>MPU401_INFO_IRQ_HOOK</constant>, and call
|
||||||
a UART interrupt is invoked and checked in your own interrupt
|
<function>snd_mpu401_uart_interrupt()</function> explicitly from your
|
||||||
handler.
|
own interrupt handler when it has determined that a UART interrupt
|
||||||
|
has occurred.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
To choose IO schedulers at boot time, use the argument 'elevator=deadline'.
|
To choose IO schedulers at boot time, use the argument 'elevator=deadline'.
|
||||||
'noop', 'as' and 'cfq' (the default) are also available. IO schedulers are
|
'noop' and 'cfq' (the default) are also available. IO schedulers are assigned
|
||||||
assigned globally at boot time only presently.
|
globally at boot time only presently.
|
||||||
|
|
||||||
Each io queue has a set of io scheduler tunables associated with it. These
|
Each io queue has a set of io scheduler tunables associated with it. These
|
||||||
tunables control how the io scheduler works. You can find these entries
|
tunables control how the io scheduler works. You can find these entries
|
||||||
|
|
|
@ -78,6 +78,16 @@ The device naming scheme is:
|
||||||
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
||||||
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
||||||
|
|
||||||
|
CCISS simple mode support
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The "cciss_simple_mode=1" boot parameter may be used to prevent the driver
|
||||||
|
from putting the controller into "performant" mode. The difference is that
|
||||||
|
with simple mode, each command completion requires an interrupt, while with
|
||||||
|
"performant mode" (the default, and ordinarily better performing) it is
|
||||||
|
possible to have multiple command completions indicated by a single
|
||||||
|
interrupt.
|
||||||
|
|
||||||
SCSI tape drive and medium changer support
|
SCSI tape drive and medium changer support
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -454,8 +454,8 @@ mounted hierarchy, to remove a task from its current cgroup you must
|
||||||
move it into a new cgroup (possibly the root cgroup) by writing to the
|
move it into a new cgroup (possibly the root cgroup) by writing to the
|
||||||
new cgroup's tasks file.
|
new cgroup's tasks file.
|
||||||
|
|
||||||
Note: If the ns cgroup is active, moving a process to another cgroup can
|
Note: Due to some restrictions enforced by some cgroup subsystems, moving
|
||||||
fail.
|
a process to another cgroup can fail.
|
||||||
|
|
||||||
2.3 Mounting hierarchies by name
|
2.3 Mounting hierarchies by name
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
|
@ -33,9 +33,9 @@ demonstrate this problem using nested bash shells:
|
||||||
|
|
||||||
From a second, unrelated bash shell:
|
From a second, unrelated bash shell:
|
||||||
$ kill -SIGSTOP 16690
|
$ kill -SIGSTOP 16690
|
||||||
$ kill -SIGCONT 16990
|
$ kill -SIGCONT 16690
|
||||||
|
|
||||||
<at this point 16990 exits and causes 16644 to exit too>
|
<at this point 16690 exits and causes 16644 to exit too>
|
||||||
|
|
||||||
This happens because bash can observe both signals and choose how it
|
This happens because bash can observe both signals and choose how it
|
||||||
responds to them.
|
responds to them.
|
||||||
|
|
|
@ -418,7 +418,6 @@ total_unevictable - sum of all children's "unevictable"
|
||||||
|
|
||||||
# The following additional stats are dependent on CONFIG_DEBUG_VM.
|
# The following additional stats are dependent on CONFIG_DEBUG_VM.
|
||||||
|
|
||||||
inactive_ratio - VM internal parameter. (see mm/page_alloc.c)
|
|
||||||
recent_rotated_anon - VM internal parameter. (see mm/vmscan.c)
|
recent_rotated_anon - VM internal parameter. (see mm/vmscan.c)
|
||||||
recent_rotated_file - VM internal parameter. (see mm/vmscan.c)
|
recent_rotated_file - VM internal parameter. (see mm/vmscan.c)
|
||||||
recent_scanned_anon - VM internal parameter. (see mm/vmscan.c)
|
recent_scanned_anon - VM internal parameter. (see mm/vmscan.c)
|
||||||
|
|
|
@ -48,7 +48,7 @@ kernel and userspace, 'connector' is used as the interface for
|
||||||
communication.
|
communication.
|
||||||
|
|
||||||
There are currently two userspace log implementations that leverage this
|
There are currently two userspace log implementations that leverage this
|
||||||
framework - "clustered_disk" and "clustered_core". These implementations
|
framework - "clustered-disk" and "clustered-core". These implementations
|
||||||
provide a cluster-coherent log for shared-storage. Device-mapper mirroring
|
provide a cluster-coherent log for shared-storage. Device-mapper mirroring
|
||||||
can be used in a shared-storage environment when the cluster log implementations
|
can be used in a shared-storage environment when the cluster log implementations
|
||||||
are employed.
|
are employed.
|
||||||
|
|
84
Documentation/device-mapper/persistent-data.txt
Normal file
84
Documentation/device-mapper/persistent-data.txt
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
The more-sophisticated device-mapper targets require complex metadata
|
||||||
|
that is managed in kernel. In late 2010 we were seeing that various
|
||||||
|
different targets were rolling their own data strutures, for example:
|
||||||
|
|
||||||
|
- Mikulas Patocka's multisnap implementation
|
||||||
|
- Heinz Mauelshagen's thin provisioning target
|
||||||
|
- Another btree-based caching target posted to dm-devel
|
||||||
|
- Another multi-snapshot target based on a design of Daniel Phillips
|
||||||
|
|
||||||
|
Maintaining these data structures takes a lot of work, so if possible
|
||||||
|
we'd like to reduce the number.
|
||||||
|
|
||||||
|
The persistent-data library is an attempt to provide a re-usable
|
||||||
|
framework for people who want to store metadata in device-mapper
|
||||||
|
targets. It's currently used by the thin-provisioning target and an
|
||||||
|
upcoming hierarchical storage target.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
The main documentation is in the header files which can all be found
|
||||||
|
under drivers/md/persistent-data.
|
||||||
|
|
||||||
|
The block manager
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
dm-block-manager.[hc]
|
||||||
|
|
||||||
|
This provides access to the data on disk in fixed sized-blocks. There
|
||||||
|
is a read/write locking interface to prevent concurrent accesses, and
|
||||||
|
keep data that is being used in the cache.
|
||||||
|
|
||||||
|
Clients of persistent-data are unlikely to use this directly.
|
||||||
|
|
||||||
|
The transaction manager
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
dm-transaction-manager.[hc]
|
||||||
|
|
||||||
|
This restricts access to blocks and enforces copy-on-write semantics.
|
||||||
|
The only way you can get hold of a writable block through the
|
||||||
|
transaction manager is by shadowing an existing block (ie. doing
|
||||||
|
copy-on-write) or allocating a fresh one. Shadowing is elided within
|
||||||
|
the same transaction so performance is reasonable. The commit method
|
||||||
|
ensures that all data is flushed before it writes the superblock.
|
||||||
|
On power failure your metadata will be as it was when last committed.
|
||||||
|
|
||||||
|
The Space Maps
|
||||||
|
--------------
|
||||||
|
|
||||||
|
dm-space-map.h
|
||||||
|
dm-space-map-metadata.[hc]
|
||||||
|
dm-space-map-disk.[hc]
|
||||||
|
|
||||||
|
On-disk data structures that keep track of reference counts of blocks.
|
||||||
|
Also acts as the allocator of new blocks. Currently two
|
||||||
|
implementations: a simpler one for managing blocks on a different
|
||||||
|
device (eg. thinly-provisioned data blocks); and one for managing
|
||||||
|
the metadata space. The latter is complicated by the need to store
|
||||||
|
its own data within the space it's managing.
|
||||||
|
|
||||||
|
The data structures
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
dm-btree.[hc]
|
||||||
|
dm-btree-remove.c
|
||||||
|
dm-btree-spine.c
|
||||||
|
dm-btree-internal.h
|
||||||
|
|
||||||
|
Currently there is only one data structure, a hierarchical btree.
|
||||||
|
There are plans to add more. For example, something with an
|
||||||
|
array-like interface would see a lot of use.
|
||||||
|
|
||||||
|
The btree is 'hierarchical' in that you can define it to be composed
|
||||||
|
of nested btrees, and take multiple keys. For example, the
|
||||||
|
thin-provisioning target uses a btree with two levels of nesting.
|
||||||
|
The first maps a device id to a mapping tree, and that in turn maps a
|
||||||
|
virtual block to a physical block.
|
||||||
|
|
||||||
|
Values stored in the btrees can have arbitrary size. Keys are always
|
||||||
|
64bits, although nesting allows you to use multiple keys.
|
285
Documentation/device-mapper/thin-provisioning.txt
Normal file
285
Documentation/device-mapper/thin-provisioning.txt
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
This document descibes a collection of device-mapper targets that
|
||||||
|
between them implement thin-provisioning and snapshots.
|
||||||
|
|
||||||
|
The main highlight of this implementation, compared to the previous
|
||||||
|
implementation of snapshots, is that it allows many virtual devices to
|
||||||
|
be stored on the same data volume. This simplifies administration and
|
||||||
|
allows the sharing of data between volumes, thus reducing disk usage.
|
||||||
|
|
||||||
|
Another significant feature is support for an arbitrary depth of
|
||||||
|
recursive snapshots (snapshots of snapshots of snapshots ...). The
|
||||||
|
previous implementation of snapshots did this by chaining together
|
||||||
|
lookup tables, and so performance was O(depth). This new
|
||||||
|
implementation uses a single data structure to avoid this degradation
|
||||||
|
with depth. Fragmentation may still be an issue, however, in some
|
||||||
|
scenarios.
|
||||||
|
|
||||||
|
Metadata is stored on a separate device from data, giving the
|
||||||
|
administrator some freedom, for example to:
|
||||||
|
|
||||||
|
- Improve metadata resilience by storing metadata on a mirrored volume
|
||||||
|
but data on a non-mirrored one.
|
||||||
|
|
||||||
|
- Improve performance by storing the metadata on SSD.
|
||||||
|
|
||||||
|
Status
|
||||||
|
======
|
||||||
|
|
||||||
|
These targets are very much still in the EXPERIMENTAL state. Please
|
||||||
|
do not yet rely on them in production. But do experiment and offer us
|
||||||
|
feedback. Different use cases will have different performance
|
||||||
|
characteristics, for example due to fragmentation of the data volume.
|
||||||
|
|
||||||
|
If you find this software is not performing as expected please mail
|
||||||
|
dm-devel@redhat.com with details and we'll try our best to improve
|
||||||
|
things for you.
|
||||||
|
|
||||||
|
Userspace tools for checking and repairing the metadata are under
|
||||||
|
development.
|
||||||
|
|
||||||
|
Cookbook
|
||||||
|
========
|
||||||
|
|
||||||
|
This section describes some quick recipes for using thin provisioning.
|
||||||
|
They use the dmsetup program to control the device-mapper driver
|
||||||
|
directly. End users will be advised to use a higher-level volume
|
||||||
|
manager such as LVM2 once support has been added.
|
||||||
|
|
||||||
|
Pool device
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The pool device ties together the metadata volume and the data volume.
|
||||||
|
It maps I/O linearly to the data volume and updates the metadata via
|
||||||
|
two mechanisms:
|
||||||
|
|
||||||
|
- Function calls from the thin targets
|
||||||
|
|
||||||
|
- Device-mapper 'messages' from userspace which control the creation of new
|
||||||
|
virtual devices amongst other things.
|
||||||
|
|
||||||
|
Setting up a fresh pool device
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Setting up a pool device requires a valid metadata device, and a
|
||||||
|
data device. If you do not have an existing metadata device you can
|
||||||
|
make one by zeroing the first 4k to indicate empty metadata.
|
||||||
|
|
||||||
|
dd if=/dev/zero of=$metadata_dev bs=4096 count=1
|
||||||
|
|
||||||
|
The amount of metadata you need will vary according to how many blocks
|
||||||
|
are shared between thin devices (i.e. through snapshots). If you have
|
||||||
|
less sharing than average you'll need a larger-than-average metadata device.
|
||||||
|
|
||||||
|
As a guide, we suggest you calculate the number of bytes to use in the
|
||||||
|
metadata device as 48 * $data_dev_size / $data_block_size but round it up
|
||||||
|
to 2MB if the answer is smaller. The largest size supported is 16GB.
|
||||||
|
|
||||||
|
If you're creating large numbers of snapshots which are recording large
|
||||||
|
amounts of change, you may need find you need to increase this.
|
||||||
|
|
||||||
|
Reloading a pool table
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
You may reload a pool's table, indeed this is how the pool is resized
|
||||||
|
if it runs out of space. (N.B. While specifying a different metadata
|
||||||
|
device when reloading is not forbidden at the moment, things will go
|
||||||
|
wrong if it does not route I/O to exactly the same on-disk location as
|
||||||
|
previously.)
|
||||||
|
|
||||||
|
Using an existing pool device
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
dmsetup create pool \
|
||||||
|
--table "0 20971520 thin-pool $metadata_dev $data_dev \
|
||||||
|
$data_block_size $low_water_mark"
|
||||||
|
|
||||||
|
$data_block_size gives the smallest unit of disk space that can be
|
||||||
|
allocated at a time expressed in units of 512-byte sectors. People
|
||||||
|
primarily interested in thin provisioning may want to use a value such
|
||||||
|
as 1024 (512KB). People doing lots of snapshotting may want a smaller value
|
||||||
|
such as 128 (64KB). If you are not zeroing newly-allocated data,
|
||||||
|
a larger $data_block_size in the region of 256000 (128MB) is suggested.
|
||||||
|
$data_block_size must be the same for the lifetime of the
|
||||||
|
metadata device.
|
||||||
|
|
||||||
|
$low_water_mark is expressed in blocks of size $data_block_size. If
|
||||||
|
free space on the data device drops below this level then a dm event
|
||||||
|
will be triggered which a userspace daemon should catch allowing it to
|
||||||
|
extend the pool device. Only one such event will be sent.
|
||||||
|
Resuming a device with a new table itself triggers an event so the
|
||||||
|
userspace daemon can use this to detect a situation where a new table
|
||||||
|
already exceeds the threshold.
|
||||||
|
|
||||||
|
Thin provisioning
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
i) Creating a new thinly-provisioned volume.
|
||||||
|
|
||||||
|
To create a new thinly- provisioned volume you must send a message to an
|
||||||
|
active pool device, /dev/mapper/pool in this example.
|
||||||
|
|
||||||
|
dmsetup message /dev/mapper/pool 0 "create_thin 0"
|
||||||
|
|
||||||
|
Here '0' is an identifier for the volume, a 24-bit number. It's up
|
||||||
|
to the caller to allocate and manage these identifiers. If the
|
||||||
|
identifier is already in use, the message will fail with -EEXIST.
|
||||||
|
|
||||||
|
ii) Using a thinly-provisioned volume.
|
||||||
|
|
||||||
|
Thinly-provisioned volumes are activated using the 'thin' target:
|
||||||
|
|
||||||
|
dmsetup create thin --table "0 2097152 thin /dev/mapper/pool 0"
|
||||||
|
|
||||||
|
The last parameter is the identifier for the thinp device.
|
||||||
|
|
||||||
|
Internal snapshots
|
||||||
|
------------------
|
||||||
|
|
||||||
|
i) Creating an internal snapshot.
|
||||||
|
|
||||||
|
Snapshots are created with another message to the pool.
|
||||||
|
|
||||||
|
N.B. If the origin device that you wish to snapshot is active, you
|
||||||
|
must suspend it before creating the snapshot to avoid corruption.
|
||||||
|
This is NOT enforced at the moment, so please be careful!
|
||||||
|
|
||||||
|
dmsetup suspend /dev/mapper/thin
|
||||||
|
dmsetup message /dev/mapper/pool 0 "create_snap 1 0"
|
||||||
|
dmsetup resume /dev/mapper/thin
|
||||||
|
|
||||||
|
Here '1' is the identifier for the volume, a 24-bit number. '0' is the
|
||||||
|
identifier for the origin device.
|
||||||
|
|
||||||
|
ii) Using an internal snapshot.
|
||||||
|
|
||||||
|
Once created, the user doesn't have to worry about any connection
|
||||||
|
between the origin and the snapshot. Indeed the snapshot is no
|
||||||
|
different from any other thinly-provisioned device and can be
|
||||||
|
snapshotted itself via the same method. It's perfectly legal to
|
||||||
|
have only one of them active, and there's no ordering requirement on
|
||||||
|
activating or removing them both. (This differs from conventional
|
||||||
|
device-mapper snapshots.)
|
||||||
|
|
||||||
|
Activate it exactly the same way as any other thinly-provisioned volume:
|
||||||
|
|
||||||
|
dmsetup create snap --table "0 2097152 thin /dev/mapper/pool 1"
|
||||||
|
|
||||||
|
Deactivation
|
||||||
|
------------
|
||||||
|
|
||||||
|
All devices using a pool must be deactivated before the pool itself
|
||||||
|
can be.
|
||||||
|
|
||||||
|
dmsetup remove thin
|
||||||
|
dmsetup remove snap
|
||||||
|
dmsetup remove pool
|
||||||
|
|
||||||
|
Reference
|
||||||
|
=========
|
||||||
|
|
||||||
|
'thin-pool' target
|
||||||
|
------------------
|
||||||
|
|
||||||
|
i) Constructor
|
||||||
|
|
||||||
|
thin-pool <metadata dev> <data dev> <data block size (sectors)> \
|
||||||
|
<low water mark (blocks)> [<number of feature args> [<arg>]*]
|
||||||
|
|
||||||
|
Optional feature arguments:
|
||||||
|
- 'skip_block_zeroing': skips the zeroing of newly-provisioned blocks.
|
||||||
|
|
||||||
|
Data block size must be between 64KB (128 sectors) and 1GB
|
||||||
|
(2097152 sectors) inclusive.
|
||||||
|
|
||||||
|
|
||||||
|
ii) Status
|
||||||
|
|
||||||
|
<transaction id> <used metadata blocks>/<total metadata blocks>
|
||||||
|
<used data blocks>/<total data blocks> <held metadata root>
|
||||||
|
|
||||||
|
|
||||||
|
transaction id:
|
||||||
|
A 64-bit number used by userspace to help synchronise with metadata
|
||||||
|
from volume managers.
|
||||||
|
|
||||||
|
used data blocks / total data blocks
|
||||||
|
If the number of free blocks drops below the pool's low water mark a
|
||||||
|
dm event will be sent to userspace. This event is edge-triggered and
|
||||||
|
it will occur only once after each resume so volume manager writers
|
||||||
|
should register for the event and then check the target's status.
|
||||||
|
|
||||||
|
held metadata root:
|
||||||
|
The location, in sectors, of the metadata root that has been
|
||||||
|
'held' for userspace read access. '-' indicates there is no
|
||||||
|
held root. This feature is not yet implemented so '-' is
|
||||||
|
always returned.
|
||||||
|
|
||||||
|
iii) Messages
|
||||||
|
|
||||||
|
create_thin <dev id>
|
||||||
|
|
||||||
|
Create a new thinly-provisioned device.
|
||||||
|
<dev id> is an arbitrary unique 24-bit identifier chosen by
|
||||||
|
the caller.
|
||||||
|
|
||||||
|
create_snap <dev id> <origin id>
|
||||||
|
|
||||||
|
Create a new snapshot of another thinly-provisioned device.
|
||||||
|
<dev id> is an arbitrary unique 24-bit identifier chosen by
|
||||||
|
the caller.
|
||||||
|
<origin id> is the identifier of the thinly-provisioned device
|
||||||
|
of which the new device will be a snapshot.
|
||||||
|
|
||||||
|
delete <dev id>
|
||||||
|
|
||||||
|
Deletes a thin device. Irreversible.
|
||||||
|
|
||||||
|
trim <dev id> <new size in sectors>
|
||||||
|
|
||||||
|
Delete mappings from the end of a thin device. Irreversible.
|
||||||
|
You might want to use this if you're reducing the size of
|
||||||
|
your thinly-provisioned device. In many cases, due to the
|
||||||
|
sharing of blocks between devices, it is not possible to
|
||||||
|
determine in advance how much space 'trim' will release. (In
|
||||||
|
future a userspace tool might be able to perform this
|
||||||
|
calculation.)
|
||||||
|
|
||||||
|
set_transaction_id <current id> <new id>
|
||||||
|
|
||||||
|
Userland volume managers, such as LVM, need a way to
|
||||||
|
synchronise their external metadata with the internal metadata of the
|
||||||
|
pool target. The thin-pool target offers to store an
|
||||||
|
arbitrary 64-bit transaction id and return it on the target's
|
||||||
|
status line. To avoid races you must provide what you think
|
||||||
|
the current transaction id is when you change it with this
|
||||||
|
compare-and-swap message.
|
||||||
|
|
||||||
|
'thin' target
|
||||||
|
-------------
|
||||||
|
|
||||||
|
i) Constructor
|
||||||
|
|
||||||
|
thin <pool dev> <dev id>
|
||||||
|
|
||||||
|
pool dev:
|
||||||
|
the thin-pool device, e.g. /dev/mapper/my_pool or 253:0
|
||||||
|
|
||||||
|
dev id:
|
||||||
|
the internal device identifier of the device to be
|
||||||
|
activated.
|
||||||
|
|
||||||
|
The pool doesn't store any size against the thin devices. If you
|
||||||
|
load a thin target that is smaller than you've been using previously,
|
||||||
|
then you'll have no access to blocks mapped beyond the end. If you
|
||||||
|
load a target that is bigger than before, then extra blocks will be
|
||||||
|
provisioned as and when needed.
|
||||||
|
|
||||||
|
If you wish to reduce the size of your thin device and potentially
|
||||||
|
regain some space then send the 'trim' message to the pool.
|
||||||
|
|
||||||
|
ii) Status
|
||||||
|
|
||||||
|
<nr mapped sectors> <highest mapped sector>
|
8
Documentation/devicetree/bindings/arm/calxeda.txt
Normal file
8
Documentation/devicetree/bindings/arm/calxeda.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Calxeda Highbank Platforms Device Tree Bindings
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Boards with Calxeda Cortex-A9 based Highbank SOC shall have the following
|
||||||
|
properties.
|
||||||
|
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "calxeda,highbank";
|
26
Documentation/devicetree/bindings/arm/fsl.txt
Normal file
26
Documentation/devicetree/bindings/arm/fsl.txt
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Freescale i.MX Platforms Device Tree Bindings
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
i.MX51 Babbage Board
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx51-babbage", "fsl,imx51";
|
||||||
|
|
||||||
|
i.MX53 Automotive Reference Design Board
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx53-ard", "fsl,imx53";
|
||||||
|
|
||||||
|
i.MX53 Evaluation Kit
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx53-evk", "fsl,imx53";
|
||||||
|
|
||||||
|
i.MX53 Quick Start Board
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx53-qsb", "fsl,imx53";
|
||||||
|
|
||||||
|
i.MX53 Smart Mobile Reference Design Board
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx53-smd", "fsl,imx53";
|
||||||
|
|
||||||
|
i.MX6 Quad SABRE Automotive Board
|
||||||
|
Required root node properties:
|
||||||
|
- compatible = "fsl,imx6q-sabreauto", "fsl,imx6q";
|
55
Documentation/devicetree/bindings/arm/gic.txt
Normal file
55
Documentation/devicetree/bindings/arm/gic.txt
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
* ARM Generic Interrupt Controller
|
||||||
|
|
||||||
|
ARM SMP cores are often associated with a GIC, providing per processor
|
||||||
|
interrupts (PPI), shared processor interrupts (SPI) and software
|
||||||
|
generated interrupts (SGI).
|
||||||
|
|
||||||
|
Primary GIC is attached directly to the CPU and typically has PPIs and SGIs.
|
||||||
|
Secondary GICs are cascaded into the upward interrupt controller and do not
|
||||||
|
have PPIs or SGIs.
|
||||||
|
|
||||||
|
Main node required properties:
|
||||||
|
|
||||||
|
- compatible : should be one of:
|
||||||
|
"arm,cortex-a9-gic"
|
||||||
|
"arm,arm11mp-gic"
|
||||||
|
- interrupt-controller : Identifies the node as an interrupt controller
|
||||||
|
- #interrupt-cells : Specifies the number of cells needed to encode an
|
||||||
|
interrupt source. The type shall be a <u32> and the value shall be 3.
|
||||||
|
|
||||||
|
The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
|
||||||
|
interrupts.
|
||||||
|
|
||||||
|
The 2nd cell contains the interrupt number for the interrupt type.
|
||||||
|
SPI interrupts are in the range [0-987]. PPI interrupts are in the
|
||||||
|
range [0-15].
|
||||||
|
|
||||||
|
The 3rd cell is the flags, encoded as follows:
|
||||||
|
bits[3:0] trigger type and level flags.
|
||||||
|
1 = low-to-high edge triggered
|
||||||
|
2 = high-to-low edge triggered
|
||||||
|
4 = active high level-sensitive
|
||||||
|
8 = active low level-sensitive
|
||||||
|
bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of
|
||||||
|
the 8 possible cpus attached to the GIC. A bit set to '1' indicated
|
||||||
|
the interrupt is wired to that CPU. Only valid for PPI interrupts.
|
||||||
|
|
||||||
|
- reg : Specifies base physical address(s) and size of the GIC registers. The
|
||||||
|
first region is the GIC distributor register base and size. The 2nd region is
|
||||||
|
the GIC cpu interface register base and size.
|
||||||
|
|
||||||
|
Optional
|
||||||
|
- interrupts : Interrupt source of the parent interrupt controller. Only
|
||||||
|
present on secondary GICs.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
intc: interrupt-controller@fff11000 {
|
||||||
|
compatible = "arm,cortex-a9-gic";
|
||||||
|
#interrupt-cells = <3>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
interrupt-controller;
|
||||||
|
reg = <0xfff11000 0x1000>,
|
||||||
|
<0xfff10100 0x100>;
|
||||||
|
};
|
||||||
|
|
14
Documentation/devicetree/bindings/arm/omap/dsp.txt
Normal file
14
Documentation/devicetree/bindings/arm/omap/dsp.txt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
* TI - DSP (Digital Signal Processor)
|
||||||
|
|
||||||
|
TI DSP included in OMAP SoC
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "ti,omap3-c64" for OMAP3 & 4
|
||||||
|
- ti,hwmods: "dsp"
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
dsp {
|
||||||
|
compatible = "ti,omap3-c64";
|
||||||
|
ti,hwmods = "dsp";
|
||||||
|
};
|
19
Documentation/devicetree/bindings/arm/omap/iva.txt
Normal file
19
Documentation/devicetree/bindings/arm/omap/iva.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
* TI - IVA (Imaging and Video Accelerator) subsystem
|
||||||
|
|
||||||
|
The IVA contain various audio, video or imaging HW accelerator
|
||||||
|
depending of the version.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be:
|
||||||
|
- "ti,ivahd" for OMAP4
|
||||||
|
- "ti,iva2.2" for OMAP3
|
||||||
|
- "ti,iva2.1" for OMAP2430
|
||||||
|
- "ti,iva1" for OMAP2420
|
||||||
|
- ti,hwmods: "iva"
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
iva {
|
||||||
|
compatible = "ti,ivahd", "ti,iva";
|
||||||
|
ti,hwmods = "iva";
|
||||||
|
};
|
19
Documentation/devicetree/bindings/arm/omap/l3-noc.txt
Normal file
19
Documentation/devicetree/bindings/arm/omap/l3-noc.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
* TI - L3 Network On Chip (NoC)
|
||||||
|
|
||||||
|
This version is an implementation of the generic NoC IP
|
||||||
|
provided by Arteris.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "ti,omap3-l3-smx" for OMAP3 family
|
||||||
|
Should be "ti,omap4-l3-noc" for OMAP4 family
|
||||||
|
- ti,hwmods: "l3_main_1", ... One hwmod for each noc domain.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
ocp {
|
||||||
|
compatible = "ti,omap4-l3-noc", "simple-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
|
||||||
|
};
|
27
Documentation/devicetree/bindings/arm/omap/mpu.txt
Normal file
27
Documentation/devicetree/bindings/arm/omap/mpu.txt
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
* TI - MPU (Main Processor Unit) subsystem
|
||||||
|
|
||||||
|
The MPU subsystem contain one or several ARM cores
|
||||||
|
depending of the version.
|
||||||
|
The MPU contain CPUs, GIC, L2 cache and a local PRCM.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "ti,omap3-mpu" for OMAP3
|
||||||
|
Should be "ti,omap4-mpu" for OMAP4
|
||||||
|
- ti,hwmods: "mpu"
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- For an OMAP4 SMP system:
|
||||||
|
|
||||||
|
mpu {
|
||||||
|
compatible = "ti,omap4-mpu";
|
||||||
|
ti,hwmods = "mpu";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
- For an OMAP3 monocore system:
|
||||||
|
|
||||||
|
mpu {
|
||||||
|
compatible = "ti,omap3-mpu";
|
||||||
|
ti,hwmods = "mpu";
|
||||||
|
};
|
43
Documentation/devicetree/bindings/arm/omap/omap.txt
Normal file
43
Documentation/devicetree/bindings/arm/omap/omap.txt
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
* Texas Instruments OMAP
|
||||||
|
|
||||||
|
OMAP is currently using a static file per SoC family to describe the
|
||||||
|
IPs present in the SoC.
|
||||||
|
On top of that an omap_device is created to extend the platform_device
|
||||||
|
capabilities and to allow binding with one or several hwmods.
|
||||||
|
The hwmods will contain all the information to build the device:
|
||||||
|
adresse range, irq lines, dma lines, interconnect, PRCM register,
|
||||||
|
clock domain, input clocks.
|
||||||
|
For the moment just point to the existing hwmod, the next step will be
|
||||||
|
to move data from hwmod to device-tree representation.
|
||||||
|
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: Every devices present in OMAP SoC should be in the
|
||||||
|
form: "ti,XXX"
|
||||||
|
- ti,hwmods: list of hwmod names (ascii strings), that comes from the OMAP
|
||||||
|
HW documentation, attached to a device. Must contain at least
|
||||||
|
one hwmod.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- ti,no_idle_on_suspend: When present, it prevents the PM to idle the module
|
||||||
|
during suspend.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
spinlock@1 {
|
||||||
|
compatible = "ti,omap4-spinlock";
|
||||||
|
ti,hwmods = "spinlock";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Boards:
|
||||||
|
|
||||||
|
- OMAP3 BeagleBoard : Low cost community board
|
||||||
|
compatible = "ti,omap3-beagle", "ti,omap3"
|
||||||
|
|
||||||
|
- OMAP4 SDP : Software Developement Board
|
||||||
|
compatible = "ti,omap4-sdp", "ti,omap4430"
|
||||||
|
|
||||||
|
- OMAP4 PandaBoard : Low cost community board
|
||||||
|
compatible = "ti,omap4-panda", "ti,omap4430"
|
24
Documentation/devicetree/bindings/arm/picoxcell.txt
Normal file
24
Documentation/devicetree/bindings/arm/picoxcell.txt
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
Picochip picoXcell device tree bindings.
|
||||||
|
========================================
|
||||||
|
|
||||||
|
Required root node properties:
|
||||||
|
- compatible:
|
||||||
|
- "picochip,pc7302-pc3x3" : PC7302 development board with PC3X3 device.
|
||||||
|
- "picochip,pc7302-pc3x2" : PC7302 development board with PC3X2 device.
|
||||||
|
- "picochip,pc3x3" : picoXcell PC3X3 device based board.
|
||||||
|
- "picochip,pc3x2" : picoXcell PC3X2 device based board.
|
||||||
|
|
||||||
|
Timers required properties:
|
||||||
|
- compatible = "picochip,pc3x2-timer"
|
||||||
|
- interrupts : The single IRQ line for the timer.
|
||||||
|
- clock-freq : The frequency in HZ of the timer.
|
||||||
|
- reg : The register bank for the timer.
|
||||||
|
|
||||||
|
Note: two timers are required - one for the scheduler clock and one for the
|
||||||
|
event tick/NOHZ.
|
||||||
|
|
||||||
|
VIC required properties:
|
||||||
|
- compatible = "arm,pl192-vic".
|
||||||
|
- interrupt-controller.
|
||||||
|
- reg : The register bank for the device.
|
||||||
|
- #interrupt-cells : Must be 1.
|
|
@ -6,7 +6,9 @@ driver matching.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- compatible : should be a specific value for peripheral and "arm,primecell"
|
- compatible : should be a specific name for the peripheral and
|
||||||
|
"arm,primecell". The specific name will match the ARM
|
||||||
|
engineering name for the logic block in the form: "arm,pl???"
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
|
||||||
|
|
17
Documentation/devicetree/bindings/ata/calxeda-sata.txt
Normal file
17
Documentation/devicetree/bindings/ata/calxeda-sata.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
* Calxeda SATA Controller
|
||||||
|
|
||||||
|
SATA nodes are defined to describe on-chip Serial ATA controllers.
|
||||||
|
Each SATA controller should have its own node.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : compatible list, contains "calxeda,hb-ahci"
|
||||||
|
- interrupts : <interrupt mapping for SATA IRQ>
|
||||||
|
- reg : <registers mapping>
|
||||||
|
|
||||||
|
Example:
|
||||||
|
sata@ffe08000 {
|
||||||
|
compatible = "calxeda,hb-ahci";
|
||||||
|
reg = <0xffe08000 0x1000>;
|
||||||
|
interrupts = <115>;
|
||||||
|
};
|
||||||
|
|
23
Documentation/devicetree/bindings/crypto/picochip-spacc.txt
Normal file
23
Documentation/devicetree/bindings/crypto/picochip-spacc.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
Picochip picoXcell SPAcc (Security Protocol Accelerator) bindings
|
||||||
|
|
||||||
|
Picochip picoXcell devices contain crypto offload engines that may be used for
|
||||||
|
IPSEC and femtocell layer 2 ciphering.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "picochip,spacc-ipsec" for the IPSEC offload engine
|
||||||
|
"picochip,spacc-l2" for the femtocell layer 2 ciphering engine.
|
||||||
|
- reg : Offset and length of the register set for this device
|
||||||
|
- interrupt-parent : The interrupt controller that controls the SPAcc
|
||||||
|
interrupt.
|
||||||
|
- interrupts : The interrupt line from the SPAcc.
|
||||||
|
- ref-clock : The input clock that drives the SPAcc.
|
||||||
|
|
||||||
|
Example SPAcc node:
|
||||||
|
|
||||||
|
spacc@10000 {
|
||||||
|
compatible = "picochip,spacc-ipsec";
|
||||||
|
reg = <0x100000 0x10000>;
|
||||||
|
interrupt-parent = <&vic0>;
|
||||||
|
interrupts = <24>;
|
||||||
|
ref-clock = <&ipsec_clk>, "ref";
|
||||||
|
};
|
10
Documentation/devicetree/bindings/gpio/pl061-gpio.txt
Normal file
10
Documentation/devicetree/bindings/gpio/pl061-gpio.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
ARM PL061 GPIO controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "arm,pl061", "arm,primecell"
|
||||||
|
- #gpio-cells : Should be two. The first cell is the pin number and the
|
||||||
|
second cell is used to specify optional parameters:
|
||||||
|
- bit 0 specifies polarity (0 for normal, 1 for inverted)
|
||||||
|
- gpio-controller : Marks the device node as a GPIO controller.
|
||||||
|
- interrupts : Interrupt mapping for GPIO IRQ.
|
||||||
|
|
25
Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt
Normal file
25
Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
* Freescale Inter IC (I2C) and High Speed Inter IC (HS-I2C) for i.MX
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "fsl,<chip>-i2c"
|
||||||
|
- reg : Should contain I2C/HS-I2C registers location and length
|
||||||
|
- interrupts : Should contain I2C/HS-I2C interrupt
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.
|
||||||
|
The absence of the propoerty indicates the default frequency 100 kHz.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
i2c@83fc4000 { /* I2C2 on i.MX51 */
|
||||||
|
compatible = "fsl,imx51-i2c", "fsl,imx1-i2c";
|
||||||
|
reg = <0x83fc4000 0x4000>;
|
||||||
|
interrupts = <63>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c@70038000 { /* HS-I2C on i.MX51 */
|
||||||
|
compatible = "fsl,imx51-i2c", "fsl,imx1-i2c";
|
||||||
|
reg = <0x70038000 0x4000>;
|
||||||
|
interrupts = <64>;
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
};
|
39
Documentation/devicetree/bindings/i2c/samsung-i2c.txt
Normal file
39
Documentation/devicetree/bindings/i2c/samsung-i2c.txt
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
* Samsung's I2C controller
|
||||||
|
|
||||||
|
The Samsung's I2C controller is used to interface with I2C devices.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: value should be either of the following.
|
||||||
|
(a) "samsung, s3c2410-i2c", for i2c compatible with s3c2410 i2c.
|
||||||
|
(b) "samsung, s3c2440-i2c", for i2c compatible with s3c2440 i2c.
|
||||||
|
- reg: physical base address of the controller and length of memory mapped
|
||||||
|
region.
|
||||||
|
- interrupts: interrupt number to the cpu.
|
||||||
|
- samsung,i2c-sda-delay: Delay (in ns) applied to data line (SDA) edges.
|
||||||
|
- gpios: The order of the gpios should be the following: <SDA, SCL>.
|
||||||
|
The gpio specifier depends on the gpio controller.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- samsung,i2c-slave-addr: Slave address in multi-master enviroment. If not
|
||||||
|
specified, default value is 0.
|
||||||
|
- samsung,i2c-max-bus-freq: Desired frequency in Hz of the bus. If not
|
||||||
|
specified, the default value in Hz is 100000.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
i2c@13870000 {
|
||||||
|
compatible = "samsung,s3c2440-i2c";
|
||||||
|
reg = <0x13870000 0x100>;
|
||||||
|
interrupts = <345>;
|
||||||
|
samsung,i2c-sda-delay = <100>;
|
||||||
|
samsung,i2c-max-bus-freq = <100000>;
|
||||||
|
gpios = <&gpd1 2 0 /* SDA */
|
||||||
|
&gpd1 3 0 /* SCL */>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
wm8994@1a {
|
||||||
|
compatible = "wlf,wm8994";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
||||||
|
};
|
27
Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt
Normal file
27
Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
* NVIDIA Tegra Secure Digital Host Controller
|
||||||
|
|
||||||
|
This controller on Tegra family SoCs provides an interface for MMC, SD,
|
||||||
|
and SDIO types of memory cards.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : Should be "nvidia,<chip>-sdhci"
|
||||||
|
- reg : Should contain SD/MMC registers location and length
|
||||||
|
- interrupts : Should contain SD/MMC interrupt
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- cd-gpios : Specify GPIOs for card detection
|
||||||
|
- wp-gpios : Specify GPIOs for write protection
|
||||||
|
- power-gpios : Specify GPIOs for power control
|
||||||
|
- support-8bit : Boolean, indicates if 8-bit mode should be used.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
sdhci@c8000200 {
|
||||||
|
compatible = "nvidia,tegra20-sdhci";
|
||||||
|
reg = <0xc8000200 0x200>;
|
||||||
|
interrupts = <47>;
|
||||||
|
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
||||||
|
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
||||||
|
power-gpios = <&gpio 155 0>; /* gpio PT3 */
|
||||||
|
support-8bit;
|
||||||
|
};
|
14
Documentation/devicetree/bindings/mtd/atmel-dataflash.txt
Normal file
14
Documentation/devicetree/bindings/mtd/atmel-dataflash.txt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
* Atmel Data Flash
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "atmel,<model>", "atmel,<series>", "atmel,dataflash".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
flash@1 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "atmel,at45db321d", "atmel,at45", "atmel,dataflash";
|
||||||
|
spi-max-frequency = <25000000>;
|
||||||
|
reg = <1>;
|
||||||
|
};
|
|
@ -0,0 +1,5 @@
|
||||||
|
NVIDIA Tegra 2 pinmux controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "nvidia,tegra20-pinmux"
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
Freescale Reference Board Bindings
|
||||||
|
|
||||||
|
This document describes device tree bindings for various devices that
|
||||||
|
exist on some Freescale reference boards.
|
||||||
|
|
||||||
* Board Control and Status (BCSR)
|
* Board Control and Status (BCSR)
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
@ -12,25 +17,26 @@ Example:
|
||||||
reg = <f8000000 8000>;
|
reg = <f8000000 8000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
* Freescale on board FPGA
|
* Freescale on-board FPGA
|
||||||
|
|
||||||
This is the memory-mapped registers for on board FPGA.
|
This is the memory-mapped registers for on board FPGA.
|
||||||
|
|
||||||
Required properities:
|
Required properities:
|
||||||
- compatible : should be "fsl,fpga-pixis".
|
- compatible: should be a board-specific string followed by a string
|
||||||
- reg : should contain the address and the length of the FPPGA register
|
indicating the type of FPGA. Example:
|
||||||
set.
|
"fsl,<board>-fpga", "fsl,fpga-pixis"
|
||||||
|
- reg: should contain the address and the length of the FPGA register set.
|
||||||
- interrupt-parent: should specify phandle for the interrupt controller.
|
- interrupt-parent: should specify phandle for the interrupt controller.
|
||||||
- interrupts : should specify event (wakeup) IRQ.
|
- interrupts: should specify event (wakeup) IRQ.
|
||||||
|
|
||||||
Example (MPC8610HPCD):
|
Example (P1022DS):
|
||||||
|
|
||||||
board-control@e8000000 {
|
board-control@3,0 {
|
||||||
compatible = "fsl,fpga-pixis";
|
compatible = "fsl,p1022ds-fpga", "fsl,fpga-ngpixis";
|
||||||
reg = <0xe8000000 32>;
|
reg = <3 0 0x30>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <8 8>;
|
interrupts = <8 8 0 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
* Freescale BCSR GPIO banks
|
* Freescale BCSR GPIO banks
|
||||||
|
|
||||||
|
|
395
Documentation/devicetree/bindings/powerpc/fsl/dcsr.txt
Normal file
395
Documentation/devicetree/bindings/powerpc/fsl/dcsr.txt
Normal file
|
@ -0,0 +1,395 @@
|
||||||
|
===================================================================
|
||||||
|
Debug Control and Status Register (DCSR) Binding
|
||||||
|
Copyright 2011 Freescale Semiconductor Inc.
|
||||||
|
|
||||||
|
NOTE: The bindings described in this document are preliminary and subject
|
||||||
|
to change. Some of the compatible strings that contain only generic names
|
||||||
|
may turn out to be inappropriate, or need additional properties to describe
|
||||||
|
the integration of the block with the rest of the chip.
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Debug Control and Status Register Memory Map
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
This node defines the base address and range for the
|
||||||
|
defined DCSR Memory Map. Child nodes will describe the individual
|
||||||
|
debug blocks defined within this memory space.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr" and "simple-bus".
|
||||||
|
The DCSR space exists in the memory-mapped bus.
|
||||||
|
|
||||||
|
- #address-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
or representing physical addresses in child nodes.
|
||||||
|
|
||||||
|
- #size-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
or representing the size of physical addresses in
|
||||||
|
child nodes.
|
||||||
|
|
||||||
|
- ranges
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
range of the DCSR space.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr: dcsr@f00000000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,dcsr", "simple-bus";
|
||||||
|
ranges = <0x00000000 0xf 0x00000000 0x01008000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Event Processing Unit
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the EPU
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-epu"
|
||||||
|
|
||||||
|
- interrupts
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop_encoded-array>
|
||||||
|
Definition: Specifies the interrupts generated by the EPU.
|
||||||
|
The value of the interrupts property consists of three
|
||||||
|
interrupt specifiers. The format of the specifier is defined
|
||||||
|
by the binding document describing the node's interrupt parent.
|
||||||
|
|
||||||
|
The EPU counters can be configured to assert the performance
|
||||||
|
monitor interrupt signal based on either counter overflow or value
|
||||||
|
match. Which counter asserted the interrupt is captured in an EPU
|
||||||
|
Counter Interrupt Status Register (EPCPUISR).
|
||||||
|
|
||||||
|
The EPU unit can also be configured to assert either or both of
|
||||||
|
two interrupt signals based on debug event sources within the SoC.
|
||||||
|
The interrupt signals are epu_xt_int0 and epu_xt_int1.
|
||||||
|
Which event source asserted the interrupt is captured in an EPU
|
||||||
|
Interrupt Status Register (EPISR0,EPISR1).
|
||||||
|
|
||||||
|
Interrupt numbers are lised in order (perfmon, event0, event1).
|
||||||
|
|
||||||
|
- interrupt-parent
|
||||||
|
Usage: required
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: A single <phandle> value that points
|
||||||
|
to the interrupt parent to which the child domain
|
||||||
|
is being mapped. Value must be "&mpic"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-epu@0 {
|
||||||
|
compatible = "fsl,dcsr-epu";
|
||||||
|
interrupts = <52 2 0 0
|
||||||
|
84 2 0 0
|
||||||
|
85 2 0 0>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
reg = <0x0 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Port Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the NPC
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-npc"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
The Nexus Port controller occupies two regions in the DCSR space
|
||||||
|
with distinct functionality.
|
||||||
|
|
||||||
|
The first register range describes the Nexus Port Controller
|
||||||
|
control and status registers.
|
||||||
|
|
||||||
|
The second register range describes the Nexus Port Controller
|
||||||
|
internal trace buffer. The NPC trace buffer is a small memory buffer
|
||||||
|
which stages the nexus trace data for transmission via the Aurora port
|
||||||
|
or to a DDR based trace buffer. In some configurations the NPC trace
|
||||||
|
buffer can be the only trace buffer used.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-npc {
|
||||||
|
compatible = "fsl,dcsr-npc";
|
||||||
|
reg = <0x1000 0x1000 0x1000000 0x8000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Concentrator
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the NXC
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-nxc"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-nxc@2000 {
|
||||||
|
compatible = "fsl,dcsr-nxc";
|
||||||
|
reg = <0x2000 0x1000>;
|
||||||
|
};
|
||||||
|
=======================================================================
|
||||||
|
CoreNet Debug Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the CoreNet Debug controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-corenet"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
The CoreNet Debug controller occupies two regions in the DCSR space
|
||||||
|
with distinct functionality.
|
||||||
|
|
||||||
|
The first register range describes the CoreNet Debug Controller
|
||||||
|
functionalty to perform transaction and transaction attribute matches.
|
||||||
|
|
||||||
|
The second register range describes the CoreNet Debug Controller
|
||||||
|
functionalty to trigger event notifications and debug traces.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-corenet {
|
||||||
|
compatible = "fsl,dcsr-corenet";
|
||||||
|
reg = <0x8000 0x1000 0xB0000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Data Path Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the DPAA Debug Controller. This controller controls debug configuration
|
||||||
|
for the QMAN and FMAN blocks.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-dpaa" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-dpaa".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-dpaa@9000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-dpaa", "fsl,dcsr-dpaa";
|
||||||
|
reg = <0x9000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
OCeaN Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the OCN Debug Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-ocn" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-ocn".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-ocn@11000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-ocn", "fsl,dcsr-ocn";
|
||||||
|
reg = <0x11000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
DDR Controller Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the OCN Debug Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-ddr"
|
||||||
|
|
||||||
|
- dev-handle
|
||||||
|
Usage: required
|
||||||
|
Definition: A phandle to associate this debug node with its
|
||||||
|
component controller.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-ddr@12000 {
|
||||||
|
compatible = "fsl,dcsr-ddr";
|
||||||
|
dev-handle = <&ddr1>;
|
||||||
|
reg = <0x12000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Aurora Link Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the NAL Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-nal" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-nal".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-nal@18000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-nal", "fsl,dcsr-nal";
|
||||||
|
reg = <0x18000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Run Control and Power Management
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the RCPM Debug Controller. This functionlity is limited to the
|
||||||
|
control the debug operations of the SoC and cores.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-rcpm" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-rcpm".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-rcpm@22000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-rcpm", "fsl,dcsr-rcpm";
|
||||||
|
reg = <0x22000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Core Service Bridge Proxy
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the Core Service Bridge Proxies.
|
||||||
|
There is one Core Service Bridge Proxy device for each CPU in the system.
|
||||||
|
This functionlity provides access to the debug operations of the CPU.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the cpu
|
||||||
|
of the form "fsl,dcsr-<cpu>-sb-proxy" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-cpu-sb-proxy".
|
||||||
|
|
||||||
|
- cpu-handle
|
||||||
|
Usage: required
|
||||||
|
Definition: A phandle to associate this debug node with its cpu.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-cpu-sb-proxy@40000 {
|
||||||
|
compatible = "fsl,dcsr-e500mc-sb-proxy",
|
||||||
|
"fsl,dcsr-cpu-sb-proxy";
|
||||||
|
cpu-handle = <&cpu0>;
|
||||||
|
reg = <0x40000 0x1000>;
|
||||||
|
};
|
||||||
|
dcsr-cpu-sb-proxy@41000 {
|
||||||
|
compatible = "fsl,dcsr-e500mc-sb-proxy",
|
||||||
|
"fsl,dcsr-cpu-sb-proxy";
|
||||||
|
cpu-handle = <&cpu1>;
|
||||||
|
reg = <0x41000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
|
@ -25,6 +25,16 @@ Required properties:
|
||||||
are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
|
are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
|
||||||
to MPIC.
|
to MPIC.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- msi-address-64: 64-bit PCI address of the MSIIR register. The MSIIR register
|
||||||
|
is used for MSI messaging. The address of MSIIR in PCI address space is
|
||||||
|
the MSI message address.
|
||||||
|
|
||||||
|
This property may be used in virtualized environments where the hypervisor
|
||||||
|
has created an alternate mapping for the MSIR block. See below for an
|
||||||
|
explanation.
|
||||||
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
msi@41600 {
|
msi@41600 {
|
||||||
compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
|
compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
|
||||||
|
@ -41,3 +51,35 @@ Example:
|
||||||
0xe7 0>;
|
0xe7 0>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
The Freescale hypervisor and msi-address-64
|
||||||
|
-------------------------------------------
|
||||||
|
Normally, PCI devices have access to all of CCSR via an ATMU mapping. The
|
||||||
|
Freescale MSI driver calculates the address of MSIIR (in the MSI register
|
||||||
|
block) and sets that address as the MSI message address.
|
||||||
|
|
||||||
|
In a virtualized environment, the hypervisor may need to create an IOMMU
|
||||||
|
mapping for MSIIR. The Freescale ePAPR hypervisor has this requirement
|
||||||
|
because of hardware limitations of the Peripheral Access Management Unit
|
||||||
|
(PAMU), which is currently the only IOMMU that the hypervisor supports.
|
||||||
|
The ATMU is programmed with the guest physical address, and the PAMU
|
||||||
|
intercepts transactions and reroutes them to the true physical address.
|
||||||
|
|
||||||
|
In the PAMU, each PCI controller is given only one primary window. The
|
||||||
|
PAMU restricts DMA operations so that they can only occur within a window.
|
||||||
|
Because PCI devices must be able to DMA to memory, the primary window must
|
||||||
|
be used to cover all of the guest's memory space.
|
||||||
|
|
||||||
|
PAMU primary windows can be divided into 256 subwindows, and each
|
||||||
|
subwindow can have its own address mapping ("guest physical" to "true
|
||||||
|
physical"). However, each subwindow has to have the same alignment, which
|
||||||
|
means they cannot be located at just any address. Because of these
|
||||||
|
restrictions, it is usually impossible to create a 4KB subwindow that
|
||||||
|
covers MSIIR where it's normally located.
|
||||||
|
|
||||||
|
Therefore, the hypervisor has to create a subwindow inside the same
|
||||||
|
primary window used for memory, but mapped to the MSIR block (where MSIIR
|
||||||
|
lives). The first subwindow after the end of guest memory is used for
|
||||||
|
this. The address specified in the msi-address-64 property is the PCI
|
||||||
|
address of MSIIR. The hypervisor configures the PAMU to map that address to
|
||||||
|
the true physical address of MSIIR.
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
* Freescale SGTL5000 Stereo Codec
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "fsl,sgtl5000".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: sgtl5000@0a {
|
||||||
|
compatible = "fsl,sgtl5000";
|
||||||
|
reg = <0x0a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8510.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8510.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8510 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8510"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8510@1a {
|
||||||
|
compatible = "wlf,wm8510";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
16
Documentation/devicetree/bindings/sound/wm8523.txt
Normal file
16
Documentation/devicetree/bindings/sound/wm8523.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
WM8523 audio CODEC
|
||||||
|
|
||||||
|
This device supports I2C only.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8523"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8523@1a {
|
||||||
|
compatible = "wlf,wm8523";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
16
Documentation/devicetree/bindings/sound/wm8580.txt
Normal file
16
Documentation/devicetree/bindings/sound/wm8580.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
WM8580 audio CODEC
|
||||||
|
|
||||||
|
This device supports I2C only.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8580"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8580@1a {
|
||||||
|
compatible = "wlf,wm8580";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8711.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8711.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8711 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8711"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8711@1a {
|
||||||
|
compatible = "wlf,wm8711";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8728.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8728.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8728 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8728"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8728@1a {
|
||||||
|
compatible = "wlf,wm8728";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8731.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8731.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8731 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8731"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8731@1a {
|
||||||
|
compatible = "wlf,wm8731";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8737.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8737.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8737 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8737"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8737@1a {
|
||||||
|
compatible = "wlf,wm8737";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8741.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8741.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8741 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8741"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8741@1a {
|
||||||
|
compatible = "wlf,wm8741";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8750.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8750.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8750 and WM8987 audio CODECs
|
||||||
|
|
||||||
|
These devices support both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8750" or "wlf,wm8987"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8750@1a {
|
||||||
|
compatible = "wlf,wm8750";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8753.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8753.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8753 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8753"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8737@1a {
|
||||||
|
compatible = "wlf,wm8753";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
16
Documentation/devicetree/bindings/sound/wm8770.txt
Normal file
16
Documentation/devicetree/bindings/sound/wm8770.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
WM8770 audio CODEC
|
||||||
|
|
||||||
|
This device supports SPI.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8770"
|
||||||
|
|
||||||
|
- reg : the chip select number.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8770@1 {
|
||||||
|
compatible = "wlf,wm8770";
|
||||||
|
reg = <1>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8776.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8776.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8776 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8776"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8776@1a {
|
||||||
|
compatible = "wlf,wm8776";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
18
Documentation/devicetree/bindings/sound/wm8804.txt
Normal file
18
Documentation/devicetree/bindings/sound/wm8804.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
WM8804 audio CODEC
|
||||||
|
|
||||||
|
This device supports both I2C and SPI (configured with pin strapping
|
||||||
|
on the board).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : "wlf,wm8804"
|
||||||
|
|
||||||
|
- reg : the I2C address of the device for I2C, the chip select
|
||||||
|
number for SPI.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
codec: wm8804@1a {
|
||||||
|
compatible = "wlf,wm8804";
|
||||||
|
reg = <0x1a>;
|
||||||
|
};
|
12
Documentation/devicetree/bindings/spi/spi_pl022.txt
Normal file
12
Documentation/devicetree/bindings/spi/spi_pl022.txt
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
ARM PL022 SPI controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "arm,pl022", "arm,primecell"
|
||||||
|
- reg : Offset and length of the register set for the device
|
||||||
|
- interrupts : Should contain SPI controller interrupt
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- cs-gpios : should specify GPIOs 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.
|
||||||
|
|
27
Documentation/devicetree/bindings/tty/serial/msm_serial.txt
Normal file
27
Documentation/devicetree/bindings/tty/serial/msm_serial.txt
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
* Qualcomm MSM UART
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible :
|
||||||
|
- "qcom,msm-uart", and one of "qcom,msm-hsuart" or
|
||||||
|
"qcom,msm-lsuart".
|
||||||
|
- reg : offset and length of the register set for the device
|
||||||
|
for the hsuart operating in compatible mode, there should be a
|
||||||
|
second pair describing the gsbi registers.
|
||||||
|
- interrupts : should contain the uart interrupt.
|
||||||
|
|
||||||
|
There are two different UART blocks used in MSM devices,
|
||||||
|
"qcom,msm-hsuart" and "qcom,msm-lsuart". The msm-serial driver is
|
||||||
|
able to handle both of these, and matches against the "qcom,msm-uart"
|
||||||
|
as the compatibility.
|
||||||
|
|
||||||
|
The registers for the "qcom,msm-hsuart" device need to specify both
|
||||||
|
register blocks, even for the common driver.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
uart@19c400000 {
|
||||||
|
compatible = "qcom,msm-hsuart", "qcom,msm-uart";
|
||||||
|
reg = <0x19c40000 0x1000>,
|
||||||
|
<0x19c00000 0x1000>;
|
||||||
|
interrupts = <195>;
|
||||||
|
};
|
40
Documentation/devicetree/bindings/vendor-prefixes.txt
Normal file
40
Documentation/devicetree/bindings/vendor-prefixes.txt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
Device tree binding vendor prefix registry. Keep list in alphabetical order.
|
||||||
|
|
||||||
|
This isn't an exhaustive list, but you should add new prefixes to it before
|
||||||
|
using them to avoid name-space collisions.
|
||||||
|
|
||||||
|
adi Analog Devices, Inc.
|
||||||
|
amcc Applied Micro Circuits Corporation (APM, formally AMCC)
|
||||||
|
apm Applied Micro Circuits Corporation (APM)
|
||||||
|
arm ARM Ltd.
|
||||||
|
atmel Atmel Corporation
|
||||||
|
chrp Common Hardware Reference Platform
|
||||||
|
dallas Maxim Integrated Products (formerly Dallas Semiconductor)
|
||||||
|
denx Denx Software Engineering
|
||||||
|
epson Seiko Epson Corp.
|
||||||
|
est ESTeem Wireless Modems
|
||||||
|
fsl Freescale Semiconductor
|
||||||
|
GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
|
gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
|
hp Hewlett Packard
|
||||||
|
ibm International Business Machines (IBM)
|
||||||
|
idt Integrated Device Technologies, Inc.
|
||||||
|
intercontrol Inter Control Group
|
||||||
|
linux Linux-specific binding
|
||||||
|
marvell Marvell Technology Group Ltd.
|
||||||
|
maxim Maxim Integrated Products
|
||||||
|
mosaixtech Mosaix Technologies, Inc.
|
||||||
|
national National Semiconductor
|
||||||
|
nintendo Nintendo
|
||||||
|
nvidia NVIDIA
|
||||||
|
nxp NXP Semiconductors
|
||||||
|
powervr Imagination Technologies
|
||||||
|
qcom Qualcomm, Inc.
|
||||||
|
ramtron Ramtron International
|
||||||
|
samsung Samsung Semiconductor
|
||||||
|
schindler Schindler
|
||||||
|
simtek
|
||||||
|
sirf SiRF Technology, Inc.
|
||||||
|
stericsson ST-Ericsson
|
||||||
|
ti Texas Instruments
|
||||||
|
xlnx Xilinx
|
17
Documentation/devicetree/bindings/virtio/mmio.txt
Normal file
17
Documentation/devicetree/bindings/virtio/mmio.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
* virtio memory mapped device
|
||||||
|
|
||||||
|
See http://ozlabs.org/~rusty/virtio-spec/ for more details.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible: "virtio,mmio" compatibility string
|
||||||
|
- reg: control registers base address and size including configuration space
|
||||||
|
- interrupts: interrupt generated by the device
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
virtio_block@3000 {
|
||||||
|
compatible = "virtio,mmio";
|
||||||
|
reg = <0x3000 0x100>;
|
||||||
|
interrupts = <41>;
|
||||||
|
}
|
|
@ -27,7 +27,8 @@ use IO::Handle;
|
||||||
"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", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395",
|
"af9015", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395",
|
||||||
"lme2510c_s7395_old", "drxk", "drxk_terratec_h5");
|
"lme2510c_s7395_old", "drxk", "drxk_terratec_h5", "tda10071",
|
||||||
|
"it9135" );
|
||||||
|
|
||||||
# Check args
|
# Check args
|
||||||
syntax() if (scalar(@ARGV) != 1);
|
syntax() if (scalar(@ARGV) != 1);
|
||||||
|
@ -575,19 +576,10 @@ sub ngene {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub az6027{
|
sub az6027{
|
||||||
my $file = "AZ6027_Linux_Driver.tar.gz";
|
|
||||||
my $url = "http://linux.terratec.de/files/$file";
|
|
||||||
my $firmware = "dvb-usb-az6027-03.fw";
|
my $firmware = "dvb-usb-az6027-03.fw";
|
||||||
|
my $url = "http://linux.terratec.de/files/TERRATEC_S7/$firmware";
|
||||||
|
|
||||||
wgetfile($file, $url);
|
wgetfile($firmware, $url);
|
||||||
|
|
||||||
#untar
|
|
||||||
if( system("tar xzvf $file $firmware")){
|
|
||||||
die "failed to untar firmware";
|
|
||||||
}
|
|
||||||
if( system("rm $file")){
|
|
||||||
die ("unable to remove unnecessary files");
|
|
||||||
}
|
|
||||||
|
|
||||||
$firmware;
|
$firmware;
|
||||||
}
|
}
|
||||||
|
@ -665,6 +657,41 @@ sub drxk_terratec_h5 {
|
||||||
"$fwfile"
|
"$fwfile"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub it9135 {
|
||||||
|
my $url = "http://kworld.server261.com/kworld/CD/ITE_TiVme/V1.00/";
|
||||||
|
my $zipfile = "Driver_V10.323.1.0412.100412.zip";
|
||||||
|
my $hash = "79b597dc648698ed6820845c0c9d0d37";
|
||||||
|
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 0);
|
||||||
|
my $drvfile = "Driver_V10.323.1.0412.100412/Data/x86/IT9135BDA.sys";
|
||||||
|
my $fwfile = "dvb-usb-it9137-01.fw";
|
||||||
|
|
||||||
|
checkstandard();
|
||||||
|
|
||||||
|
wgetfile($zipfile, $url . $zipfile);
|
||||||
|
verify($zipfile, $hash);
|
||||||
|
unzip($zipfile, $tmpdir);
|
||||||
|
extract("$tmpdir/$drvfile", 69632, 5731, "$fwfile");
|
||||||
|
|
||||||
|
"$fwfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
sub tda10071 {
|
||||||
|
my $sourcefile = "PCTV_460e_reference.zip";
|
||||||
|
my $url = "ftp://ftp.pctvsystems.com/TV/driver/PCTV%2070e%2080e%20100e%20320e%20330e%20800e/";
|
||||||
|
my $hash = "4403de903bf2593464c8d74bbc200a57";
|
||||||
|
my $fwfile = "dvb-fe-tda10071.fw";
|
||||||
|
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
|
||||||
|
|
||||||
|
checkstandard();
|
||||||
|
|
||||||
|
wgetfile($sourcefile, $url . $sourcefile);
|
||||||
|
verify($sourcefile, $hash);
|
||||||
|
unzip($sourcefile, $tmpdir);
|
||||||
|
extract("$tmpdir/PCTV\ 70e\ 80e\ 100e\ 320e\ 330e\ 800e/32\ bit/emOEM.sys", 0x67d38, 40504, $fwfile);
|
||||||
|
|
||||||
|
"$fwfile";
|
||||||
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
# Utilities
|
# Utilities
|
||||||
|
|
||||||
|
|
9
Documentation/dvb/it9137.txt
Normal file
9
Documentation/dvb/it9137.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
To extract firmware for Kworld UB499-2T (id 1b80:e409) you need to copy the
|
||||||
|
following file(s) to this directory.
|
||||||
|
|
||||||
|
IT9135BDA.sys Dated Mon 22 Mar 2010 02:20:08 GMT
|
||||||
|
|
||||||
|
extract using dd
|
||||||
|
dd if=IT9135BDA.sys ibs=1 skip=69632 count=5731 of=dvb-usb-it9137-01.fw
|
||||||
|
|
||||||
|
copy to default firmware location.
|
|
@ -21,6 +21,11 @@ o fail_make_request
|
||||||
/sys/block/<device>/make-it-fail or
|
/sys/block/<device>/make-it-fail or
|
||||||
/sys/block/<device>/<partition>/make-it-fail. (generic_make_request())
|
/sys/block/<device>/<partition>/make-it-fail. (generic_make_request())
|
||||||
|
|
||||||
|
o fail_mmc_request
|
||||||
|
|
||||||
|
injects MMC data errors on devices permitted by setting
|
||||||
|
debugfs entries under /sys/kernel/debug/mmc0/fail_mmc_request
|
||||||
|
|
||||||
Configure fault-injection capabilities behavior
|
Configure fault-injection capabilities behavior
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
|
@ -115,7 +120,8 @@ use the boot option:
|
||||||
|
|
||||||
failslab=
|
failslab=
|
||||||
fail_page_alloc=
|
fail_page_alloc=
|
||||||
fail_make_request=<interval>,<probability>,<space>,<times>
|
fail_make_request=
|
||||||
|
mmc_core.fail_request=<interval>,<probability>,<space>,<times>
|
||||||
|
|
||||||
How to add new fault injection capability
|
How to add new fault injection capability
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
|
@ -87,23 +87,38 @@ Special configuration for udlfb is usually unnecessary. There are a few
|
||||||
options, however.
|
options, however.
|
||||||
|
|
||||||
From the command line, pass options to modprobe
|
From the command line, pass options to modprobe
|
||||||
modprobe udlfb defio=1 console=1
|
modprobe udlfb fb_defio=0 console=1 shadow=1
|
||||||
|
|
||||||
Or for permanent option, create file like /etc/modprobe.d/options with text
|
Or modify options on the fly at /sys/module/udlfb/parameters directory via
|
||||||
options udlfb defio=1 console=1
|
sudo nano fb_defio
|
||||||
|
change the parameter in place, and save the file.
|
||||||
|
|
||||||
Accepted options:
|
Unplug/replug USB device to apply with new settings
|
||||||
|
|
||||||
|
Or for permanent option, create file like /etc/modprobe.d/udlfb.conf with text
|
||||||
|
options udlfb fb_defio=0 console=1 shadow=1
|
||||||
|
|
||||||
|
Accepted boolean options:
|
||||||
|
|
||||||
fb_defio Make use of the fb_defio (CONFIG_FB_DEFERRED_IO) kernel
|
fb_defio Make use of the fb_defio (CONFIG_FB_DEFERRED_IO) kernel
|
||||||
module to track changed areas of the framebuffer by page faults.
|
module to track changed areas of the framebuffer by page faults.
|
||||||
Standard fbdev applications that use mmap but that do not
|
Standard fbdev applications that use mmap but that do not
|
||||||
report damage, may be able to work with this enabled.
|
report damage, should be able to work with this enabled.
|
||||||
Disabled by default because of overhead and other issues.
|
Disable when running with X server that supports reporting
|
||||||
|
changed regions via ioctl, as this method is simpler,
|
||||||
|
more stable, and higher performance.
|
||||||
|
default: fb_defio=1
|
||||||
|
|
||||||
console Allow fbcon to attach to udlfb provided framebuffers. This
|
console Allow fbcon to attach to udlfb provided framebuffers.
|
||||||
is disabled by default because fbcon will aggressively consume
|
Can be disabled if fbcon and other clients
|
||||||
the first framebuffer it finds, which isn't usually what the
|
(e.g. X with --shared-vt) are in conflict.
|
||||||
user wants in the case of USB displays.
|
default: console=1
|
||||||
|
|
||||||
|
shadow Allocate a 2nd framebuffer to shadow what's currently across
|
||||||
|
the USB bus in device memory. If any pixels are unchanged,
|
||||||
|
do not transmit. Spends host memory to save USB transfers.
|
||||||
|
Enabled by default. Only disable on very low memory systems.
|
||||||
|
default: shadow=1
|
||||||
|
|
||||||
Sysfs Attributes
|
Sysfs Attributes
|
||||||
================
|
================
|
||||||
|
|
|
@ -133,41 +133,6 @@ Who: Pavel Machek <pavel@ucw.cz>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: sys_sysctl
|
|
||||||
When: September 2010
|
|
||||||
Option: CONFIG_SYSCTL_SYSCALL
|
|
||||||
Why: The same information is available in a more convenient from
|
|
||||||
/proc/sys, and none of the sysctl variables appear to be
|
|
||||||
important performance wise.
|
|
||||||
|
|
||||||
Binary sysctls are a long standing source of subtle kernel
|
|
||||||
bugs and security issues.
|
|
||||||
|
|
||||||
When I looked several months ago all I could find after
|
|
||||||
searching several distributions were 5 user space programs and
|
|
||||||
glibc (which falls back to /proc/sys) using this syscall.
|
|
||||||
|
|
||||||
The man page for sysctl(2) documents it as unusable for user
|
|
||||||
space programs.
|
|
||||||
|
|
||||||
sysctl(2) is not generally ABI compatible to a 32bit user
|
|
||||||
space application on a 64bit and a 32bit kernel.
|
|
||||||
|
|
||||||
For the last several months the policy has been no new binary
|
|
||||||
sysctls and no one has put forward an argument to use them.
|
|
||||||
|
|
||||||
Binary sysctls issues seem to keep happening appearing so
|
|
||||||
properly deprecating them (with a warning to user space) and a
|
|
||||||
2 year grace warning period will mean eventually we can kill
|
|
||||||
them and end the pain.
|
|
||||||
|
|
||||||
In the mean time individual binary sysctls can be dealt with
|
|
||||||
in a piecewise fashion.
|
|
||||||
|
|
||||||
Who: Eric Biederman <ebiederm@xmission.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: /proc/<pid>/oom_adj
|
What: /proc/<pid>/oom_adj
|
||||||
When: August 2012
|
When: August 2012
|
||||||
Why: /proc/<pid>/oom_adj allows userspace to influence the oom killer's
|
Why: /proc/<pid>/oom_adj allows userspace to influence the oom killer's
|
||||||
|
@ -298,8 +263,7 @@ Who: Ravikiran Thirumalai <kiran@scalex86.org>
|
||||||
|
|
||||||
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
|
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
|
||||||
(in net/core/net-sysfs.c)
|
(in net/core/net-sysfs.c)
|
||||||
When: After the only user (hal) has seen a release with the patches
|
When: 3.5
|
||||||
for enough time, probably some time in 2010.
|
|
||||||
Why: Over 1K .text/.data size reduction, data is available in other
|
Why: Over 1K .text/.data size reduction, data is available in other
|
||||||
ways (ioctls)
|
ways (ioctls)
|
||||||
Who: Johannes Berg <johannes@sipsolutions.net>
|
Who: Johannes Berg <johannes@sipsolutions.net>
|
||||||
|
@ -495,29 +459,6 @@ Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
What: Support for UVCIOC_CTRL_ADD in the uvcvideo driver
|
|
||||||
When: 3.2
|
|
||||||
Why: The information passed to the driver by this ioctl is now queried
|
|
||||||
dynamically from the device.
|
|
||||||
Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: Support for UVCIOC_CTRL_MAP_OLD in the uvcvideo driver
|
|
||||||
When: 3.2
|
|
||||||
Why: Used only by applications compiled against older driver versions.
|
|
||||||
Superseded by UVCIOC_CTRL_MAP which supports V4L2 menu controls.
|
|
||||||
Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: Support for UVCIOC_CTRL_GET and UVCIOC_CTRL_SET in the uvcvideo driver
|
|
||||||
When: 3.2
|
|
||||||
Why: Superseded by the UVCIOC_CTRL_QUERY ioctl.
|
|
||||||
Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: Support for driver specific ioctls in the pwc driver (everything
|
What: Support for driver specific ioctls in the pwc driver (everything
|
||||||
defined in media/pwc-ioctl.h)
|
defined in media/pwc-ioctl.h)
|
||||||
When: 3.3
|
When: 3.3
|
||||||
|
|
|
@ -29,6 +29,7 @@ d_hash no no no maybe
|
||||||
d_compare: yes no no maybe
|
d_compare: yes no no maybe
|
||||||
d_delete: no yes no no
|
d_delete: no yes no no
|
||||||
d_release: no no yes no
|
d_release: no no yes no
|
||||||
|
d_prune: no yes no no
|
||||||
d_iput: no no yes no
|
d_iput: no no yes no
|
||||||
d_dname: no no no no
|
d_dname: no no no no
|
||||||
d_automount: no no yes no
|
d_automount: no no yes no
|
||||||
|
|
|
@ -73,14 +73,6 @@ nobarrier (*) This also requires an IO stack which can support
|
||||||
also be used to enable or disable barriers, for
|
also be used to enable or disable barriers, for
|
||||||
consistency with other ext3 mount options.
|
consistency with other ext3 mount options.
|
||||||
|
|
||||||
orlov (*) This enables the new Orlov block allocator. It is
|
|
||||||
enabled by default.
|
|
||||||
|
|
||||||
oldalloc This disables the Orlov block allocator and enables
|
|
||||||
the old block allocator. Orlov should have better
|
|
||||||
performance - we'd like to get some feedback if it's
|
|
||||||
the contrary for you.
|
|
||||||
|
|
||||||
user_xattr Enables Extended User Attributes. Additionally, you
|
user_xattr Enables Extended User Attributes. Additionally, you
|
||||||
need to have extended attribute support enabled in the
|
need to have extended attribute support enabled in the
|
||||||
kernel configuration (CONFIG_EXT3_FS_XATTR). See the
|
kernel configuration (CONFIG_EXT3_FS_XATTR). See the
|
||||||
|
|
|
@ -160,7 +160,9 @@ noload if the filesystem was not unmounted cleanly,
|
||||||
lead to any number of problems.
|
lead to any number of problems.
|
||||||
|
|
||||||
data=journal All data are committed into the journal prior to being
|
data=journal All data are committed into the journal prior to being
|
||||||
written into the main file system.
|
written into the main file system. Enabling
|
||||||
|
this mode will disable delayed allocation and
|
||||||
|
O_DIRECT support.
|
||||||
|
|
||||||
data=ordered (*) All data are forced directly out to the main file
|
data=ordered (*) All data are forced directly out to the main file
|
||||||
system prior to its metadata being committed to the
|
system prior to its metadata being committed to the
|
||||||
|
@ -201,30 +203,19 @@ inode_readahead_blks=n This tuning parameter controls the maximum
|
||||||
table readahead algorithm will pre-read into
|
table readahead algorithm will pre-read into
|
||||||
the buffer cache. The default value is 32 blocks.
|
the buffer cache. The default value is 32 blocks.
|
||||||
|
|
||||||
orlov (*) This enables the new Orlov block allocator. It is
|
nouser_xattr Disables Extended User Attributes. If you have extended
|
||||||
enabled by default.
|
attribute support enabled in the kernel configuration
|
||||||
|
(CONFIG_EXT4_FS_XATTR), extended attribute support
|
||||||
oldalloc This disables the Orlov block allocator and enables
|
is enabled by default on mount. See the attr(5) manual
|
||||||
the old block allocator. Orlov should have better
|
page and http://acl.bestbits.at/ for more information
|
||||||
performance - we'd like to get some feedback if it's
|
about extended attributes.
|
||||||
the contrary for you.
|
|
||||||
|
|
||||||
user_xattr Enables Extended User Attributes. Additionally, you
|
|
||||||
need to have extended attribute support enabled in the
|
|
||||||
kernel configuration (CONFIG_EXT4_FS_XATTR). See the
|
|
||||||
attr(5) manual page and http://acl.bestbits.at/ to
|
|
||||||
learn more about extended attributes.
|
|
||||||
|
|
||||||
nouser_xattr Disables Extended User Attributes.
|
|
||||||
|
|
||||||
acl Enables POSIX Access Control Lists support.
|
|
||||||
Additionally, you need to have ACL support enabled in
|
|
||||||
the kernel configuration (CONFIG_EXT4_FS_POSIX_ACL).
|
|
||||||
See the acl(5) manual page and http://acl.bestbits.at/
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
noacl This option disables POSIX Access Control List
|
noacl This option disables POSIX Access Control List
|
||||||
support.
|
support. If ACL support is enabled in the kernel
|
||||||
|
configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is
|
||||||
|
enabled by default on mount. See the acl(5) manual
|
||||||
|
page and http://acl.bestbits.at/ for more information
|
||||||
|
about acl.
|
||||||
|
|
||||||
bsddf (*) Make 'df' act like BSD.
|
bsddf (*) Make 'df' act like BSD.
|
||||||
minixdf Make 'df' act like Minix.
|
minixdf Make 'df' act like Minix.
|
||||||
|
@ -419,8 +410,8 @@ written to the journal first, and then to its final location.
|
||||||
In the event of a crash, the journal can be replayed, bringing both data and
|
In the event of a crash, the journal can be replayed, bringing both data and
|
||||||
metadata into a consistent state. This mode is the slowest except when data
|
metadata into a consistent state. This mode is the slowest except when data
|
||||||
needs to be read from and written to disk at the same time where it
|
needs to be read from and written to disk at the same time where it
|
||||||
outperforms all others modes. Currently ext4 does not have delayed
|
outperforms all others modes. Enabling this mode will disable delayed
|
||||||
allocation support if this data journalling mode is selected.
|
allocation and O_DIRECT support.
|
||||||
|
|
||||||
/proc entries
|
/proc entries
|
||||||
=============
|
=============
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
Note: This filesystem doesn't have a maintainer.
|
||||||
|
|
||||||
Macintosh HFS Filesystem for Linux
|
Macintosh HFS Filesystem for Linux
|
||||||
==================================
|
==================================
|
||||||
|
@ -76,8 +77,6 @@ hformat that can be used to create HFS filesystem. See
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
||||||
The HFS drivers was written by Paul H. Hargrovea (hargrove@sccm.Stanford.EDU)
|
The HFS drivers was written by Paul H. Hargrovea (hargrove@sccm.Stanford.EDU).
|
||||||
and is now maintained by Roman Zippel (roman@ardistech.com) at Ardis
|
Roman Zippel (roman@ardistech.com) rewrote large parts of the code and brought
|
||||||
Technologies.
|
in btree routines derived from Brad Boyer's hfsplus driver.
|
||||||
Roman rewrote large parts of the code and brought in btree routines derived
|
|
||||||
from Brad Boyer's hfsplus driver (also maintained by Roman now).
|
|
||||||
|
|
|
@ -194,7 +194,8 @@ associated with the inotify_handle, and on which events are queued.
|
||||||
Each watch is associated with an inotify_watch structure. Watches are chained
|
Each watch is associated with an inotify_watch structure. Watches are chained
|
||||||
off of each associated inotify_handle and each associated inode.
|
off of each associated inotify_handle and each associated inode.
|
||||||
|
|
||||||
See fs/inotify.c and fs/inotify_user.c for the locking and lifetime rules.
|
See fs/notify/inotify/inotify_fsnotify.c and fs/notify/inotify/inotify_user.c
|
||||||
|
for the locking and lifetime rules.
|
||||||
|
|
||||||
|
|
||||||
(vi) Rationale
|
(vi) Rationale
|
||||||
|
|
|
@ -14,6 +14,10 @@ Supported chips:
|
||||||
Prefix: 'w83627dhg'
|
Prefix: 'w83627dhg'
|
||||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
Datasheet: not available
|
Datasheet: not available
|
||||||
|
* Winbond W83627UHG
|
||||||
|
Prefix: 'w83627uhg'
|
||||||
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
|
Datasheet: available from www.nuvoton.com
|
||||||
* Winbond W83667HG
|
* Winbond W83667HG
|
||||||
Prefix: 'w83667hg'
|
Prefix: 'w83667hg'
|
||||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
|
@ -42,14 +46,13 @@ Description
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This driver implements support for the Winbond W83627EHF, W83627EHG,
|
This driver implements support for the Winbond W83627EHF, W83627EHG,
|
||||||
W83627DHG, W83627DHG-P, W83667HG, W83667HG-B, W83667HG-I (NCT6775F),
|
W83627DHG, W83627DHG-P, W83627UHG, W83667HG, W83667HG-B, W83667HG-I
|
||||||
and NCT6776F super I/O chips. We will refer to them collectively as
|
(NCT6775F), and NCT6776F super I/O chips. We will refer to them collectively
|
||||||
Winbond chips.
|
as Winbond chips.
|
||||||
|
|
||||||
The chips implement three temperature sensors (up to four for 667HG-B, and nine
|
The chips implement 2 to 4 temperature sensors (9 for NCT6775F and NCT6776F),
|
||||||
for NCT6775F and NCT6776F), five fan rotation speed sensors, ten analog voltage
|
2 to 5 fan rotation speed sensors, 8 to 10 analog voltage sensors, one VID
|
||||||
sensors (only nine for the 627DHG), one VID (6 pins for the 627EHF/EHG, 8 pins
|
(except for 627UHG), alarms with beep warnings (control unimplemented),
|
||||||
for the 627DHG and 667HG), alarms with beep warnings (control unimplemented),
|
|
||||||
and some automatic fan regulation strategies (plus manual fan control mode).
|
and some automatic fan regulation strategies (plus manual fan control mode).
|
||||||
|
|
||||||
The temperature sensor sources on W82677HG-B, NCT6775F, and NCT6776F are
|
The temperature sensor sources on W82677HG-B, NCT6775F, and NCT6776F are
|
||||||
|
@ -86,17 +89,16 @@ follows:
|
||||||
|
|
||||||
temp1 -> pwm1
|
temp1 -> pwm1
|
||||||
temp2 -> pwm2
|
temp2 -> pwm2
|
||||||
temp3 -> pwm3
|
temp3 -> pwm3 (not on 627UHG)
|
||||||
prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
|
prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
|
||||||
supported by the driver)
|
supported by the driver)
|
||||||
|
|
||||||
/sys files
|
/sys files
|
||||||
----------
|
----------
|
||||||
|
|
||||||
name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG,
|
name - this is a standard hwmon device entry, it contains the name of
|
||||||
it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg",
|
the device (see the prefix in the list of supported devices at
|
||||||
for the W83667HG and W83667HG-B it is set to "w83667hg", for NCT6775F it
|
the top of this file)
|
||||||
is set to "nct6775", and for NCT6776F it is set to "nct6776".
|
|
||||||
|
|
||||||
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
|
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
|
||||||
0 (stop) to 255 (full)
|
0 (stop) to 255 (full)
|
||||||
|
|
|
@ -39,23 +39,20 @@ independent, drivers.
|
||||||
in case an unused hwspinlock isn't available. Users of this
|
in case an unused hwspinlock isn't available. Users of this
|
||||||
API will usually want to communicate the lock's id to the remote core
|
API will usually want to communicate the lock's id to the remote core
|
||||||
before it can be used to achieve synchronization.
|
before it can be used to achieve synchronization.
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
|
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
|
||||||
- assign a specific hwspinlock id and return its address, or NULL
|
- assign a specific hwspinlock id and return its address, or NULL
|
||||||
if that hwspinlock is already in use. Usually board code will
|
if that hwspinlock is already in use. Usually board code will
|
||||||
be calling this function in order to reserve specific hwspinlock
|
be calling this function in order to reserve specific hwspinlock
|
||||||
ids for predefined purposes.
|
ids for predefined purposes.
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
int hwspin_lock_free(struct hwspinlock *hwlock);
|
int hwspin_lock_free(struct hwspinlock *hwlock);
|
||||||
- free a previously-assigned hwspinlock; returns 0 on success, or an
|
- free a previously-assigned hwspinlock; returns 0 on success, or an
|
||||||
appropriate error code on failure (e.g. -EINVAL if the hwspinlock
|
appropriate error code on failure (e.g. -EINVAL if the hwspinlock
|
||||||
is already free).
|
is already free).
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);
|
int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);
|
||||||
- lock a previously-assigned hwspinlock with a timeout limit (specified in
|
- lock a previously-assigned hwspinlock with a timeout limit (specified in
|
||||||
|
@ -230,45 +227,62 @@ int hwspinlock_example2(void)
|
||||||
|
|
||||||
4. API for implementors
|
4. API for implementors
|
||||||
|
|
||||||
int hwspin_lock_register(struct hwspinlock *hwlock);
|
int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
|
||||||
|
const struct hwspinlock_ops *ops, int base_id, int num_locks);
|
||||||
- to be called from the underlying platform-specific implementation, in
|
- to be called from the underlying platform-specific implementation, in
|
||||||
order to register a new hwspinlock instance. Can be called from an atomic
|
order to register a new hwspinlock device (which is usually a bank of
|
||||||
context (this function will not sleep) but not from within interrupt
|
numerous locks). Should be called from a process context (this function
|
||||||
context. Returns 0 on success, or appropriate error code on failure.
|
might sleep).
|
||||||
|
Returns 0 on success, or appropriate error code on failure.
|
||||||
|
|
||||||
struct hwspinlock *hwspin_lock_unregister(unsigned int id);
|
int hwspin_lock_unregister(struct hwspinlock_device *bank);
|
||||||
- to be called from the underlying vendor-specific implementation, in order
|
- to be called from the underlying vendor-specific implementation, in order
|
||||||
to unregister an existing (and unused) hwspinlock instance.
|
to unregister an hwspinlock device (which is usually a bank of numerous
|
||||||
Can be called from an atomic context (will not sleep) but not from
|
locks).
|
||||||
within interrupt context.
|
Should be called from a process context (this function might sleep).
|
||||||
Returns the address of hwspinlock on success, or NULL on error (e.g.
|
Returns the address of hwspinlock on success, or NULL on error (e.g.
|
||||||
if the hwspinlock is sill in use).
|
if the hwspinlock is sill in use).
|
||||||
|
|
||||||
5. struct hwspinlock
|
5. Important structs
|
||||||
|
|
||||||
This struct represents an hwspinlock instance. It is registered by the
|
struct hwspinlock_device is a device which usually contains a bank
|
||||||
underlying hwspinlock implementation using the hwspin_lock_register() API.
|
of hardware locks. It is registered by the underlying hwspinlock
|
||||||
|
implementation using the hwspin_lock_register() API.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct hwspinlock - vendor-specific hwspinlock implementation
|
* struct hwspinlock_device - a device which usually spans numerous hwspinlocks
|
||||||
*
|
* @dev: underlying device, will be used to invoke runtime PM api
|
||||||
* @dev: underlying device, will be used with runtime PM api
|
* @ops: platform-specific hwspinlock handlers
|
||||||
* @ops: vendor-specific hwspinlock handlers
|
* @base_id: id index of the first lock in this device
|
||||||
* @id: a global, unique, system-wide, index of the lock.
|
* @num_locks: number of locks in this device
|
||||||
* @lock: initialized and used by hwspinlock core
|
* @lock: dynamically allocated array of 'struct hwspinlock'
|
||||||
* @owner: underlying implementation module, used to maintain module ref count
|
|
||||||
*/
|
*/
|
||||||
struct hwspinlock {
|
struct hwspinlock_device {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
const struct hwspinlock_ops *ops;
|
const struct hwspinlock_ops *ops;
|
||||||
int id;
|
int base_id;
|
||||||
spinlock_t lock;
|
int num_locks;
|
||||||
struct module *owner;
|
struct hwspinlock lock[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
The underlying implementation is responsible to assign the dev, ops, id and
|
struct hwspinlock_device contains an array of hwspinlock structs, each
|
||||||
owner members. The lock member, OTOH, is initialized and used by the hwspinlock
|
of which represents a single hardware lock:
|
||||||
core.
|
|
||||||
|
/**
|
||||||
|
* struct hwspinlock - this struct represents a single hwspinlock instance
|
||||||
|
* @bank: the hwspinlock_device structure which owns this lock
|
||||||
|
* @lock: initialized and used by hwspinlock core
|
||||||
|
* @priv: private data, owned by the underlying platform-specific hwspinlock drv
|
||||||
|
*/
|
||||||
|
struct hwspinlock {
|
||||||
|
struct hwspinlock_device *bank;
|
||||||
|
spinlock_t lock;
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
When registering a bank of locks, the hwspinlock driver only needs to
|
||||||
|
set the priv members of the locks. The rest of the members are set and
|
||||||
|
initialized by the hwspinlock core itself.
|
||||||
|
|
||||||
6. Implementation callbacks
|
6. Implementation callbacks
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,10 @@ byte. But this time, the data is a complete word (16 bits).
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P
|
S Addr Wr [A] Comm [A] S Addr Rd [A] [DataLow] A [DataHigh] NA P
|
||||||
|
|
||||||
|
Note the convenience function i2c_smbus_read_word_swapped is
|
||||||
|
available for reads where the two data bytes are the other way
|
||||||
|
around (not SMBus compliant, but very popular.)
|
||||||
|
|
||||||
|
|
||||||
SMBus Write Byte: i2c_smbus_write_byte_data()
|
SMBus Write Byte: i2c_smbus_write_byte_data()
|
||||||
==============================================
|
==============================================
|
||||||
|
@ -108,6 +112,10 @@ specified through the Comm byte.
|
||||||
|
|
||||||
S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P
|
S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P
|
||||||
|
|
||||||
|
Note the convenience function i2c_smbus_write_word_swapped is
|
||||||
|
available for writes where the two data bytes are the other way
|
||||||
|
around (not SMBus compliant, but very popular.)
|
||||||
|
|
||||||
|
|
||||||
SMBus Process Call: i2c_smbus_process_call()
|
SMBus Process Call: i2c_smbus_process_call()
|
||||||
=============================================
|
=============================================
|
||||||
|
|
|
@ -16,15 +16,28 @@ Contents
|
||||||
|
|
||||||
1. Introduction
|
1. Introduction
|
||||||
2. Extra knobs
|
2. Extra knobs
|
||||||
3. Hardware version 1
|
3. Differentiating hardware versions
|
||||||
3.1 Registers
|
4. Hardware version 1
|
||||||
3.2 Native relative mode 4 byte packet format
|
|
||||||
3.3 Native absolute mode 4 byte packet format
|
|
||||||
4. Hardware version 2
|
|
||||||
4.1 Registers
|
4.1 Registers
|
||||||
4.2 Native absolute mode 6 byte packet format
|
4.2 Native relative mode 4 byte packet format
|
||||||
4.2.1 One finger touch
|
4.3 Native absolute mode 4 byte packet format
|
||||||
4.2.2 Two finger touch
|
5. Hardware version 2
|
||||||
|
5.1 Registers
|
||||||
|
5.2 Native absolute mode 6 byte packet format
|
||||||
|
5.2.1 Parity checking and packet re-synchronization
|
||||||
|
5.2.2 One/Three finger touch
|
||||||
|
5.2.3 Two finger touch
|
||||||
|
6. Hardware version 3
|
||||||
|
6.1 Registers
|
||||||
|
6.2 Native absolute mode 6 byte packet format
|
||||||
|
6.2.1 One/Three finger touch
|
||||||
|
6.2.2 Two finger touch
|
||||||
|
7. Hardware version 4
|
||||||
|
7.1 Registers
|
||||||
|
7.2 Native absolute mode 6 byte packet format
|
||||||
|
7.2.1 Status packet
|
||||||
|
7.2.2 Head packet
|
||||||
|
7.2.3 Motion packet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -375,7 +388,7 @@ For all the other ones, there are just a few constant bits:
|
||||||
|
|
||||||
In case an error is detected, all the packets are shifted by one (and packet[0] is discarded).
|
In case an error is detected, all the packets are shifted by one (and packet[0] is discarded).
|
||||||
|
|
||||||
5.2.1 One/Three finger touch
|
5.2.2 One/Three finger touch
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
byte 0:
|
byte 0:
|
||||||
|
@ -384,19 +397,19 @@ byte 0:
|
||||||
n1 n0 w3 w2 . . R L
|
n1 n0 w3 w2 . . R L
|
||||||
|
|
||||||
L, R = 1 when Left, Right mouse button pressed
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
n1..n0 = numbers of fingers on touchpad
|
n1..n0 = number of fingers on touchpad
|
||||||
|
|
||||||
byte 1:
|
byte 1:
|
||||||
|
|
||||||
bit 7 6 5 4 3 2 1 0
|
bit 7 6 5 4 3 2 1 0
|
||||||
p7 p6 p5 p4 . x10 x9 x8
|
p7 p6 p5 p4 x11 x10 x9 x8
|
||||||
|
|
||||||
byte 2:
|
byte 2:
|
||||||
|
|
||||||
bit 7 6 5 4 3 2 1 0
|
bit 7 6 5 4 3 2 1 0
|
||||||
x7 x6 x5 x4 x3 x2 x1 x0
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
|
||||||
x10..x0 = absolute x value (horizontal)
|
x11..x0 = absolute x value (horizontal)
|
||||||
|
|
||||||
byte 3:
|
byte 3:
|
||||||
|
|
||||||
|
@ -420,7 +433,7 @@ byte 3:
|
||||||
byte 4:
|
byte 4:
|
||||||
|
|
||||||
bit 7 6 5 4 3 2 1 0
|
bit 7 6 5 4 3 2 1 0
|
||||||
p3 p1 p2 p0 . . y9 y8
|
p3 p1 p2 p0 y11 y10 y9 y8
|
||||||
|
|
||||||
p7..p0 = pressure (not EF113)
|
p7..p0 = pressure (not EF113)
|
||||||
|
|
||||||
|
@ -429,10 +442,10 @@ byte 5:
|
||||||
bit 7 6 5 4 3 2 1 0
|
bit 7 6 5 4 3 2 1 0
|
||||||
y7 y6 y5 y4 y3 y2 y1 y0
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
y9..y0 = absolute y value (vertical)
|
y11..y0 = absolute y value (vertical)
|
||||||
|
|
||||||
|
|
||||||
4.2.2 Two finger touch
|
5.2.3 Two finger touch
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Note that the two pairs of coordinates are not exactly the coordinates of the
|
Note that the two pairs of coordinates are not exactly the coordinates of the
|
||||||
|
@ -446,7 +459,7 @@ byte 0:
|
||||||
n1 n0 ay8 ax8 . . R L
|
n1 n0 ay8 ax8 . . R L
|
||||||
|
|
||||||
L, R = 1 when Left, Right mouse button pressed
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
n1..n0 = numbers of fingers on touchpad
|
n1..n0 = number of fingers on touchpad
|
||||||
|
|
||||||
byte 1:
|
byte 1:
|
||||||
|
|
||||||
|
@ -480,3 +493,253 @@ byte 5:
|
||||||
by7 by8 by5 by4 by3 by2 by1 by0
|
by7 by8 by5 by4 by3 by2 by1 by0
|
||||||
|
|
||||||
by8..by0 = upper-right finger absolute y value
|
by8..by0 = upper-right finger absolute y value
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
6. Hardware version 3
|
||||||
|
==================
|
||||||
|
|
||||||
|
6.1 Registers
|
||||||
|
~~~~~~~~~
|
||||||
|
* reg_10
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
0 0 0 0 0 0 0 A
|
||||||
|
|
||||||
|
A: 1 = enable absolute tracking
|
||||||
|
|
||||||
|
6.2 Native absolute mode 6 byte packet format
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
1 and 3 finger touch shares the same 6-byte packet format, except that
|
||||||
|
3 finger touch only reports the position of the center of all three fingers.
|
||||||
|
|
||||||
|
Firmware would send 12 bytes of data for 2 finger touch.
|
||||||
|
|
||||||
|
Note on debounce:
|
||||||
|
In case the box has unstable power supply or other electricity issues, or
|
||||||
|
when number of finger changes, F/W would send "debounce packet" to inform
|
||||||
|
driver that the hardware is in debounce status.
|
||||||
|
The debouce packet has the following signature:
|
||||||
|
byte 0: 0xc4
|
||||||
|
byte 1: 0xff
|
||||||
|
byte 2: 0xff
|
||||||
|
byte 3: 0x02
|
||||||
|
byte 4: 0xff
|
||||||
|
byte 5: 0xff
|
||||||
|
When we encounter this kind of packet, we just ignore it.
|
||||||
|
|
||||||
|
6.2.1 One/Three finger touch
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
byte 0:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
n1 n0 w3 w2 0 1 R L
|
||||||
|
|
||||||
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
|
n1..n0 = number of fingers on touchpad
|
||||||
|
|
||||||
|
byte 1:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
p7 p6 p5 p4 x11 x10 x9 x8
|
||||||
|
|
||||||
|
byte 2:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
|
||||||
|
x11..x0 = absolute x value (horizontal)
|
||||||
|
|
||||||
|
byte 3:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
0 0 w1 w0 0 0 1 0
|
||||||
|
|
||||||
|
w3..w0 = width of the finger touch
|
||||||
|
|
||||||
|
byte 4:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
p3 p1 p2 p0 y11 y10 y9 y8
|
||||||
|
|
||||||
|
p7..p0 = pressure
|
||||||
|
|
||||||
|
byte 5:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
|
y11..y0 = absolute y value (vertical)
|
||||||
|
|
||||||
|
6.2.2 Two finger touch
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The packet format is exactly the same for two finger touch, except the hardware
|
||||||
|
sends two 6 byte packets. The first packet contains data for the first finger,
|
||||||
|
the second packet has data for the second finger. So for two finger touch a
|
||||||
|
total of 12 bytes are sent.
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
7. Hardware version 4
|
||||||
|
==================
|
||||||
|
|
||||||
|
7.1 Registers
|
||||||
|
~~~~~~~~~
|
||||||
|
* reg_07
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
0 0 0 0 0 0 0 A
|
||||||
|
|
||||||
|
A: 1 = enable absolute tracking
|
||||||
|
|
||||||
|
7.2 Native absolute mode 6 byte packet format
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
v4 hardware is a true multitouch touchpad, capable of tracking up to 5 fingers.
|
||||||
|
Unfortunately, due to PS/2's limited bandwidth, its packet format is rather
|
||||||
|
complex.
|
||||||
|
|
||||||
|
Whenever the numbers or identities of the fingers changes, the hardware sends a
|
||||||
|
status packet to indicate how many and which fingers is on touchpad, followed by
|
||||||
|
head packets or motion packets. A head packet contains data of finger id, finger
|
||||||
|
position (absolute x, y values), width, and pressure. A motion packet contains
|
||||||
|
two fingers' position delta.
|
||||||
|
|
||||||
|
For example, when status packet tells there are 2 fingers on touchpad, then we
|
||||||
|
can expect two following head packets. If the finger status doesn't change,
|
||||||
|
the following packets would be motion packets, only sending delta of finger
|
||||||
|
position, until we receive a status packet.
|
||||||
|
|
||||||
|
One exception is one finger touch. when a status packet tells us there is only
|
||||||
|
one finger, the hardware would just send head packets afterwards.
|
||||||
|
|
||||||
|
7.2.1 Status packet
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
byte 0:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
. . . . 0 1 R L
|
||||||
|
|
||||||
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
|
|
||||||
|
byte 1:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
. . . ft4 ft3 ft2 ft1 ft0
|
||||||
|
|
||||||
|
ft4 ft3 ft2 ft1 ft0 ftn = 1 when finger n is on touchpad
|
||||||
|
|
||||||
|
byte 2: not used
|
||||||
|
|
||||||
|
byte 3:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
. . . 1 0 0 0 0
|
||||||
|
|
||||||
|
constant bits
|
||||||
|
|
||||||
|
byte 4:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
p . . . . . . .
|
||||||
|
|
||||||
|
p = 1 for palm
|
||||||
|
|
||||||
|
byte 5: not used
|
||||||
|
|
||||||
|
7.2.2 Head packet
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
byte 0:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
w3 w2 w1 w0 0 1 R L
|
||||||
|
|
||||||
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
|
w3..w0 = finger width (spans how many trace lines)
|
||||||
|
|
||||||
|
byte 1:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
p7 p6 p5 p4 x11 x10 x9 x8
|
||||||
|
|
||||||
|
byte 2:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
|
||||||
|
x11..x0 = absolute x value (horizontal)
|
||||||
|
|
||||||
|
byte 3:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
id2 id1 id0 1 0 0 0 1
|
||||||
|
|
||||||
|
id2..id0 = finger id
|
||||||
|
|
||||||
|
byte 4:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
p3 p1 p2 p0 y11 y10 y9 y8
|
||||||
|
|
||||||
|
p7..p0 = pressure
|
||||||
|
|
||||||
|
byte 5:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
|
y11..y0 = absolute y value (vertical)
|
||||||
|
|
||||||
|
7.2.3 Motion packet
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
byte 0:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
id2 id1 id0 w 0 1 R L
|
||||||
|
|
||||||
|
L, R = 1 when Left, Right mouse button pressed
|
||||||
|
id2..id0 = finger id
|
||||||
|
w = 1 when delta overflows (> 127 or < -128), in this case
|
||||||
|
firmware sends us (delta x / 5) and (delta y / 5)
|
||||||
|
|
||||||
|
byte 1:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
|
||||||
|
x7..x0 = delta x (two's complement)
|
||||||
|
|
||||||
|
byte 2:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
|
y7..y0 = delta y (two's complement)
|
||||||
|
|
||||||
|
byte 3:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
id2 id1 id0 1 0 0 1 0
|
||||||
|
|
||||||
|
id2..id0 = finger id
|
||||||
|
|
||||||
|
byte 4:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
|
||||||
|
x7..x0 = delta x (two's complement)
|
||||||
|
|
||||||
|
byte 5:
|
||||||
|
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
|
y7..y0 = delta y (two's complement)
|
||||||
|
|
||||||
|
byte 0 ~ 2 for one finger
|
||||||
|
byte 3 ~ 5 for another
|
||||||
|
|
|
@ -65,6 +65,20 @@ the full state of each initiated contact has to reside in the receiving
|
||||||
end. Upon receiving an MT event, one simply updates the appropriate
|
end. Upon receiving an MT event, one simply updates the appropriate
|
||||||
attribute of the current slot.
|
attribute of the current slot.
|
||||||
|
|
||||||
|
Some devices identify and/or track more contacts than they can report to the
|
||||||
|
driver. A driver for such a device should associate one type B slot with each
|
||||||
|
contact that is reported by the hardware. Whenever the identity of the
|
||||||
|
contact associated with a slot changes, the driver should invalidate that
|
||||||
|
slot by changing its ABS_MT_TRACKING_ID. If the hardware signals that it is
|
||||||
|
tracking more contacts than it is currently reporting, the driver should use
|
||||||
|
a BTN_TOOL_*TAP event to inform userspace of the total number of contacts
|
||||||
|
being tracked by the hardware at that moment. The driver should do this by
|
||||||
|
explicitly sending the corresponding BTN_TOOL_*TAP event and setting
|
||||||
|
use_count to false when calling input_mt_report_pointer_emulation().
|
||||||
|
The driver should only advertise as many slots as the hardware can report.
|
||||||
|
Userspace can detect that a driver can report more total contacts than slots
|
||||||
|
by noting that the largest supported BTN_TOOL_*TAP event is larger than the
|
||||||
|
total number of type B slots reported in the absinfo for the ABS_MT_SLOT axis.
|
||||||
|
|
||||||
Protocol Example A
|
Protocol Example A
|
||||||
------------------
|
------------------
|
||||||
|
|
|
@ -307,6 +307,19 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
behaviour to be specified. Bit 0 enables warnings,
|
behaviour to be specified. Bit 0 enables warnings,
|
||||||
bit 1 enables fixups, and bit 2 sends a segfault.
|
bit 1 enables fixups, and bit 2 sends a segfault.
|
||||||
|
|
||||||
|
align_va_addr= [X86-64]
|
||||||
|
Align virtual addresses by clearing slice [14:12] when
|
||||||
|
allocating a VMA at process creation time. This option
|
||||||
|
gives you up to 3% performance improvement on AMD F15h
|
||||||
|
machines (where it is enabled by default) for a
|
||||||
|
CPU-intensive style benchmark, and it can vary highly in
|
||||||
|
a microbenchmark depending on workload and compiler.
|
||||||
|
|
||||||
|
1: only for 32-bit processes
|
||||||
|
2: only for 64-bit processes
|
||||||
|
on: enable for both 32- and 64-bit processes
|
||||||
|
off: disable for both 32- and 64-bit processes
|
||||||
|
|
||||||
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:
|
||||||
|
@ -728,10 +741,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
See Documentation/block/cfq-iosched.txt and
|
See Documentation/block/cfq-iosched.txt and
|
||||||
Documentation/block/deadline-iosched.txt for details.
|
Documentation/block/deadline-iosched.txt for details.
|
||||||
|
|
||||||
elfcorehdr= [IA-64,PPC,SH,X86]
|
elfcorehdr=[size[KMG]@]offset[KMG] [IA64,PPC,SH,X86,S390]
|
||||||
Specifies physical address of start of kernel core
|
Specifies physical address of start of kernel core
|
||||||
image elf header. Generally kexec loader will
|
image elf header and optionally the size. Generally
|
||||||
pass this option to capture kernel.
|
kexec loader will pass this option to capture kernel.
|
||||||
See Documentation/kdump/kdump.txt for details.
|
See Documentation/kdump/kdump.txt for details.
|
||||||
|
|
||||||
enable_mtrr_cleanup [X86]
|
enable_mtrr_cleanup [X86]
|
||||||
|
@ -960,6 +973,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
ignore_loglevel [KNL]
|
ignore_loglevel [KNL]
|
||||||
Ignore loglevel setting - this will print /all/
|
Ignore loglevel setting - this will print /all/
|
||||||
kernel messages to the console. Useful for debugging.
|
kernel messages to the console. Useful for debugging.
|
||||||
|
We also add it as printk module parameter, so users
|
||||||
|
could change it dynamically, usually by
|
||||||
|
/sys/module/printk/parameters/ignore_loglevel.
|
||||||
|
|
||||||
ihash_entries= [KNL]
|
ihash_entries= [KNL]
|
||||||
Set number of hash buckets for inode cache.
|
Set number of hash buckets for inode cache.
|
||||||
|
@ -1188,6 +1204,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
[KVM,Intel] Disable FlexPriority feature (TPR shadow).
|
[KVM,Intel] Disable FlexPriority feature (TPR shadow).
|
||||||
Default is 1 (enabled)
|
Default is 1 (enabled)
|
||||||
|
|
||||||
|
kvm-intel.nested=
|
||||||
|
[KVM,Intel] Enable VMX nesting (nVMX).
|
||||||
|
Default is 0 (disabled)
|
||||||
|
|
||||||
kvm-intel.unrestricted_guest=
|
kvm-intel.unrestricted_guest=
|
||||||
[KVM,Intel] Disable unrestricted guest feature
|
[KVM,Intel] Disable unrestricted guest feature
|
||||||
(virtualized real and unpaged mode) on capable
|
(virtualized real and unpaged mode) on capable
|
||||||
|
@ -1649,6 +1669,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
debugging driver suspend/resume hooks). This may
|
debugging driver suspend/resume hooks). This may
|
||||||
not work reliably with all consoles, but is known
|
not work reliably with all consoles, but is known
|
||||||
to work with serial and VGA consoles.
|
to work with serial and VGA consoles.
|
||||||
|
To facilitate more flexible debugging, we also add
|
||||||
|
console_suspend, a printk module parameter to control
|
||||||
|
it. Users could use console_suspend (usually
|
||||||
|
/sys/module/printk/parameters/console_suspend) to
|
||||||
|
turn on/off it dynamically.
|
||||||
|
|
||||||
noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
|
noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
|
||||||
caches in the slab allocator. Saves per-node memory,
|
caches in the slab allocator. Saves per-node memory,
|
||||||
|
@ -1784,6 +1809,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
noresidual [PPC] Don't use residual data on PReP machines.
|
noresidual [PPC] Don't use residual data on PReP machines.
|
||||||
|
|
||||||
|
nordrand [X86] Disable the direct use of the RDRAND
|
||||||
|
instruction even if it is supported by the
|
||||||
|
processor. RDRAND is still available to user
|
||||||
|
space applications.
|
||||||
|
|
||||||
noresume [SWSUSP] Disables resume and restores original swap
|
noresume [SWSUSP] Disables resume and restores original swap
|
||||||
space.
|
space.
|
||||||
|
|
||||||
|
|
|
@ -411,9 +411,9 @@ event code Key Notes
|
||||||
|
|
||||||
0x1004 0x03 FN+F4 Sleep button (ACPI sleep button
|
0x1004 0x03 FN+F4 Sleep button (ACPI sleep button
|
||||||
semantics, i.e. sleep-to-RAM).
|
semantics, i.e. sleep-to-RAM).
|
||||||
It is always generate some kind
|
It always generates some kind
|
||||||
of event, either the hot key
|
of event, either the hot key
|
||||||
event or a ACPI sleep button
|
event or an ACPI sleep button
|
||||||
event. The firmware may
|
event. The firmware may
|
||||||
refuse to generate further FN+F4
|
refuse to generate further FN+F4
|
||||||
key presses until a S3 or S4 ACPI
|
key presses until a S3 or S4 ACPI
|
||||||
|
|
|
@ -61,8 +61,8 @@ Hardware accelerated blink of LEDs
|
||||||
Some LEDs can be programmed to blink without any CPU interaction. To
|
Some LEDs can be programmed to blink without any CPU interaction. To
|
||||||
support this feature, a LED driver can optionally implement the
|
support this feature, a LED driver can optionally implement the
|
||||||
blink_set() function (see <linux/leds.h>). To set an LED to blinking,
|
blink_set() function (see <linux/leds.h>). To set an LED to blinking,
|
||||||
however, it is better to use use the API function led_blink_set(),
|
however, it is better to use the API function led_blink_set(), as it
|
||||||
as it will check and implement software fallback if necessary.
|
will check and implement software fallback if necessary.
|
||||||
|
|
||||||
To turn off blinking again, use the API function led_brightness_set()
|
To turn off blinking again, use the API function led_brightness_set()
|
||||||
as that will not just set the LED brightness but also stop any software
|
as that will not just set the LED brightness but also stop any software
|
||||||
|
|
|
@ -15,6 +15,23 @@ amemthresh - INTEGER
|
||||||
enabled and the variable is automatically set to 2, otherwise
|
enabled and the variable is automatically set to 2, otherwise
|
||||||
the strategy is disabled and the variable is set to 1.
|
the strategy is disabled and the variable is set to 1.
|
||||||
|
|
||||||
|
conntrack - BOOLEAN
|
||||||
|
0 - disabled (default)
|
||||||
|
not 0 - enabled
|
||||||
|
|
||||||
|
If set, maintain connection tracking entries for
|
||||||
|
connections handled by IPVS.
|
||||||
|
|
||||||
|
This should be enabled if connections handled by IPVS are to be
|
||||||
|
also handled by stateful firewall rules. That is, iptables rules
|
||||||
|
that make use of connection tracking. It is a performance
|
||||||
|
optimisation to disable this setting otherwise.
|
||||||
|
|
||||||
|
Connections handled by the IPVS FTP application module
|
||||||
|
will have connection tracking entries regardless of this setting.
|
||||||
|
|
||||||
|
Only available when IPVS is compiled with CONFIG_IP_VS_NFCT enabled.
|
||||||
|
|
||||||
cache_bypass - BOOLEAN
|
cache_bypass - BOOLEAN
|
||||||
0 - disabled (default)
|
0 - disabled (default)
|
||||||
not 0 - enabled
|
not 0 - enabled
|
||||||
|
@ -39,7 +56,7 @@ debug_level - INTEGER
|
||||||
11 - IPVS packet handling (ip_vs_in/ip_vs_out)
|
11 - IPVS packet handling (ip_vs_in/ip_vs_out)
|
||||||
12 or more - packet traversal
|
12 or more - packet traversal
|
||||||
|
|
||||||
Only available when IPVS is compiled with the CONFIG_IPVS_DEBUG
|
Only available when IPVS is compiled with CONFIG_IP_VS_DEBUG enabled.
|
||||||
|
|
||||||
Higher debugging levels include the messages for lower debugging
|
Higher debugging levels include the messages for lower debugging
|
||||||
levels, so setting debug level 2, includes level 0, 1 and 2
|
levels, so setting debug level 2, includes level 0, 1 and 2
|
||||||
|
@ -123,13 +140,11 @@ nat_icmp_send - BOOLEAN
|
||||||
secure_tcp - INTEGER
|
secure_tcp - INTEGER
|
||||||
0 - disabled (default)
|
0 - disabled (default)
|
||||||
|
|
||||||
The secure_tcp defense is to use a more complicated state
|
The secure_tcp defense is to use a more complicated TCP state
|
||||||
transition table and some possible short timeouts of each
|
transition table. For VS/NAT, it also delays entering the
|
||||||
state. In the VS/NAT, it delays the entering the ESTABLISHED
|
TCP ESTABLISHED state until the three way handshake is completed.
|
||||||
until the real server starts to send data and ACK packet
|
|
||||||
(after 3-way handshake).
|
|
||||||
|
|
||||||
The value definition is the same as that of drop_entry or
|
The value definition is the same as that of drop_entry and
|
||||||
drop_packet.
|
drop_packet.
|
||||||
|
|
||||||
sync_threshold - INTEGER
|
sync_threshold - INTEGER
|
||||||
|
@ -141,3 +156,36 @@ sync_threshold - INTEGER
|
||||||
synchronized, every time the number of its incoming packets
|
synchronized, every time the number of its incoming packets
|
||||||
modulus 50 equals the threshold. The range of the threshold is
|
modulus 50 equals the threshold. The range of the threshold is
|
||||||
from 0 to 49.
|
from 0 to 49.
|
||||||
|
|
||||||
|
snat_reroute - BOOLEAN
|
||||||
|
0 - disabled
|
||||||
|
not 0 - enabled (default)
|
||||||
|
|
||||||
|
If enabled, recalculate the route of SNATed packets from
|
||||||
|
realservers so that they are routed as if they originate from the
|
||||||
|
director. Otherwise they are routed as if they are forwarded by the
|
||||||
|
director.
|
||||||
|
|
||||||
|
If policy routing is in effect then it is possible that the route
|
||||||
|
of a packet originating from a director is routed differently to a
|
||||||
|
packet being forwarded by the director.
|
||||||
|
|
||||||
|
If policy routing is not in effect then the recalculated route will
|
||||||
|
always be the same as the original route so it is an optimisation
|
||||||
|
to disable snat_reroute and avoid the recalculation.
|
||||||
|
|
||||||
|
sync_version - INTEGER
|
||||||
|
default 1
|
||||||
|
|
||||||
|
The version of the synchronisation protocol used when sending
|
||||||
|
synchronisation messages.
|
||||||
|
|
||||||
|
0 selects the original synchronisation protocol (version 0). This
|
||||||
|
should be used when sending synchronisation messages to a legacy
|
||||||
|
system that only understands the original synchronisation protocol.
|
||||||
|
|
||||||
|
1 selects the current synchronisation protocol (version 1). This
|
||||||
|
should be used where possible.
|
||||||
|
|
||||||
|
Kernels with this sync_version entry are able to receive messages
|
||||||
|
of both version 1 and version 2 of the synchronisation protocol.
|
||||||
|
|
|
@ -263,6 +263,8 @@ characters, each representing a particular tainted value.
|
||||||
12: 'I' if the kernel is working around a severe bug in the platform
|
12: 'I' if the kernel is working around a severe bug in the platform
|
||||||
firmware (BIOS or similar).
|
firmware (BIOS or similar).
|
||||||
|
|
||||||
|
13: 'O' if an externally-built ("out-of-tree") module has been loaded.
|
||||||
|
|
||||||
The primary reason for the 'Tainted: ' string is to tell kernel
|
The primary reason for the 'Tainted: ' string is to tell kernel
|
||||||
debuggers if this is a clean kernel or if anything unusual has
|
debuggers if this is a clean kernel or if anything unusual has
|
||||||
occurred. Tainting is permanent: even if an offending module is
|
occurred. Tainting is permanent: even if an offending module is
|
||||||
|
|
|
@ -22,12 +22,12 @@ try_to_freeze_tasks() that sets TIF_FREEZE for all of the freezable tasks and
|
||||||
either wakes them up, if they are kernel threads, or sends fake signals to them,
|
either wakes them up, if they are kernel threads, or sends fake signals to them,
|
||||||
if they are user space processes. A task that has TIF_FREEZE set, should react
|
if they are user space processes. A task that has TIF_FREEZE set, should react
|
||||||
to it by calling the function called refrigerator() (defined in
|
to it by calling the function called refrigerator() (defined in
|
||||||
kernel/power/process.c), which sets the task's PF_FROZEN flag, changes its state
|
kernel/freezer.c), which sets the task's PF_FROZEN flag, changes its state
|
||||||
to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it.
|
to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it.
|
||||||
Then, we say that the task is 'frozen' and therefore the set of functions
|
Then, we say that the task is 'frozen' and therefore the set of functions
|
||||||
handling this mechanism is referred to as 'the freezer' (these functions are
|
handling this mechanism is referred to as 'the freezer' (these functions are
|
||||||
defined in kernel/power/process.c and include/linux/freezer.h). User space
|
defined in kernel/power/process.c, kernel/freezer.c & include/linux/freezer.h).
|
||||||
processes are generally frozen before kernel threads.
|
User space processes are generally frozen before kernel threads.
|
||||||
|
|
||||||
It is not recommended to call refrigerator() directly. Instead, it is
|
It is not recommended to call refrigerator() directly. Instead, it is
|
||||||
recommended to use the try_to_freeze() function (defined in
|
recommended to use the try_to_freeze() function (defined in
|
||||||
|
@ -95,7 +95,7 @@ after the memory for the image has been freed, we don't want tasks to allocate
|
||||||
additional memory and we prevent them from doing that by freezing them earlier.
|
additional memory and we prevent them from doing that by freezing them earlier.
|
||||||
[Of course, this also means that device drivers should not allocate substantial
|
[Of course, this also means that device drivers should not allocate substantial
|
||||||
amounts of memory from their .suspend() callbacks before hibernation, but this
|
amounts of memory from their .suspend() callbacks before hibernation, but this
|
||||||
is e separate issue.]
|
is a separate issue.]
|
||||||
|
|
||||||
3. The third reason is to prevent user space processes and some kernel threads
|
3. The third reason is to prevent user space processes and some kernel threads
|
||||||
from interfering with the suspending and resuming of devices. A user space
|
from interfering with the suspending and resuming of devices. A user space
|
||||||
|
|
|
@ -16,7 +16,7 @@ initialisation code by creating a struct regulator_consumer_supply for
|
||||||
each regulator.
|
each regulator.
|
||||||
|
|
||||||
struct regulator_consumer_supply {
|
struct regulator_consumer_supply {
|
||||||
struct device *dev; /* consumer */
|
const char *dev_name; /* consumer dev_name() */
|
||||||
const char *supply; /* consumer supply - e.g. "vcc" */
|
const char *supply; /* consumer supply - e.g. "vcc" */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,13 +24,13 @@ e.g. for the machine above
|
||||||
|
|
||||||
static struct regulator_consumer_supply regulator1_consumers[] = {
|
static struct regulator_consumer_supply regulator1_consumers[] = {
|
||||||
{
|
{
|
||||||
.dev = &platform_consumerB_device.dev,
|
.dev_name = "dev_name(consumer B)",
|
||||||
.supply = "Vcc",
|
.supply = "Vcc",
|
||||||
},};
|
},};
|
||||||
|
|
||||||
static struct regulator_consumer_supply regulator2_consumers[] = {
|
static struct regulator_consumer_supply regulator2_consumers[] = {
|
||||||
{
|
{
|
||||||
.dev = &platform_consumerA_device.dev,
|
.dev = "dev_name(consumer A"),
|
||||||
.supply = "Vcc",
|
.supply = "Vcc",
|
||||||
},};
|
},};
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ to their supply regulator :-
|
||||||
|
|
||||||
static struct regulator_init_data regulator1_data = {
|
static struct regulator_init_data regulator1_data = {
|
||||||
.constraints = {
|
.constraints = {
|
||||||
|
.name = "Regulator-1",
|
||||||
.min_uV = 3300000,
|
.min_uV = 3300000,
|
||||||
.max_uV = 3300000,
|
.max_uV = 3300000,
|
||||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||||
|
@ -51,13 +52,19 @@ static struct regulator_init_data regulator1_data = {
|
||||||
.consumer_supplies = regulator1_consumers,
|
.consumer_supplies = regulator1_consumers,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
The name field should be set to something that is usefully descriptive
|
||||||
|
for the board for configuration of supplies for other regulators and
|
||||||
|
for use in logging and other diagnostic output. Normally the name
|
||||||
|
used for the supply rail in the schematic is a good choice. If no
|
||||||
|
name is provided then the subsystem will choose one.
|
||||||
|
|
||||||
Regulator-1 supplies power to Regulator-2. This relationship must be registered
|
Regulator-1 supplies power to Regulator-2. This relationship must be registered
|
||||||
with the core so that Regulator-1 is also enabled when Consumer A enables its
|
with the core so that Regulator-1 is also enabled when Consumer A enables its
|
||||||
supply (Regulator-2). The supply regulator is set by the supply_regulator
|
supply (Regulator-2). The supply regulator is set by the supply_regulator
|
||||||
field below:-
|
field below and co:-
|
||||||
|
|
||||||
static struct regulator_init_data regulator2_data = {
|
static struct regulator_init_data regulator2_data = {
|
||||||
.supply_regulator = "regulator_name",
|
.supply_regulator = "Regulator-1",
|
||||||
.constraints = {
|
.constraints = {
|
||||||
.min_uV = 1800000,
|
.min_uV = 1800000,
|
||||||
.max_uV = 2000000,
|
.max_uV = 2000000,
|
||||||
|
|
|
@ -789,6 +789,16 @@ will behave normally, not taking the autosuspend delay into account.
|
||||||
Similarly, if the power.use_autosuspend field isn't set then the autosuspend
|
Similarly, if the power.use_autosuspend field isn't set then the autosuspend
|
||||||
helper functions will behave just like the non-autosuspend counterparts.
|
helper functions will behave just like the non-autosuspend counterparts.
|
||||||
|
|
||||||
|
Under some circumstances a driver or subsystem may want to prevent a device
|
||||||
|
from autosuspending immediately, even though the usage counter is zero and the
|
||||||
|
autosuspend delay time has expired. If the ->runtime_suspend() callback
|
||||||
|
returns -EAGAIN or -EBUSY, and if the next autosuspend delay expiration time is
|
||||||
|
in the future (as it normally would be if the callback invoked
|
||||||
|
pm_runtime_mark_last_busy()), the PM core will automatically reschedule the
|
||||||
|
autosuspend. The ->runtime_suspend() callback can't do this rescheduling
|
||||||
|
itself because no suspend requests of any kind are accepted while the device is
|
||||||
|
suspending (i.e., while the callback is running).
|
||||||
|
|
||||||
The implementation is well suited for asynchronous use in interrupt contexts.
|
The implementation is well suited for asynchronous use in interrupt contexts.
|
||||||
However such use inevitably involves races, because the PM core can't
|
However such use inevitably involves races, because the PM core can't
|
||||||
synchronize ->runtime_suspend() callbacks with the arrival of I/O requests.
|
synchronize ->runtime_suspend() callbacks with the arrival of I/O requests.
|
||||||
|
|
|
@ -144,7 +144,7 @@ and the default device ID in order to access the device on the active port.
|
||||||
|
|
||||||
After the host has completed enumeration of the entire network it releases
|
After the host has completed enumeration of the entire network it releases
|
||||||
devices by clearing device ID locks (calls rio_clear_locks()). For each endpoint
|
devices by clearing device ID locks (calls rio_clear_locks()). For each endpoint
|
||||||
in the system, it sets the Master Enable bit in the Port General Control CSR
|
in the system, it sets the Discovered bit in the Port General Control CSR
|
||||||
to indicate that enumeration is completed and agents are allowed to execute
|
to indicate that enumeration is completed and agents are allowed to execute
|
||||||
passive discovery of the network.
|
passive discovery of the network.
|
||||||
|
|
||||||
|
|
49
Documentation/rapidio/tsi721.txt
Normal file
49
Documentation/rapidio/tsi721.txt
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
RapidIO subsystem mport driver for IDT Tsi721 PCI Express-to-SRIO bridge.
|
||||||
|
=========================================================================
|
||||||
|
|
||||||
|
I. Overview
|
||||||
|
|
||||||
|
This driver implements all currently defined RapidIO mport callback functions.
|
||||||
|
It supports maintenance read and write operations, inbound and outbound RapidIO
|
||||||
|
doorbells, inbound maintenance port-writes and RapidIO messaging.
|
||||||
|
|
||||||
|
To generate SRIO maintenance transactions this driver uses one of Tsi721 DMA
|
||||||
|
channels. This mechanism provides access to larger range of hop counts and
|
||||||
|
destination IDs without need for changes in outbound window translation.
|
||||||
|
|
||||||
|
RapidIO messaging support uses dedicated messaging channels for each mailbox.
|
||||||
|
For inbound messages this driver uses destination ID matching to forward messages
|
||||||
|
into the corresponding message queue. Messaging callbacks are implemented to be
|
||||||
|
fully compatible with RIONET driver (Ethernet over RapidIO messaging services).
|
||||||
|
|
||||||
|
II. Known problems
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
III. To do
|
||||||
|
|
||||||
|
Add DMA data transfers (non-messaging).
|
||||||
|
Add inbound region (SRIO-to-PCIe) mapping.
|
||||||
|
|
||||||
|
IV. Version History
|
||||||
|
|
||||||
|
1.0.0 - Initial driver release.
|
||||||
|
|
||||||
|
V. License
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Copyright(c) 2011 Integrated Device Technology, Inc. All rights reserved.
|
||||||
|
|
||||||
|
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.
|
|
@ -28,6 +28,8 @@ LICENSE.FlashPoint
|
||||||
- Licence of the Flashpoint driver
|
- Licence of the Flashpoint driver
|
||||||
LICENSE.qla2xxx
|
LICENSE.qla2xxx
|
||||||
- License for QLogic Linux Fibre Channel HBA Driver firmware.
|
- License for QLogic Linux Fibre Channel HBA Driver firmware.
|
||||||
|
LICENSE.qla4xxx
|
||||||
|
- License for QLogic Linux iSCSI HBA Driver.
|
||||||
Mylex.txt
|
Mylex.txt
|
||||||
- info on driver for Mylex adapters
|
- info on driver for Mylex adapters
|
||||||
NinjaSCSI.txt
|
NinjaSCSI.txt
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
|
Release Date : Wed. Oct 5, 2011 17:00:00 PST 2010 -
|
||||||
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
|
Adam Radford
|
||||||
|
Current Version : 00.00.06.12-rc1
|
||||||
|
Old Version : 00.00.05.40-rc1
|
||||||
|
1. Continue booting immediately if FW in FAULT at driver load time.
|
||||||
|
2. Increase default cmds per lun to 256.
|
||||||
|
3. Fix mismatch in megasas_reset_fusion() mutex lock-unlock.
|
||||||
|
4. Remove some un-necessary code.
|
||||||
|
5. Clear state change interrupts for Fusion/Invader.
|
||||||
|
6. Clear FUSION_IN_RESET before enabling interrupts.
|
||||||
|
7. Add support for MegaRAID 9360/9380 12GB/s controllers.
|
||||||
|
8. Add multiple MSI-X vector/multiple reply queue support.
|
||||||
|
9. Add driver workaround for PERC5/1068 kdump kernel panic.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
Release Date : Tue. Jul 26, 2011 17:00:00 PST 2010 -
|
Release Date : Tue. Jul 26, 2011 17:00:00 PST 2010 -
|
||||||
(emaild-id:megaraidlinux@lsi.com)
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
Adam Radford
|
Adam Radford
|
||||||
|
|
310
Documentation/scsi/LICENSE.qla4xxx
Normal file
310
Documentation/scsi/LICENSE.qla4xxx
Normal file
|
@ -0,0 +1,310 @@
|
||||||
|
Copyright (c) 2003-2011 QLogic Corporation
|
||||||
|
QLogic Linux iSCSI HBA Driver
|
||||||
|
|
||||||
|
This program includes a device driver for Linux 3.x.
|
||||||
|
You may modify and redistribute the device driver code under the
|
||||||
|
GNU General Public License (a copy of which is attached hereto as
|
||||||
|
Exhibit A) published by the Free Software Foundation (version 2).
|
||||||
|
|
||||||
|
REGARDLESS OF WHAT LICENSING MECHANISM IS USED OR APPLICABLE,
|
||||||
|
THIS PROGRAM IS PROVIDED BY QLOGIC CORPORATION "AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
USER ACKNOWLEDGES AND AGREES THAT USE OF THIS PROGRAM WILL NOT
|
||||||
|
CREATE OR GIVE GROUNDS FOR A LICENSE BY IMPLICATION, ESTOPPEL, OR
|
||||||
|
OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT,
|
||||||
|
TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN
|
||||||
|
ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN
|
||||||
|
COMBINATION WITH THIS PROGRAM.
|
||||||
|
|
||||||
|
|
||||||
|
EXHIBIT A
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue