Merge branch 'next' into for-linus
This commit is contained in:
commit
aa7eb8e78d
7903 changed files with 475361 additions and 384393 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -57,6 +57,7 @@ modules.builtin
|
||||||
include/config
|
include/config
|
||||||
include/linux/version.h
|
include/linux/version.h
|
||||||
include/generated
|
include/generated
|
||||||
|
arch/*/include/generated
|
||||||
|
|
||||||
# stgit generated dirs
|
# stgit generated dirs
|
||||||
patches-*
|
patches-*
|
||||||
|
|
1
.mailmap
1
.mailmap
|
@ -32,6 +32,7 @@ Brian Avery <b.avery@hp.com>
|
||||||
Brian King <brking@us.ibm.com>
|
Brian King <brking@us.ibm.com>
|
||||||
Christoph Hellwig <hch@lst.de>
|
Christoph Hellwig <hch@lst.de>
|
||||||
Corey Minyard <minyard@acm.org>
|
Corey Minyard <minyard@acm.org>
|
||||||
|
Damian Hobson-Garcia <dhobsong@igel.co.jp>
|
||||||
David Brownell <david-b@pacbell.net>
|
David Brownell <david-b@pacbell.net>
|
||||||
David Woodhouse <dwmw2@shinybook.infradead.org>
|
David Woodhouse <dwmw2@shinybook.infradead.org>
|
||||||
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||||
|
|
18
CREDITS
18
CREDITS
|
@ -328,7 +328,7 @@ S: Haifa, Israel
|
||||||
N: Johannes Berg
|
N: Johannes Berg
|
||||||
E: johannes@sipsolutions.net
|
E: johannes@sipsolutions.net
|
||||||
W: http://johannes.sipsolutions.net/
|
W: http://johannes.sipsolutions.net/
|
||||||
P: 1024D/9AB78CA5 AD02 0176 4E29 C137 1DF6 08D2 FC44 CF86 9AB7 8CA5
|
P: 4096R/7BF9099A C0EB C440 F6DA 091C 884D 8532 E0F3 73F3 7BF9 099A
|
||||||
D: powerpc & 802.11 hacker
|
D: powerpc & 802.11 hacker
|
||||||
|
|
||||||
N: Stephen R. van den Berg (AKA BuGless)
|
N: Stephen R. van den Berg (AKA BuGless)
|
||||||
|
@ -518,6 +518,14 @@ N: Zach Brown
|
||||||
E: zab@zabbo.net
|
E: zab@zabbo.net
|
||||||
D: maestro pci sound
|
D: maestro pci sound
|
||||||
|
|
||||||
|
M: David Brownell
|
||||||
|
D: Kernel engineer, mentor, and friend. Maintained USB EHCI and
|
||||||
|
D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few
|
||||||
|
D: device drivers. His encouragement also helped many engineers get
|
||||||
|
D: started working on the Linux kernel. David passed away in early
|
||||||
|
D: 2011, and will be greatly missed.
|
||||||
|
W: https://lkml.org/lkml/2011/4/5/36
|
||||||
|
|
||||||
N: Gary Brubaker
|
N: Gary Brubaker
|
||||||
E: xavyer@ix.netcom.com
|
E: xavyer@ix.netcom.com
|
||||||
D: USB Serial Empeg Empeg-car Mark I/II Driver
|
D: USB Serial Empeg Empeg-car Mark I/II Driver
|
||||||
|
@ -2943,6 +2951,10 @@ S: Kasarmikatu 11 A4
|
||||||
S: 70110 Kuopio
|
S: 70110 Kuopio
|
||||||
S: Finland
|
S: Finland
|
||||||
|
|
||||||
|
N: Tobias Ringström
|
||||||
|
E: tori@unhappy.mine.nu
|
||||||
|
D: Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver
|
||||||
|
|
||||||
N: Luca Risolia
|
N: Luca Risolia
|
||||||
E: luca.risolia@studio.unibo.it
|
E: luca.risolia@studio.unibo.it
|
||||||
P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4
|
P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4
|
||||||
|
@ -3913,6 +3925,10 @@ S: Flandernstrasse 101
|
||||||
S: D-73732 Esslingen
|
S: D-73732 Esslingen
|
||||||
S: Germany
|
S: Germany
|
||||||
|
|
||||||
|
N: Roman Zippel
|
||||||
|
E: zippel@linux-m68k.org
|
||||||
|
D: AFFS and HFS filesystems, m68k maintainer, new kernel configuration in 2.5
|
||||||
|
|
||||||
N: Leonard N. Zubkoff
|
N: Leonard N. Zubkoff
|
||||||
W: http://www.dandelion.com/Linux/
|
W: http://www.dandelion.com/Linux/
|
||||||
D: BusLogic SCSI driver
|
D: BusLogic SCSI driver
|
||||||
|
|
|
@ -192,10 +192,6 @@ kernel-docs.txt
|
||||||
- listing of various WWW + books that document kernel internals.
|
- listing of various WWW + books that document kernel internals.
|
||||||
kernel-parameters.txt
|
kernel-parameters.txt
|
||||||
- summary listing of command line / boot prompt args for the kernel.
|
- summary listing of command line / boot prompt args for the kernel.
|
||||||
keys-request-key.txt
|
|
||||||
- description of the kernel key request service.
|
|
||||||
keys.txt
|
|
||||||
- description of the kernel key retention service.
|
|
||||||
kobject.txt
|
kobject.txt
|
||||||
- info of the kobject infrastructure of the Linux kernel.
|
- info of the kobject infrastructure of the Linux kernel.
|
||||||
kprobes.txt
|
kprobes.txt
|
||||||
|
@ -294,6 +290,8 @@ scheduler/
|
||||||
- directory with info on the scheduler.
|
- directory with info on the scheduler.
|
||||||
scsi/
|
scsi/
|
||||||
- directory with info on Linux scsi support.
|
- directory with info on Linux scsi support.
|
||||||
|
security/
|
||||||
|
- directory that contains security-related info
|
||||||
serial/
|
serial/
|
||||||
- directory with info on the low level serial API.
|
- directory with info on the low level serial API.
|
||||||
serial-console.txt
|
serial-console.txt
|
||||||
|
@ -328,8 +326,6 @@ sysrq.txt
|
||||||
- info on the magic SysRq key.
|
- info on the magic SysRq key.
|
||||||
telephony/
|
telephony/
|
||||||
- directory with info on telephony (e.g. voice over IP) support.
|
- directory with info on telephony (e.g. voice over IP) support.
|
||||||
uml/
|
|
||||||
- directory with information about User Mode Linux.
|
|
||||||
unicode.txt
|
unicode.txt
|
||||||
- info on the Unicode character/font mapping used in Linux.
|
- info on the Unicode character/font mapping used in Linux.
|
||||||
unshare.txt
|
unshare.txt
|
||||||
|
|
10
Documentation/ABI/obsolete/sysfs-driver-hid-roccat-koneplus
Normal file
10
Documentation/ABI/obsolete/sysfs-driver-hid-roccat-koneplus
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
|
When read, this attribute returns the number of the actual
|
||||||
|
profile. This value is persistent, so its equivalent to the
|
||||||
|
profile that's active when the mouse is powered on next time.
|
||||||
|
When written, this file sets the number of the startup profile
|
||||||
|
and the mouse activates this profile immediately.
|
||||||
|
Please use actual_profile, it does the same thing.
|
|
@ -1,11 +1,10 @@
|
||||||
What: /sys/o2cb symlink
|
What: /sys/o2cb symlink
|
||||||
Date: Dec 2005
|
Date: May 2011
|
||||||
KernelVersion: 2.6.16
|
KernelVersion: 2.6.40
|
||||||
Contact: ocfs2-devel@oss.oracle.com
|
Contact: ocfs2-devel@oss.oracle.com
|
||||||
Description: This is a symlink: /sys/o2cb to /sys/fs/o2cb. The symlink will
|
Description: This is a symlink: /sys/o2cb to /sys/fs/o2cb. The symlink is
|
||||||
be removed when new versions of ocfs2-tools which know to look
|
removed when new versions of ocfs2-tools which know to look
|
||||||
in /sys/fs/o2cb are sufficiently prevalent. Don't code new
|
in /sys/fs/o2cb are sufficiently prevalent. Don't code new
|
||||||
software to look here, it should try /sys/fs/o2cb instead.
|
software to look here, it should try /sys/fs/o2cb instead.
|
||||||
See Documentation/ABI/stable/o2cb for more information on usage.
|
|
||||||
Users: ocfs2-tools. It's sufficient to mail proposed changes to
|
Users: ocfs2-tools. It's sufficient to mail proposed changes to
|
||||||
ocfs2-devel@oss.oracle.com.
|
ocfs2-devel@oss.oracle.com.
|
|
@ -142,3 +142,67 @@ Description:
|
||||||
with the previous I/O request are enabled. When set to 2,
|
with the previous I/O request are enabled. When set to 2,
|
||||||
all merge tries are disabled. The default value is 0 -
|
all merge tries are disabled. The default value is 0 -
|
||||||
which enables all types of merge tries.
|
which enables all types of merge tries.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/discard_alignment
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||||
|
Description:
|
||||||
|
Devices that support discard functionality may
|
||||||
|
internally allocate space in units that are bigger than
|
||||||
|
the exported logical block size. The discard_alignment
|
||||||
|
parameter indicates how many bytes the beginning of the
|
||||||
|
device is offset from the internal allocation unit's
|
||||||
|
natural alignment.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/<partition>/discard_alignment
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||||
|
Description:
|
||||||
|
Devices that support discard functionality may
|
||||||
|
internally allocate space in units that are bigger than
|
||||||
|
the exported logical block size. The discard_alignment
|
||||||
|
parameter indicates how many bytes the beginning of the
|
||||||
|
partition is offset from the internal allocation unit's
|
||||||
|
natural alignment.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/queue/discard_granularity
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||||
|
Description:
|
||||||
|
Devices that support discard functionality may
|
||||||
|
internally allocate space using units that are bigger
|
||||||
|
than the logical block size. The discard_granularity
|
||||||
|
parameter indicates the size of the internal allocation
|
||||||
|
unit in bytes if reported by the device. Otherwise the
|
||||||
|
discard_granularity will be set to match the device's
|
||||||
|
physical block size. A discard_granularity of 0 means
|
||||||
|
that the device does not support discard functionality.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/queue/discard_max_bytes
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||||
|
Description:
|
||||||
|
Devices that support discard functionality may have
|
||||||
|
internal limits on the number of bytes that can be
|
||||||
|
trimmed or unmapped in a single operation. Some storage
|
||||||
|
protocols also have inherent limits on the number of
|
||||||
|
blocks that can be described in a single command. The
|
||||||
|
discard_max_bytes parameter is set by the device driver
|
||||||
|
to the maximum number of bytes that can be discarded in
|
||||||
|
a single operation. Discard requests issued to the
|
||||||
|
device must not exceed this limit. A discard_max_bytes
|
||||||
|
value of 0 means that the device does not support
|
||||||
|
discard functionality.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/queue/discard_zeroes_data
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||||
|
Description:
|
||||||
|
Devices that support discard functionality may return
|
||||||
|
stale or random data when a previously discarded block
|
||||||
|
is read back. This can cause problems if the filesystem
|
||||||
|
expects discarded blocks to be explicitly cleared. If a
|
||||||
|
device reports that it deterministically returns zeroes
|
||||||
|
when a discarded area is read the discard_zeroes_data
|
||||||
|
parameter will be set to one. Otherwise it will be 0 and
|
||||||
|
the result of reading a discarded area is undefined.
|
||||||
|
|
31
Documentation/ABI/testing/sysfs-bus-bcma
Normal file
31
Documentation/ABI/testing/sysfs-bus-bcma
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
What: /sys/bus/bcma/devices/.../manuf
|
||||||
|
Date: May 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
Description:
|
||||||
|
Each BCMA core has it's manufacturer id. See
|
||||||
|
include/linux/bcma/bcma.h for possible values.
|
||||||
|
|
||||||
|
What: /sys/bus/bcma/devices/.../id
|
||||||
|
Date: May 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
Description:
|
||||||
|
There are a few types of BCMA cores, they can be identified by
|
||||||
|
id field.
|
||||||
|
|
||||||
|
What: /sys/bus/bcma/devices/.../rev
|
||||||
|
Date: May 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
Description:
|
||||||
|
BCMA cores of the same type can still slightly differ depending
|
||||||
|
on their revision. Use it for detailed programming.
|
||||||
|
|
||||||
|
What: /sys/bus/bcma/devices/.../class
|
||||||
|
Date: May 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
Description:
|
||||||
|
Each BCMA core is identified by few fields, including class it
|
||||||
|
belongs to. See include/linux/bcma/bcma.h for possible values.
|
|
@ -74,6 +74,15 @@ Description:
|
||||||
hot-remove the PCI device and any of its children.
|
hot-remove the PCI device and any of its children.
|
||||||
Depends on CONFIG_HOTPLUG.
|
Depends on CONFIG_HOTPLUG.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../pci_bus/.../rescan
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Linux PCI developers <linux-pci@vger.kernel.org>
|
||||||
|
Description:
|
||||||
|
Writing a non-zero value to this attribute will
|
||||||
|
force a rescan of the bus and all child buses,
|
||||||
|
and re-discover devices removed earlier from this
|
||||||
|
part of the device tree. Depends on CONFIG_HOTPLUG.
|
||||||
|
|
||||||
What: /sys/bus/pci/devices/.../rescan
|
What: /sys/bus/pci/devices/.../rescan
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Linux PCI developers <linux-pci@vger.kernel.org>
|
Contact: Linux PCI developers <linux-pci@vger.kernel.org>
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
What: /sys/class/backlight/<backlight>/<ambient light zone>_max
|
||||||
|
What: /sys/class/backlight/<backlight>/l1_daylight_max
|
||||||
|
What: /sys/class/backlight/<backlight>/l2_bright_max
|
||||||
|
What: /sys/class/backlight/<backlight>/l3_office_max
|
||||||
|
What: /sys/class/backlight/<backlight>/l4_indoor_max
|
||||||
|
What: /sys/class/backlight/<backlight>/l5_dark_max
|
||||||
|
Date: Mai 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: device-drivers-devel@blackfin.uclinux.org
|
||||||
|
Description:
|
||||||
|
Control the maximum brightness for <ambient light zone>
|
||||||
|
on this <backlight>. Values are between 0 and 127. This file
|
||||||
|
will also show the brightness level stored for this
|
||||||
|
<ambient light zone>.
|
||||||
|
|
||||||
|
What: /sys/class/backlight/<backlight>/<ambient light zone>_dim
|
||||||
|
What: /sys/class/backlight/<backlight>/l2_bright_dim
|
||||||
|
What: /sys/class/backlight/<backlight>/l3_office_dim
|
||||||
|
What: /sys/class/backlight/<backlight>/l4_indoor_dim
|
||||||
|
What: /sys/class/backlight/<backlight>/l5_dark_dim
|
||||||
|
Date: Mai 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: device-drivers-devel@blackfin.uclinux.org
|
||||||
|
Description:
|
||||||
|
Control the dim brightness for <ambient light zone>
|
||||||
|
on this <backlight>. Values are between 0 and 127, typically
|
||||||
|
set to 0. Full off when the backlight is disabled.
|
||||||
|
This file will also show the dim brightness level stored for
|
||||||
|
this <ambient light zone>.
|
||||||
|
|
||||||
|
What: /sys/class/backlight/<backlight>/ambient_light_level
|
||||||
|
Date: Mai 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: device-drivers-devel@blackfin.uclinux.org
|
||||||
|
Description:
|
||||||
|
Get conversion value of the light sensor.
|
||||||
|
This value is updated every 80 ms (when the light sensor
|
||||||
|
is enabled). Returns integer between 0 (dark) and
|
||||||
|
8000 (max ambient brightness)
|
||||||
|
|
||||||
|
What: /sys/class/backlight/<backlight>/ambient_light_zone
|
||||||
|
Date: Mai 2011
|
||||||
|
KernelVersion: 2.6.40
|
||||||
|
Contact: device-drivers-devel@blackfin.uclinux.org
|
||||||
|
Description:
|
||||||
|
Get/Set current ambient light zone. Reading returns
|
||||||
|
integer between 1..5 (1 = daylight, 2 = bright, ..., 5 = dark).
|
||||||
|
Writing a value between 1..5 forces the backlight controller
|
||||||
|
to enter the corresponding ambient light zone.
|
||||||
|
Writing 0 returns to normal/automatic ambient light level
|
||||||
|
operation. The ambient light sensing feature on these devices
|
||||||
|
is an extension to the API documented in
|
||||||
|
Documentation/ABI/stable/sysfs-class-backlight.
|
||||||
|
It can be enabled by writing the value stored in
|
||||||
|
/sys/class/backlight/<backlight>/max_brightness to
|
||||||
|
/sys/class/backlight/<backlight>/brightness.
|
|
@ -183,21 +183,21 @@ Description: Discover and change clock speed of CPUs
|
||||||
to learn how to control the knobs.
|
to learn how to control the knobs.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/devices/system/cpu/cpu*/cache/index*/cache_disable_X
|
What: /sys/devices/system/cpu/cpu*/cache/index3/cache_disable_{0,1}
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
KernelVersion: 2.6.27
|
KernelVersion: 2.6.27
|
||||||
Contact: mark.langsdorf@amd.com
|
Contact: discuss@x86-64.org
|
||||||
Description: These files exist in every cpu's cache index directories.
|
Description: Disable L3 cache indices
|
||||||
There are currently 2 cache_disable_# files in each
|
|
||||||
directory. Reading from these files on a supported
|
|
||||||
processor will return that cache disable index value
|
|
||||||
for that processor and node. Writing to one of these
|
|
||||||
files will cause the specificed cache index to be disabled.
|
|
||||||
|
|
||||||
Currently, only AMD Family 10h Processors support cache index
|
These files exist in every CPU's cache/index3 directory. Each
|
||||||
disable, and only for their L3 caches. See the BIOS and
|
cache_disable_{0,1} file corresponds to one disable slot which
|
||||||
Kernel Developer's Guide at
|
can be used to disable a cache index. Reading from these files
|
||||||
http://support.amd.com/us/Embedded_TechDocs/31116-Public-GH-BKDG_3-28_5-28-09.pdf
|
on a processor with this functionality will return the currently
|
||||||
for formatting information and other details on the
|
disabled index for that node. There is one L3 structure per
|
||||||
cache index disable.
|
node, or per internal node on MCM machines. Writing a valid
|
||||||
Users: joachim.deguara@amd.com
|
index to one of these files will cause the specificed cache
|
||||||
|
index to be disabled.
|
||||||
|
|
||||||
|
All AMD processors with L3 caches provide this functionality.
|
||||||
|
For details, see BKDGs at
|
||||||
|
http://developer.amd.com/documentation/guides/Pages/default.aspx
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/actual_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/actual_profile
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the number of the actual profile in
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
range 0-4.
|
When read, this attribute returns the number of the actual
|
||||||
This file is readonly.
|
profile. This value is persistent, so its equivalent to the
|
||||||
|
profile that's active when the mouse is powered on next time.
|
||||||
|
When written, this file sets the number of the startup profile
|
||||||
|
and the mouse activates this profile immediately.
|
||||||
Users: http://roccat.sourceforge.net
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
||||||
|
@ -89,16 +92,6 @@ Description: The mouse has a tracking- and a distance-control-unit. These
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
Users: http://roccat.sourceforge.net
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
|
||||||
Date: October 2010
|
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
|
||||||
Description: The integer value of this attribute ranges from 0-4.
|
|
||||||
When read, this attribute returns the number of the profile
|
|
||||||
that's active when the mouse is powered on.
|
|
||||||
When written, this file sets the number of the startup profile
|
|
||||||
and the mouse activates this profile immediately.
|
|
||||||
Users: http://roccat.sourceforge.net
|
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
|
|
@ -14,14 +14,15 @@ Description:
|
||||||
|
|
||||||
DMI is structured as a large table of entries, where
|
DMI is structured as a large table of entries, where
|
||||||
each entry has a common header indicating the type and
|
each entry has a common header indicating the type and
|
||||||
length of the entry, as well as 'handle' that is
|
length of the entry, as well as a firmware-provided
|
||||||
supposed to be unique amongst all entries.
|
'handle' that is supposed to be unique amongst all
|
||||||
|
entries.
|
||||||
|
|
||||||
Some entries are required by the specification, but many
|
Some entries are required by the specification, but many
|
||||||
others are optional. In general though, users should
|
others are optional. In general though, users should
|
||||||
never expect to find a specific entry type on their
|
never expect to find a specific entry type on their
|
||||||
system unless they know for certain what their firmware
|
system unless they know for certain what their firmware
|
||||||
is doing. Machine to machine will vary.
|
is doing. Machine to machine experiences will vary.
|
||||||
|
|
||||||
Multiple entries of the same type are allowed. In order
|
Multiple entries of the same type are allowed. In order
|
||||||
to handle these duplicate entry types, each entry is
|
to handle these duplicate entry types, each entry is
|
||||||
|
@ -67,25 +68,24 @@ Description:
|
||||||
and the two terminating nul characters.
|
and the two terminating nul characters.
|
||||||
type : The type of the entry. This value is the same
|
type : The type of the entry. This value is the same
|
||||||
as found in the directory name. It indicates
|
as found in the directory name. It indicates
|
||||||
how the rest of the entry should be
|
how the rest of the entry should be interpreted.
|
||||||
interpreted.
|
|
||||||
instance: The instance ordinal of the entry for the
|
instance: The instance ordinal of the entry for the
|
||||||
given type. This value is the same as found
|
given type. This value is the same as found
|
||||||
in the parent directory name.
|
in the parent directory name.
|
||||||
position: The position of the entry within the entirety
|
position: The ordinal position (zero-based) of the entry
|
||||||
of the entirety.
|
within the entirety of the DMI entry table.
|
||||||
|
|
||||||
=== Entry Specialization ===
|
=== Entry Specialization ===
|
||||||
|
|
||||||
Some entry types may have other information available in
|
Some entry types may have other information available in
|
||||||
sysfs.
|
sysfs. Not all types are specialized.
|
||||||
|
|
||||||
--- Type 15 - System Event Log ---
|
--- Type 15 - System Event Log ---
|
||||||
|
|
||||||
This entry allows the firmware to export a log of
|
This entry allows the firmware to export a log of
|
||||||
events the system has taken. This information is
|
events the system has taken. This information is
|
||||||
typically backed by nvram, but the implementation
|
typically backed by nvram, but the implementation
|
||||||
details are abstracted by this table. This entries data
|
details are abstracted by this table. This entry's data
|
||||||
is exported in the directory:
|
is exported in the directory:
|
||||||
|
|
||||||
/sys/firmware/dmi/entries/15-0/system_event_log
|
/sys/firmware/dmi/entries/15-0/system_event_log
|
||||||
|
|
58
Documentation/ABI/testing/sysfs-firmware-gsmi
Normal file
58
Documentation/ABI/testing/sysfs-firmware-gsmi
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
What: /sys/firmware/gsmi
|
||||||
|
Date: March 2011
|
||||||
|
Contact: Mike Waychison <mikew@google.com>
|
||||||
|
Description:
|
||||||
|
Some servers used internally at Google have firmware
|
||||||
|
that provides callback functionality via explicit SMI
|
||||||
|
triggers. Some of the callbacks are similar to those
|
||||||
|
provided by the EFI runtime services page, but due to
|
||||||
|
historical reasons this different entry-point has been
|
||||||
|
used.
|
||||||
|
|
||||||
|
The gsmi driver implements the kernel's abstraction for
|
||||||
|
these firmware callbacks. Currently, this functionality
|
||||||
|
is limited to handling the system event log and getting
|
||||||
|
access to EFI-style variables stored in nvram.
|
||||||
|
|
||||||
|
Layout:
|
||||||
|
|
||||||
|
/sys/firmware/gsmi/vars:
|
||||||
|
|
||||||
|
This directory has the same layout (and
|
||||||
|
underlying implementation as /sys/firmware/efi/vars.
|
||||||
|
See Documentation/ABI/*/sysfs-firmware-efi-vars
|
||||||
|
for more information on how to interact with
|
||||||
|
this structure.
|
||||||
|
|
||||||
|
/sys/firmware/gsmi/append_to_eventlog - write-only:
|
||||||
|
|
||||||
|
This file takes a binary blob and passes it onto
|
||||||
|
the firmware to be timestamped and appended to
|
||||||
|
the system eventlog. The binary format is
|
||||||
|
interpreted by the firmware and may change from
|
||||||
|
platform to platform. The only kernel-enforced
|
||||||
|
requirement is that the blob be prefixed with a
|
||||||
|
32bit host-endian type used as part of the
|
||||||
|
firmware call.
|
||||||
|
|
||||||
|
/sys/firmware/gsmi/clear_config - write-only:
|
||||||
|
|
||||||
|
Writing any value to this file will cause the
|
||||||
|
entire firmware configuration to be reset to
|
||||||
|
"factory defaults". Callers should assume that
|
||||||
|
a reboot is required for the configuration to be
|
||||||
|
cleared.
|
||||||
|
|
||||||
|
/sys/firmware/gsmi/clear_eventlog - write-only:
|
||||||
|
|
||||||
|
This file is used to clear out a portion/the
|
||||||
|
whole of the system event log. Values written
|
||||||
|
should be values between 1 and 100 inclusive (in
|
||||||
|
ASCII) representing the fraction of the log to
|
||||||
|
clear. Not all platforms support fractional
|
||||||
|
clearing though, and this writes to this file
|
||||||
|
will error out if the firmware doesn't like your
|
||||||
|
submitted fraction.
|
||||||
|
|
||||||
|
Callers should assume that a reboot is needed
|
||||||
|
for this operation to complete.
|
7
Documentation/ABI/testing/sysfs-firmware-log
Normal file
7
Documentation/ABI/testing/sysfs-firmware-log
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
What: /sys/firmware/log
|
||||||
|
Date: February 2011
|
||||||
|
Contact: Mike Waychison <mikew@google.com>
|
||||||
|
Description:
|
||||||
|
The /sys/firmware/log is a binary file that represents a
|
||||||
|
read-only copy of the firmware's log if one is
|
||||||
|
available.
|
8
Documentation/ABI/testing/sysfs-kernel-fscaps
Normal file
8
Documentation/ABI/testing/sysfs-kernel-fscaps
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
What: /sys/kernel/fscaps
|
||||||
|
Date: February 2011
|
||||||
|
KernelVersion: 2.6.38
|
||||||
|
Contact: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||||
|
Description
|
||||||
|
Shows whether file system capabilities are honored
|
||||||
|
when executing a binary
|
||||||
|
|
11
Documentation/ABI/testing/sysfs-kernel-mm-cleancache
Normal file
11
Documentation/ABI/testing/sysfs-kernel-mm-cleancache
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
What: /sys/kernel/mm/cleancache/
|
||||||
|
Date: April 2011
|
||||||
|
Contact: Dan Magenheimer <dan.magenheimer@oracle.com>
|
||||||
|
Description:
|
||||||
|
/sys/kernel/mm/cleancache/ contains a number of files which
|
||||||
|
record a count of various cleancache operations
|
||||||
|
(sum across all filesystems):
|
||||||
|
succ_gets
|
||||||
|
failed_gets
|
||||||
|
puts
|
||||||
|
flushes
|
|
@ -158,3 +158,17 @@ Description:
|
||||||
successful, will make the kernel abort a subsequent transition
|
successful, will make the kernel abort a subsequent transition
|
||||||
to a sleep state if any wakeup events are reported after the
|
to a sleep state if any wakeup events are reported after the
|
||||||
write has returned.
|
write has returned.
|
||||||
|
|
||||||
|
What: /sys/power/reserved_size
|
||||||
|
Date: May 2011
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/power/reserved_size file allows user space to control
|
||||||
|
the amount of memory reserved for allocations made by device
|
||||||
|
drivers during the "device freeze" stage of hibernation. It can
|
||||||
|
be written a string representing a non-negative integer that
|
||||||
|
will be used as the amount of memory to reserve for allocations
|
||||||
|
made by device drivers' "freeze" callbacks, in bytes.
|
||||||
|
|
||||||
|
Reading from this file will display the current value, which is
|
||||||
|
set to 1 MB by default.
|
||||||
|
|
98
Documentation/ABI/testing/sysfs-ptp
Normal file
98
Documentation/ABI/testing/sysfs-ptp
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
What: /sys/class/ptp/
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This directory contains files and directories
|
||||||
|
providing a standardized interface to the ancillary
|
||||||
|
features of PTP hardware clocks.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This directory contains the attributes of the Nth PTP
|
||||||
|
hardware clock registered into the PTP class driver
|
||||||
|
subsystem.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/clock_name
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file contains the name of the PTP hardware clock
|
||||||
|
as a human readable string.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/max_adjustment
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file contains the PTP hardware clock's maximum
|
||||||
|
frequency adjustment value (a positive integer) in
|
||||||
|
parts per billion.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/n_alarms
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file contains the number of periodic or one shot
|
||||||
|
alarms offer by the PTP hardware clock.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/n_external_timestamps
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file contains the number of external timestamp
|
||||||
|
channels offered by the PTP hardware clock.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/n_periodic_outputs
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file contains the number of programmable periodic
|
||||||
|
output channels offered by the PTP hardware clock.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/pps_avaiable
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file indicates whether the PTP hardware clock
|
||||||
|
supports a Pulse Per Second to the host CPU. Reading
|
||||||
|
"1" means that the PPS is supported, while "0" means
|
||||||
|
not supported.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/extts_enable
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This write-only file enables or disables external
|
||||||
|
timestamps. To enable external timestamps, write the
|
||||||
|
channel index followed by a "1" into the file.
|
||||||
|
To disable external timestamps, write the channel
|
||||||
|
index followed by a "0" into the file.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/fifo
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This file provides timestamps on external events, in
|
||||||
|
the form of three integers: channel index, seconds,
|
||||||
|
and nanoseconds.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/period
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This write-only file enables or disables periodic
|
||||||
|
outputs. To enable a periodic output, write five
|
||||||
|
integers into the file: channel index, start time
|
||||||
|
seconds, start time nanoseconds, period seconds, and
|
||||||
|
period nanoseconds. To disable a periodic output, set
|
||||||
|
all the seconds and nanoseconds values to zero.
|
||||||
|
|
||||||
|
What: /sys/class/ptp/ptpN/pps_enable
|
||||||
|
Date: September 2010
|
||||||
|
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||||
|
Description:
|
||||||
|
This write-only file enables or disables delivery of
|
||||||
|
PPS events to the Linux PPS subsystem. To enable PPS
|
||||||
|
events, write a "1" into the file. To disable events,
|
||||||
|
write a "0" into the file.
|
1
Documentation/DocBook/.gitignore
vendored
1
Documentation/DocBook/.gitignore
vendored
|
@ -8,3 +8,4 @@
|
||||||
*.dvi
|
*.dvi
|
||||||
*.log
|
*.log
|
||||||
*.out
|
*.out
|
||||||
|
media/
|
||||||
|
|
|
@ -73,7 +73,7 @@ installmandocs: mandocs
|
||||||
###
|
###
|
||||||
#External programs used
|
#External programs used
|
||||||
KERNELDOC = $(srctree)/scripts/kernel-doc
|
KERNELDOC = $(srctree)/scripts/kernel-doc
|
||||||
DOCPROC = $(objtree)/scripts/basic/docproc
|
DOCPROC = $(objtree)/scripts/docproc
|
||||||
|
|
||||||
XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl
|
XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl
|
||||||
XMLTOFLAGS += --skip-validation
|
XMLTOFLAGS += --skip-validation
|
||||||
|
|
|
@ -96,10 +96,10 @@ X!Iinclude/linux/kobject.h
|
||||||
|
|
||||||
<chapter id="devdrivers">
|
<chapter id="devdrivers">
|
||||||
<title>Device drivers infrastructure</title>
|
<title>Device drivers infrastructure</title>
|
||||||
|
<sect1><title>The Basic Device Driver-Model Structures </title>
|
||||||
|
!Iinclude/linux/device.h
|
||||||
|
</sect1>
|
||||||
<sect1><title>Device Drivers Base</title>
|
<sect1><title>Device Drivers Base</title>
|
||||||
<!--
|
|
||||||
X!Iinclude/linux/device.h
|
|
||||||
-->
|
|
||||||
!Edrivers/base/driver.c
|
!Edrivers/base/driver.c
|
||||||
!Edrivers/base/core.c
|
!Edrivers/base/core.c
|
||||||
!Edrivers/base/class.c
|
!Edrivers/base/class.c
|
||||||
|
|
|
@ -34,6 +34,14 @@
|
||||||
|
|
||||||
<revhistory>
|
<revhistory>
|
||||||
<!-- Put document revisions here, newest first. -->
|
<!-- Put document revisions here, newest first. -->
|
||||||
|
<revision>
|
||||||
|
<revnumber>2.0.4</revnumber>
|
||||||
|
<date>2011-05-06</date>
|
||||||
|
<authorinitials>mcc</authorinitials>
|
||||||
|
<revremark>
|
||||||
|
Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's.
|
||||||
|
</revremark>
|
||||||
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
<revnumber>2.0.3</revnumber>
|
<revnumber>2.0.3</revnumber>
|
||||||
<date>2010-07-03</date>
|
<date>2010-07-03</date>
|
||||||
|
|
|
@ -1,6 +1,330 @@
|
||||||
<section id="FE_GET_PROPERTY">
|
<section id="FE_GET_SET_PROPERTY">
|
||||||
<title>FE_GET_PROPERTY/FE_SET_PROPERTY</title>
|
<title>FE_GET_PROPERTY/FE_SET_PROPERTY</title>
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
/* Reserved fields should be set to 0 */
|
||||||
|
struct dtv_property {
|
||||||
|
__u32 cmd;
|
||||||
|
union {
|
||||||
|
__u32 data;
|
||||||
|
struct {
|
||||||
|
__u8 data[32];
|
||||||
|
__u32 len;
|
||||||
|
__u32 reserved1[3];
|
||||||
|
void *reserved2;
|
||||||
|
} buffer;
|
||||||
|
} u;
|
||||||
|
int result;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
|
||||||
|
#define DTV_IOCTL_MAX_MSGS 64
|
||||||
|
|
||||||
|
struct dtv_properties {
|
||||||
|
__u32 num;
|
||||||
|
struct dtv_property *props;
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<section id="FE_GET_PROPERTY">
|
||||||
|
<title>FE_GET_PROPERTY</title>
|
||||||
|
<para>DESCRIPTION
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>This ioctl call returns one or more frontend properties. This call only
|
||||||
|
requires read-only access to the device.</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>SYNOPSIS
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>int ioctl(int fd, int request = <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link>,
|
||||||
|
dtv_properties ⋆props);</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>PARAMETERS
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="2"><tbody><row><entry align="char">
|
||||||
|
<para>int fd</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>File descriptor returned by a previous call to open().</para>
|
||||||
|
</entry>
|
||||||
|
</row><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>int num</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>Equals <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link> for this command.</para>
|
||||||
|
</entry>
|
||||||
|
</row><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>struct dtv_property *props</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>Points to the location where the front-end property commands are stored.</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>ERRORS</para>
|
||||||
|
<informaltable><tgroup cols="2"><tbody><row>
|
||||||
|
<entry align="char"><para>EINVAL</para></entry>
|
||||||
|
<entry align="char"><para>Invalid parameter(s) received or number of parameters out of the range.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>ENOMEM</para></entry>
|
||||||
|
<entry align="char"><para>Out of memory.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>EFAULT</para></entry>
|
||||||
|
<entry align="char"><para>Failure while copying data from/to userspace.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>EOPNOTSUPP</para></entry>
|
||||||
|
<entry align="char"><para>Property type not supported.</para></entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="FE_SET_PROPERTY">
|
||||||
|
<title>FE_SET_PROPERTY</title>
|
||||||
|
<para>DESCRIPTION
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>This ioctl call sets one or more frontend properties. This call only
|
||||||
|
requires read-only access to the device.</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>SYNOPSIS
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>int ioctl(int fd, int request = <link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link>,
|
||||||
|
dtv_properties ⋆props);</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>PARAMETERS
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="2"><tbody><row><entry align="char">
|
||||||
|
<para>int fd</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>File descriptor returned by a previous call to open().</para>
|
||||||
|
</entry>
|
||||||
|
</row><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>int num</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>Equals <link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link> for this command.</para>
|
||||||
|
</entry>
|
||||||
|
</row><row><entry
|
||||||
|
align="char">
|
||||||
|
<para>struct dtv_property *props</para>
|
||||||
|
</entry><entry
|
||||||
|
align="char">
|
||||||
|
<para>Points to the location where the front-end property commands are stored.</para>
|
||||||
|
</entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
<para>ERRORS
|
||||||
|
</para>
|
||||||
|
<informaltable><tgroup cols="2"><tbody><row>
|
||||||
|
<entry align="char"><para>EINVAL</para></entry>
|
||||||
|
<entry align="char"><para>Invalid parameter(s) received or number of parameters out of the range.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>ENOMEM</para></entry>
|
||||||
|
<entry align="char"><para>Out of memory.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>EFAULT</para></entry>
|
||||||
|
<entry align="char"><para>Failure while copying data from/to userspace.</para></entry>
|
||||||
|
</row><row>
|
||||||
|
<entry align="char"><para>EOPNOTSUPP</para></entry>
|
||||||
|
<entry align="char"><para>Property type not supported.</para></entry>
|
||||||
|
</row></tbody></tgroup></informaltable>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Property types</title>
|
||||||
|
<para>
|
||||||
|
On <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link>/<link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link>,
|
||||||
|
the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to
|
||||||
|
get/set up to 64 properties. The actual meaning of each property is described on the next sections.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>The available frontend property types are:</para>
|
||||||
|
<programlisting>
|
||||||
|
#define DTV_UNDEFINED 0
|
||||||
|
#define DTV_TUNE 1
|
||||||
|
#define DTV_CLEAR 2
|
||||||
|
#define DTV_FREQUENCY 3
|
||||||
|
#define DTV_MODULATION 4
|
||||||
|
#define DTV_BANDWIDTH_HZ 5
|
||||||
|
#define DTV_INVERSION 6
|
||||||
|
#define DTV_DISEQC_MASTER 7
|
||||||
|
#define DTV_SYMBOL_RATE 8
|
||||||
|
#define DTV_INNER_FEC 9
|
||||||
|
#define DTV_VOLTAGE 10
|
||||||
|
#define DTV_TONE 11
|
||||||
|
#define DTV_PILOT 12
|
||||||
|
#define DTV_ROLLOFF 13
|
||||||
|
#define DTV_DISEQC_SLAVE_REPLY 14
|
||||||
|
#define DTV_FE_CAPABILITY_COUNT 15
|
||||||
|
#define DTV_FE_CAPABILITY 16
|
||||||
|
#define DTV_DELIVERY_SYSTEM 17
|
||||||
|
#define DTV_ISDBT_PARTIAL_RECEPTION 18
|
||||||
|
#define DTV_ISDBT_SOUND_BROADCASTING 19
|
||||||
|
#define DTV_ISDBT_SB_SUBCHANNEL_ID 20
|
||||||
|
#define DTV_ISDBT_SB_SEGMENT_IDX 21
|
||||||
|
#define DTV_ISDBT_SB_SEGMENT_COUNT 22
|
||||||
|
#define DTV_ISDBT_LAYERA_FEC 23
|
||||||
|
#define DTV_ISDBT_LAYERA_MODULATION 24
|
||||||
|
#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25
|
||||||
|
#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26
|
||||||
|
#define DTV_ISDBT_LAYERB_FEC 27
|
||||||
|
#define DTV_ISDBT_LAYERB_MODULATION 28
|
||||||
|
#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29
|
||||||
|
#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30
|
||||||
|
#define DTV_ISDBT_LAYERC_FEC 31
|
||||||
|
#define DTV_ISDBT_LAYERC_MODULATION 32
|
||||||
|
#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33
|
||||||
|
#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34
|
||||||
|
#define DTV_API_VERSION 35
|
||||||
|
#define DTV_CODE_RATE_HP 36
|
||||||
|
#define DTV_CODE_RATE_LP 37
|
||||||
|
#define DTV_GUARD_INTERVAL 38
|
||||||
|
#define DTV_TRANSMISSION_MODE 39
|
||||||
|
#define DTV_HIERARCHY 40
|
||||||
|
#define DTV_ISDBT_LAYER_ENABLED 41
|
||||||
|
#define DTV_ISDBS_TS_ID 42
|
||||||
|
</programlisting>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="fe_property_common">
|
||||||
|
<title>Parameters that are common to all Digital TV standards</title>
|
||||||
|
<section id="DTV_FREQUENCY">
|
||||||
|
<title><constant>DTV_FREQUENCY</constant></title>
|
||||||
|
|
||||||
|
<para>Central frequency of the channel, in HZ.</para>
|
||||||
|
|
||||||
|
<para>Notes:</para>
|
||||||
|
<para>1)For ISDB-T, the channels are usually transmitted with an offset of 143kHz.
|
||||||
|
E.g. a valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of
|
||||||
|
the channel which is 6MHz.</para>
|
||||||
|
|
||||||
|
<para>2)As in ISDB-Tsb the channel consists of only one or three segments the
|
||||||
|
frequency step is 429kHz, 3*429 respectively. As for ISDB-T the
|
||||||
|
central frequency of the channel is expected.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="DTV_BANDWIDTH_HZ">
|
||||||
|
<title><constant>DTV_BANDWIDTH_HZ</constant></title>
|
||||||
|
|
||||||
|
<para>Bandwidth for the channel, in HZ.</para>
|
||||||
|
|
||||||
|
<para>Possible values:
|
||||||
|
<constant>1712000</constant>,
|
||||||
|
<constant>5000000</constant>,
|
||||||
|
<constant>6000000</constant>,
|
||||||
|
<constant>7000000</constant>,
|
||||||
|
<constant>8000000</constant>,
|
||||||
|
<constant>10000000</constant>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Notes:</para>
|
||||||
|
|
||||||
|
<para>1) For ISDB-T it should be always 6000000Hz (6MHz)</para>
|
||||||
|
<para>2) For ISDB-Tsb it can vary depending on the number of connected segments</para>
|
||||||
|
<para>3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth
|
||||||
|
for DVB-C depends on the symbol rate</para>
|
||||||
|
<para>4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from
|
||||||
|
other parameters (DTV_ISDBT_SB_SEGMENT_IDX,
|
||||||
|
DTV_ISDBT_SB_SEGMENT_COUNT).</para>
|
||||||
|
<para>5) DVB-T supports 6, 7 and 8MHz.</para>
|
||||||
|
<para>6) In addition, DVB-T2 supports 1.172, 5 and 10MHz.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="DTV_DELIVERY_SYSTEM">
|
||||||
|
<title><constant>DTV_DELIVERY_SYSTEM</constant></title>
|
||||||
|
|
||||||
|
<para>Specifies the type of Delivery system</para>
|
||||||
|
|
||||||
|
<para>Possible values: </para>
|
||||||
|
<programlisting>
|
||||||
|
typedef enum fe_delivery_system {
|
||||||
|
SYS_UNDEFINED,
|
||||||
|
SYS_DVBC_ANNEX_AC,
|
||||||
|
SYS_DVBC_ANNEX_B,
|
||||||
|
SYS_DVBT,
|
||||||
|
SYS_DSS,
|
||||||
|
SYS_DVBS,
|
||||||
|
SYS_DVBS2,
|
||||||
|
SYS_DVBH,
|
||||||
|
SYS_ISDBT,
|
||||||
|
SYS_ISDBS,
|
||||||
|
SYS_ISDBC,
|
||||||
|
SYS_ATSC,
|
||||||
|
SYS_ATSCMH,
|
||||||
|
SYS_DMBTH,
|
||||||
|
SYS_CMMB,
|
||||||
|
SYS_DAB,
|
||||||
|
SYS_DVBT2,
|
||||||
|
} fe_delivery_system_t;
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="DTV_TRANSMISSION_MODE">
|
||||||
|
<title><constant>DTV_TRANSMISSION_MODE</constant></title>
|
||||||
|
|
||||||
|
<para>Specifies the number of carriers used by the standard</para>
|
||||||
|
|
||||||
|
<para>Possible values are:</para>
|
||||||
|
<programlisting>
|
||||||
|
typedef enum fe_transmit_mode {
|
||||||
|
TRANSMISSION_MODE_2K,
|
||||||
|
TRANSMISSION_MODE_8K,
|
||||||
|
TRANSMISSION_MODE_AUTO,
|
||||||
|
TRANSMISSION_MODE_4K,
|
||||||
|
TRANSMISSION_MODE_1K,
|
||||||
|
TRANSMISSION_MODE_16K,
|
||||||
|
TRANSMISSION_MODE_32K,
|
||||||
|
} fe_transmit_mode_t;
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>Notes:</para>
|
||||||
|
<para>1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called
|
||||||
|
'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para>
|
||||||
|
|
||||||
|
<para>2) If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the
|
||||||
|
hardware will try to find the correct FFT-size (if capable) and will
|
||||||
|
use TMCC to fill in the missing parameters.</para>
|
||||||
|
<para>3) DVB-T specifies 2K and 8K as valid sizes.</para>
|
||||||
|
<para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="DTV_GUARD_INTERVAL">
|
||||||
|
<title><constant>DTV_GUARD_INTERVAL</constant></title>
|
||||||
|
|
||||||
|
<para>Possible values are:</para>
|
||||||
|
<programlisting>
|
||||||
|
typedef enum fe_guard_interval {
|
||||||
|
GUARD_INTERVAL_1_32,
|
||||||
|
GUARD_INTERVAL_1_16,
|
||||||
|
GUARD_INTERVAL_1_8,
|
||||||
|
GUARD_INTERVAL_1_4,
|
||||||
|
GUARD_INTERVAL_AUTO,
|
||||||
|
GUARD_INTERVAL_1_128,
|
||||||
|
GUARD_INTERVAL_19_128,
|
||||||
|
GUARD_INTERVAL_19_256,
|
||||||
|
} fe_guard_interval_t;
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
<para>Notes:</para>
|
||||||
|
<para>1) If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will
|
||||||
|
try to find the correct guard interval (if capable) and will use TMCC to fill
|
||||||
|
in the missing parameters.</para>
|
||||||
|
<para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section id="isdbt">
|
<section id="isdbt">
|
||||||
<title>ISDB-T frontend</title>
|
<title>ISDB-T frontend</title>
|
||||||
<para>This section describes shortly what are the possible parameters in the Linux
|
<para>This section describes shortly what are the possible parameters in the Linux
|
||||||
|
@ -32,73 +356,6 @@
|
||||||
|
|
||||||
<para>Parameters used by ISDB-T and ISDB-Tsb.</para>
|
<para>Parameters used by ISDB-T and ISDB-Tsb.</para>
|
||||||
|
|
||||||
<section id="isdbt-parms">
|
|
||||||
<title>Parameters that are common with DVB-T and ATSC</title>
|
|
||||||
|
|
||||||
<section id="isdbt-freq">
|
|
||||||
<title><constant>DTV_FREQUENCY</constant></title>
|
|
||||||
|
|
||||||
<para>Central frequency of the channel.</para>
|
|
||||||
|
|
||||||
<para>For ISDB-T the channels are usually transmitted with an offset of 143kHz. E.g. a
|
|
||||||
valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of
|
|
||||||
the channel which is 6MHz.</para>
|
|
||||||
|
|
||||||
<para>As in ISDB-Tsb the channel consists of only one or three segments the
|
|
||||||
frequency step is 429kHz, 3*429 respectively. As for ISDB-T the
|
|
||||||
central frequency of the channel is expected.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="isdbt-bw">
|
|
||||||
<title><constant>DTV_BANDWIDTH_HZ</constant> (optional)</title>
|
|
||||||
|
|
||||||
<para>Possible values:</para>
|
|
||||||
|
|
||||||
<para>For ISDB-T it should be always 6000000Hz (6MHz)</para>
|
|
||||||
<para>For ISDB-Tsb it can vary depending on the number of connected segments</para>
|
|
||||||
|
|
||||||
<para>Note: Hardware specific values might be given here, but standard
|
|
||||||
applications should not bother to set a value to this field as
|
|
||||||
standard demods are ignoring it anyway.</para>
|
|
||||||
|
|
||||||
<para>Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from
|
|
||||||
other parameters (DTV_ISDBT_SB_SEGMENT_IDX,
|
|
||||||
DTV_ISDBT_SB_SEGMENT_COUNT).</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="isdbt-delivery-sys">
|
|
||||||
<title><constant>DTV_DELIVERY_SYSTEM</constant></title>
|
|
||||||
|
|
||||||
<para>Possible values: <constant>SYS_ISDBT</constant></para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="isdbt-tx-mode">
|
|
||||||
<title><constant>DTV_TRANSMISSION_MODE</constant></title>
|
|
||||||
|
|
||||||
<para>ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called
|
|
||||||
'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para>
|
|
||||||
|
|
||||||
<para>Possible values: <constant>TRANSMISSION_MODE_2K</constant>, <constant>TRANSMISSION_MODE_8K</constant>,
|
|
||||||
<constant>TRANSMISSION_MODE_AUTO</constant>, <constant>TRANSMISSION_MODE_4K</constant></para>
|
|
||||||
|
|
||||||
<para>If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the
|
|
||||||
hardware will try to find the correct FFT-size (if capable) and will
|
|
||||||
use TMCC to fill in the missing parameters.</para>
|
|
||||||
|
|
||||||
<para><constant>TRANSMISSION_MODE_4K</constant> is added at the same time as the other new parameters.</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="isdbt-guard-interval">
|
|
||||||
<title><constant>DTV_GUARD_INTERVAL</constant></title>
|
|
||||||
|
|
||||||
<para>Possible values: <constant>GUARD_INTERVAL_1_32</constant>, <constant>GUARD_INTERVAL_1_16</constant>, <constant>GUARD_INTERVAL_1_8</constant>,
|
|
||||||
<constant>GUARD_INTERVAL_1_4</constant>, <constant>GUARD_INTERVAL_AUTO</constant></para>
|
|
||||||
|
|
||||||
<para>If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will
|
|
||||||
try to find the correct guard interval (if capable) and will use TMCC to fill
|
|
||||||
in the missing parameters.</para>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section id="isdbt-new-parms">
|
<section id="isdbt-new-parms">
|
||||||
<title>ISDB-T only parameters</title>
|
<title>ISDB-T only parameters</title>
|
||||||
|
|
||||||
|
@ -314,5 +571,20 @@
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
<section id="dvbt2-params">
|
||||||
|
<title>DVB-T2 parameters</title>
|
||||||
|
|
||||||
|
<para>This section covers parameters that apply only to the DVB-T2 delivery method. DVB-T2
|
||||||
|
support is currently in the early stages development so expect this section to grow
|
||||||
|
and become more detailed with time.</para>
|
||||||
|
|
||||||
|
<section id="dvbt2-plp-id">
|
||||||
|
<title><constant>DTV_DVBT2_PLP_ID</constant></title>
|
||||||
|
|
||||||
|
<para>DVB-T2 supports Physical Layer Pipes (PLP) to allow transmission of
|
||||||
|
many data types via a single multiplex. The API will soon support this
|
||||||
|
at which point this section will be expanded.</para>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -176,14 +176,20 @@ typedef enum fe_transmit_mode {
|
||||||
TRANSMISSION_MODE_2K,
|
TRANSMISSION_MODE_2K,
|
||||||
TRANSMISSION_MODE_8K,
|
TRANSMISSION_MODE_8K,
|
||||||
TRANSMISSION_MODE_AUTO,
|
TRANSMISSION_MODE_AUTO,
|
||||||
TRANSMISSION_MODE_4K
|
TRANSMISSION_MODE_4K,
|
||||||
|
TRANSMISSION_MODE_1K,
|
||||||
|
TRANSMISSION_MODE_16K,
|
||||||
|
TRANSMISSION_MODE_32K,
|
||||||
} fe_transmit_mode_t;
|
} fe_transmit_mode_t;
|
||||||
|
|
||||||
typedef enum fe_bandwidth {
|
typedef enum fe_bandwidth {
|
||||||
BANDWIDTH_8_MHZ,
|
BANDWIDTH_8_MHZ,
|
||||||
BANDWIDTH_7_MHZ,
|
BANDWIDTH_7_MHZ,
|
||||||
BANDWIDTH_6_MHZ,
|
BANDWIDTH_6_MHZ,
|
||||||
BANDWIDTH_AUTO
|
BANDWIDTH_AUTO,
|
||||||
|
BANDWIDTH_5_MHZ,
|
||||||
|
BANDWIDTH_10_MHZ,
|
||||||
|
BANDWIDTH_1_712_MHZ,
|
||||||
} fe_bandwidth_t;
|
} fe_bandwidth_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,7 +198,10 @@ typedef enum fe_guard_interval {
|
||||||
GUARD_INTERVAL_1_16,
|
GUARD_INTERVAL_1_16,
|
||||||
GUARD_INTERVAL_1_8,
|
GUARD_INTERVAL_1_8,
|
||||||
GUARD_INTERVAL_1_4,
|
GUARD_INTERVAL_1_4,
|
||||||
GUARD_INTERVAL_AUTO
|
GUARD_INTERVAL_AUTO,
|
||||||
|
GUARD_INTERVAL_1_128,
|
||||||
|
GUARD_INTERVAL_19_128,
|
||||||
|
GUARD_INTERVAL_19_256,
|
||||||
} fe_guard_interval_t;
|
} fe_guard_interval_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -306,7 +315,9 @@ struct dvb_frontend_event {
|
||||||
|
|
||||||
#define DTV_ISDBS_TS_ID 42
|
#define DTV_ISDBS_TS_ID 42
|
||||||
|
|
||||||
#define DTV_MAX_COMMAND DTV_ISDBS_TS_ID
|
#define DTV_DVBT2_PLP_ID 43
|
||||||
|
|
||||||
|
#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID
|
||||||
|
|
||||||
typedef enum fe_pilot {
|
typedef enum fe_pilot {
|
||||||
PILOT_ON,
|
PILOT_ON,
|
||||||
|
@ -338,6 +349,7 @@ typedef enum fe_delivery_system {
|
||||||
SYS_DMBTH,
|
SYS_DMBTH,
|
||||||
SYS_CMMB,
|
SYS_CMMB,
|
||||||
SYS_DAB,
|
SYS_DAB,
|
||||||
|
SYS_DVBT2,
|
||||||
} fe_delivery_system_t;
|
} fe_delivery_system_t;
|
||||||
|
|
||||||
struct dtv_cmds_h {
|
struct dtv_cmds_h {
|
||||||
|
|
|
@ -191,8 +191,8 @@
|
||||||
<para>
|
<para>
|
||||||
Whenever an interrupt triggers, the lowlevel arch code calls into
|
Whenever an interrupt triggers, the lowlevel arch code calls into
|
||||||
the generic interrupt code by calling desc->handle_irq().
|
the generic interrupt code by calling desc->handle_irq().
|
||||||
This highlevel IRQ handling function only uses desc->chip primitives
|
This highlevel IRQ handling function only uses desc->irq_data.chip
|
||||||
referenced by the assigned chip descriptor structure.
|
primitives referenced by the assigned chip descriptor structure.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="Highlevel_Driver_API">
|
<sect1 id="Highlevel_Driver_API">
|
||||||
|
@ -206,11 +206,11 @@
|
||||||
<listitem><para>enable_irq()</para></listitem>
|
<listitem><para>enable_irq()</para></listitem>
|
||||||
<listitem><para>disable_irq_nosync() (SMP only)</para></listitem>
|
<listitem><para>disable_irq_nosync() (SMP only)</para></listitem>
|
||||||
<listitem><para>synchronize_irq() (SMP only)</para></listitem>
|
<listitem><para>synchronize_irq() (SMP only)</para></listitem>
|
||||||
<listitem><para>set_irq_type()</para></listitem>
|
<listitem><para>irq_set_irq_type()</para></listitem>
|
||||||
<listitem><para>set_irq_wake()</para></listitem>
|
<listitem><para>irq_set_irq_wake()</para></listitem>
|
||||||
<listitem><para>set_irq_data()</para></listitem>
|
<listitem><para>irq_set_handler_data()</para></listitem>
|
||||||
<listitem><para>set_irq_chip()</para></listitem>
|
<listitem><para>irq_set_chip()</para></listitem>
|
||||||
<listitem><para>set_irq_chip_data()</para></listitem>
|
<listitem><para>irq_set_chip_data()</para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
See the autogenerated function documentation for details.
|
See the autogenerated function documentation for details.
|
||||||
</para>
|
</para>
|
||||||
|
@ -225,6 +225,8 @@
|
||||||
<listitem><para>handle_fasteoi_irq</para></listitem>
|
<listitem><para>handle_fasteoi_irq</para></listitem>
|
||||||
<listitem><para>handle_simple_irq</para></listitem>
|
<listitem><para>handle_simple_irq</para></listitem>
|
||||||
<listitem><para>handle_percpu_irq</para></listitem>
|
<listitem><para>handle_percpu_irq</para></listitem>
|
||||||
|
<listitem><para>handle_edge_eoi_irq</para></listitem>
|
||||||
|
<listitem><para>handle_bad_irq</para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
The interrupt flow handlers (either predefined or architecture
|
The interrupt flow handlers (either predefined or architecture
|
||||||
specific) are assigned to specific interrupts by the architecture
|
specific) are assigned to specific interrupts by the architecture
|
||||||
|
@ -241,13 +243,13 @@
|
||||||
<programlisting>
|
<programlisting>
|
||||||
default_enable(struct irq_data *data)
|
default_enable(struct irq_data *data)
|
||||||
{
|
{
|
||||||
desc->chip->irq_unmask(data);
|
desc->irq_data.chip->irq_unmask(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
default_disable(struct irq_data *data)
|
default_disable(struct irq_data *data)
|
||||||
{
|
{
|
||||||
if (!delay_disable(data))
|
if (!delay_disable(data))
|
||||||
desc->chip->irq_mask(data);
|
desc->irq_data.chip->irq_mask(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
default_ack(struct irq_data *data)
|
default_ack(struct irq_data *data)
|
||||||
|
@ -284,9 +286,9 @@ noop(struct irq_data *data))
|
||||||
<para>
|
<para>
|
||||||
The following control flow is implemented (simplified excerpt):
|
The following control flow is implemented (simplified excerpt):
|
||||||
<programlisting>
|
<programlisting>
|
||||||
desc->chip->irq_mask();
|
desc->irq_data.chip->irq_mask_ack();
|
||||||
handle_IRQ_event(desc->action);
|
handle_irq_event(desc->action);
|
||||||
desc->chip->irq_unmask();
|
desc->irq_data.chip->irq_unmask();
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
@ -300,8 +302,8 @@ desc->chip->irq_unmask();
|
||||||
<para>
|
<para>
|
||||||
The following control flow is implemented (simplified excerpt):
|
The following control flow is implemented (simplified excerpt):
|
||||||
<programlisting>
|
<programlisting>
|
||||||
handle_IRQ_event(desc->action);
|
handle_irq_event(desc->action);
|
||||||
desc->chip->irq_eoi();
|
desc->irq_data.chip->irq_eoi();
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
@ -315,17 +317,17 @@ desc->chip->irq_eoi();
|
||||||
The following control flow is implemented (simplified excerpt):
|
The following control flow is implemented (simplified excerpt):
|
||||||
<programlisting>
|
<programlisting>
|
||||||
if (desc->status & running) {
|
if (desc->status & running) {
|
||||||
desc->chip->irq_mask();
|
desc->irq_data.chip->irq_mask_ack();
|
||||||
desc->status |= pending | masked;
|
desc->status |= pending | masked;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
desc->chip->irq_ack();
|
desc->irq_data.chip->irq_ack();
|
||||||
desc->status |= running;
|
desc->status |= running;
|
||||||
do {
|
do {
|
||||||
if (desc->status & masked)
|
if (desc->status & masked)
|
||||||
desc->chip->irq_unmask();
|
desc->irq_data.chip->irq_unmask();
|
||||||
desc->status &= ~pending;
|
desc->status &= ~pending;
|
||||||
handle_IRQ_event(desc->action);
|
handle_irq_event(desc->action);
|
||||||
} while (status & pending);
|
} while (status & pending);
|
||||||
desc->status &= ~running;
|
desc->status &= ~running;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
@ -344,7 +346,7 @@ desc->status &= ~running;
|
||||||
<para>
|
<para>
|
||||||
The following control flow is implemented (simplified excerpt):
|
The following control flow is implemented (simplified excerpt):
|
||||||
<programlisting>
|
<programlisting>
|
||||||
handle_IRQ_event(desc->action);
|
handle_irq_event(desc->action);
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
@ -362,12 +364,29 @@ handle_IRQ_event(desc->action);
|
||||||
<para>
|
<para>
|
||||||
The following control flow is implemented (simplified excerpt):
|
The following control flow is implemented (simplified excerpt):
|
||||||
<programlisting>
|
<programlisting>
|
||||||
handle_IRQ_event(desc->action);
|
if (desc->irq_data.chip->irq_ack)
|
||||||
if (desc->chip->irq_eoi)
|
desc->irq_data.chip->irq_ack();
|
||||||
desc->chip->irq_eoi();
|
handle_irq_event(desc->action);
|
||||||
|
if (desc->irq_data.chip->irq_eoi)
|
||||||
|
desc->irq_data.chip->irq_eoi();
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
<sect3 id="EOI_Edge_IRQ_flow_handler">
|
||||||
|
<title>EOI Edge IRQ flow handler</title>
|
||||||
|
<para>
|
||||||
|
handle_edge_eoi_irq provides an abnomination of the edge
|
||||||
|
handler which is solely used to tame a badly wreckaged
|
||||||
|
irq controller on powerpc/cell.
|
||||||
|
</para>
|
||||||
|
</sect3>
|
||||||
|
<sect3 id="BAD_IRQ_flow_handler">
|
||||||
|
<title>Bad IRQ flow handler</title>
|
||||||
|
<para>
|
||||||
|
handle_bad_irq is used for spurious interrupts which
|
||||||
|
have no real handler assigned..
|
||||||
|
</para>
|
||||||
|
</sect3>
|
||||||
</sect2>
|
</sect2>
|
||||||
<sect2 id="Quirks_and_optimizations">
|
<sect2 id="Quirks_and_optimizations">
|
||||||
<title>Quirks and optimizations</title>
|
<title>Quirks and optimizations</title>
|
||||||
|
@ -410,6 +429,7 @@ if (desc->chip->irq_eoi)
|
||||||
<listitem><para>irq_mask_ack() - Optional, recommended for performance</para></listitem>
|
<listitem><para>irq_mask_ack() - Optional, recommended for performance</para></listitem>
|
||||||
<listitem><para>irq_mask()</para></listitem>
|
<listitem><para>irq_mask()</para></listitem>
|
||||||
<listitem><para>irq_unmask()</para></listitem>
|
<listitem><para>irq_unmask()</para></listitem>
|
||||||
|
<listitem><para>irq_eoi() - Optional, required for eoi flow handlers</para></listitem>
|
||||||
<listitem><para>irq_retrigger() - Optional</para></listitem>
|
<listitem><para>irq_retrigger() - Optional</para></listitem>
|
||||||
<listitem><para>irq_set_type() - Optional</para></listitem>
|
<listitem><para>irq_set_type() - Optional</para></listitem>
|
||||||
<listitem><para>irq_set_wake() - Optional</para></listitem>
|
<listitem><para>irq_set_wake() - Optional</para></listitem>
|
||||||
|
@ -424,32 +444,24 @@ if (desc->chip->irq_eoi)
|
||||||
<chapter id="doirq">
|
<chapter id="doirq">
|
||||||
<title>__do_IRQ entry point</title>
|
<title>__do_IRQ entry point</title>
|
||||||
<para>
|
<para>
|
||||||
The original implementation __do_IRQ() is an alternative entry
|
The original implementation __do_IRQ() was an alternative entry
|
||||||
point for all types of interrupts.
|
point for all types of interrupts. It not longer exists.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
This handler turned out to be not suitable for all
|
This handler turned out to be not suitable for all
|
||||||
interrupt hardware and was therefore reimplemented with split
|
interrupt hardware and was therefore reimplemented with split
|
||||||
functionality for egde/level/simple/percpu interrupts. This is not
|
functionality for edge/level/simple/percpu interrupts. This is not
|
||||||
only a functional optimization. It also shortens code paths for
|
only a functional optimization. It also shortens code paths for
|
||||||
interrupts.
|
interrupts.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
To make use of the split implementation, replace the call to
|
|
||||||
__do_IRQ by a call to desc->handle_irq() and associate
|
|
||||||
the appropriate handler function to desc->handle_irq().
|
|
||||||
In most cases the generic handler implementations should
|
|
||||||
be sufficient.
|
|
||||||
</para>
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="locking">
|
<chapter id="locking">
|
||||||
<title>Locking on SMP</title>
|
<title>Locking on SMP</title>
|
||||||
<para>
|
<para>
|
||||||
The locking of chip registers is up to the architecture that
|
The locking of chip registers is up to the architecture that
|
||||||
defines the chip primitives. There is a chip->lock field that can be used
|
defines the chip primitives. The per-irq structure is
|
||||||
for serialization, but the generic layer does not touch it. The per-irq
|
protected via desc->lock, by the generic layer.
|
||||||
structure is protected via desc->lock, by the generic layer.
|
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="structs">
|
<chapter id="structs">
|
||||||
|
|
|
@ -270,6 +270,7 @@
|
||||||
<!ENTITY sub-write SYSTEM "v4l/func-write.xml">
|
<!ENTITY sub-write SYSTEM "v4l/func-write.xml">
|
||||||
<!ENTITY sub-io SYSTEM "v4l/io.xml">
|
<!ENTITY sub-io SYSTEM "v4l/io.xml">
|
||||||
<!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml">
|
<!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml">
|
||||||
|
<!ENTITY sub-m420 SYSTEM "v4l/pixfmt-m420.xml">
|
||||||
<!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
<!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml">
|
||||||
<!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml">
|
<!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml">
|
||||||
<!ENTITY sub-nv12mt SYSTEM "v4l/pixfmt-nv12mt.xml">
|
<!ENTITY sub-nv12mt SYSTEM "v4l/pixfmt-nv12mt.xml">
|
||||||
|
@ -292,8 +293,11 @@
|
||||||
<!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
<!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml">
|
||||||
<!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
<!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml">
|
||||||
<!ENTITY sub-srggb10 SYSTEM "v4l/pixfmt-srggb10.xml">
|
<!ENTITY sub-srggb10 SYSTEM "v4l/pixfmt-srggb10.xml">
|
||||||
|
<!ENTITY sub-srggb12 SYSTEM "v4l/pixfmt-srggb12.xml">
|
||||||
<!ENTITY sub-srggb8 SYSTEM "v4l/pixfmt-srggb8.xml">
|
<!ENTITY sub-srggb8 SYSTEM "v4l/pixfmt-srggb8.xml">
|
||||||
<!ENTITY sub-y10 SYSTEM "v4l/pixfmt-y10.xml">
|
<!ENTITY sub-y10 SYSTEM "v4l/pixfmt-y10.xml">
|
||||||
|
<!ENTITY sub-y12 SYSTEM "v4l/pixfmt-y12.xml">
|
||||||
|
<!ENTITY sub-y10b SYSTEM "v4l/pixfmt-y10b.xml">
|
||||||
<!ENTITY sub-pixfmt SYSTEM "v4l/pixfmt.xml">
|
<!ENTITY sub-pixfmt SYSTEM "v4l/pixfmt.xml">
|
||||||
<!ENTITY sub-cropcap SYSTEM "v4l/vidioc-cropcap.xml">
|
<!ENTITY sub-cropcap SYSTEM "v4l/vidioc-cropcap.xml">
|
||||||
<!ENTITY sub-dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml">
|
<!ENTITY sub-dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml">
|
||||||
|
@ -370,9 +374,9 @@
|
||||||
<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
|
<!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
|
||||||
|
|
||||||
<!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
|
<!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
|
||||||
<!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml">
|
<!ENTITY sub-media-func-open SYSTEM "v4l/media-func-open.xml">
|
||||||
<!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml">
|
<!ENTITY sub-media-func-close SYSTEM "v4l/media-func-close.xml">
|
||||||
<!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml">
|
<!ENTITY sub-media-func-ioctl SYSTEM "v4l/media-func-ioctl.xml">
|
||||||
<!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
|
<!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
|
||||||
<!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml">
|
<!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml">
|
||||||
<!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml">
|
<!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml">
|
||||||
|
|
|
@ -189,8 +189,7 @@ static void __iomem *baseaddr;
|
||||||
<title>Partition defines</title>
|
<title>Partition defines</title>
|
||||||
<para>
|
<para>
|
||||||
If you want to divide your device into partitions, then
|
If you want to divide your device into partitions, then
|
||||||
enable the configuration switch CONFIG_MTD_PARTITIONS and define
|
define a partitioning scheme suitable to your board.
|
||||||
a partitioning scheme suitable to your board.
|
|
||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
#define NUM_PARTITIONS 2
|
#define NUM_PARTITIONS 2
|
||||||
|
|
|
@ -78,9 +78,9 @@
|
||||||
<appendix id="media-user-func">
|
<appendix id="media-user-func">
|
||||||
<title>Function Reference</title>
|
<title>Function Reference</title>
|
||||||
<!-- Keep this alphabetically sorted. -->
|
<!-- Keep this alphabetically sorted. -->
|
||||||
&sub-media-open;
|
&sub-media-func-open;
|
||||||
&sub-media-close;
|
&sub-media-func-close;
|
||||||
&sub-media-ioctl;
|
&sub-media-func-ioctl;
|
||||||
<!-- All ioctls go here. -->
|
<!-- All ioctls go here. -->
|
||||||
&sub-media-ioc-device-info;
|
&sub-media-ioc-device-info;
|
||||||
&sub-media-ioc-enum-entities;
|
&sub-media-ioc-enum-entities;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><parameter>request</parameter></term>
|
<term><parameter>request</parameter></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>MEDIA_IOC_ENUM_LINKS</para>
|
<para>MEDIA_IOC_SETUP_LINK</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
|
147
Documentation/DocBook/v4l/pixfmt-m420.xml
Normal file
147
Documentation/DocBook/v4l/pixfmt-m420.xml
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
<refentry id="V4L2-PIX-FMT-M420">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_M420 ('M420')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname><constant>V4L2_PIX_FMT_M420</constant></refname>
|
||||||
|
<refpurpose>Format with ½ horizontal and vertical chroma
|
||||||
|
resolution, also known as YUV 4:2:0. Hybrid plane line-interleaved
|
||||||
|
layout.</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>M420 is a YUV format with ½ horizontal and vertical chroma
|
||||||
|
subsampling (YUV 4:2:0). Pixels are organized as interleaved luma and
|
||||||
|
chroma planes. Two lines of luma data are followed by one line of chroma
|
||||||
|
data.</para>
|
||||||
|
<para>The luma plane has one byte per pixel. The chroma plane contains
|
||||||
|
interleaved CbCr pixels subsampled by ½ in the horizontal and
|
||||||
|
vertical directions. Each CbCr pair belongs to four pixels. For example,
|
||||||
|
Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
|
||||||
|
Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
|
||||||
|
Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.</para>
|
||||||
|
|
||||||
|
<para>All line lengths are identical: if the Y lines include pad bytes
|
||||||
|
so do the CbCr lines.</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_M420</constant> 4 × 4
|
||||||
|
pixel image</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Byte Order.</title>
|
||||||
|
<para>Each cell is one byte.
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="5" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>start + 0:</entry>
|
||||||
|
<entry>Y'<subscript>00</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 4:</entry>
|
||||||
|
<entry>Y'<subscript>10</subscript></entry>
|
||||||
|
<entry>Y'<subscript>11</subscript></entry>
|
||||||
|
<entry>Y'<subscript>12</subscript></entry>
|
||||||
|
<entry>Y'<subscript>13</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 8:</entry>
|
||||||
|
<entry>Cb<subscript>00</subscript></entry>
|
||||||
|
<entry>Cr<subscript>00</subscript></entry>
|
||||||
|
<entry>Cb<subscript>01</subscript></entry>
|
||||||
|
<entry>Cr<subscript>01</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 16:</entry>
|
||||||
|
<entry>Y'<subscript>20</subscript></entry>
|
||||||
|
<entry>Y'<subscript>21</subscript></entry>
|
||||||
|
<entry>Y'<subscript>22</subscript></entry>
|
||||||
|
<entry>Y'<subscript>23</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 20:</entry>
|
||||||
|
<entry>Y'<subscript>30</subscript></entry>
|
||||||
|
<entry>Y'<subscript>31</subscript></entry>
|
||||||
|
<entry>Y'<subscript>32</subscript></entry>
|
||||||
|
<entry>Y'<subscript>33</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 24:</entry>
|
||||||
|
<entry>Cb<subscript>10</subscript></entry>
|
||||||
|
<entry>Cr<subscript>10</subscript></entry>
|
||||||
|
<entry>Cb<subscript>11</subscript></entry>
|
||||||
|
<entry>Cr<subscript>11</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Color Sample Location.</title>
|
||||||
|
<para>
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="7" align="center">
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>0</entry><entry></entry><entry>1</entry><entry></entry>
|
||||||
|
<entry>2</entry><entry></entry><entry>3</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>0</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>1</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>2</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||||
|
<entry></entry><entry>C</entry><entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>3</entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||||
|
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-parent-document: "pixfmt.sgml"
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
||||||
|
-->
|
43
Documentation/DocBook/v4l/pixfmt-y10b.xml
Normal file
43
Documentation/DocBook/v4l/pixfmt-y10b.xml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<refentry id="V4L2-PIX-FMT-Y10BPACK">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_Y10BPACK ('Y10B')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname><constant>V4L2_PIX_FMT_Y10BPACK</constant></refname>
|
||||||
|
<refpurpose>Grey-scale image as a bit-packed array</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This is a packed grey-scale image format with a depth of 10 bits per
|
||||||
|
pixel. Pixels are stored in a bit-packed array of 10bit bits per pixel,
|
||||||
|
with no padding between them and with the most significant bits coming
|
||||||
|
first from the left.</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_Y10BPACK</constant> 4 pixel data stream taking 5 bytes</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Bit-packed representation</title>
|
||||||
|
<para>pixels cross the byte boundary and have a ratio of 5 bytes for each 4
|
||||||
|
pixels.
|
||||||
|
<informaltable frame="all">
|
||||||
|
<tgroup cols="5" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>Y'<subscript>00[9:2]</subscript></entry>
|
||||||
|
<entry>Y'<subscript>00[1:0]</subscript>Y'<subscript>01[9:4]</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01[3:0]</subscript>Y'<subscript>02[9:6]</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02[5:0]</subscript>Y'<subscript>03[9:8]</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03[7:0]</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
79
Documentation/DocBook/v4l/pixfmt-y12.xml
Normal file
79
Documentation/DocBook/v4l/pixfmt-y12.xml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<refentry id="V4L2-PIX-FMT-Y12">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>V4L2_PIX_FMT_Y12 ('Y12 ')</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname><constant>V4L2_PIX_FMT_Y12</constant></refname>
|
||||||
|
<refpurpose>Grey-scale image</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This is a grey-scale image with a depth of 12 bits per pixel. Pixels
|
||||||
|
are stored in 16-bit words with unused high bits padded with 0. The least
|
||||||
|
significant byte is stored at lower memory addresses (little-endian).</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title><constant>V4L2_PIX_FMT_Y12</constant> 4 × 4
|
||||||
|
pixel image</title>
|
||||||
|
|
||||||
|
<formalpara>
|
||||||
|
<title>Byte Order.</title>
|
||||||
|
<para>Each cell is one byte.
|
||||||
|
<informaltable frame="none">
|
||||||
|
<tgroup cols="9" align="center">
|
||||||
|
<colspec align="left" colwidth="2*" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>start + 0:</entry>
|
||||||
|
<entry>Y'<subscript>00low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>00high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>01high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>02high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>03high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 8:</entry>
|
||||||
|
<entry>Y'<subscript>10low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>10high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>11low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>11high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>12low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>12high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>13low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>13high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 16:</entry>
|
||||||
|
<entry>Y'<subscript>20low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>20high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>21low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>21high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>22low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>22high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>23low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>23high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>start + 24:</entry>
|
||||||
|
<entry>Y'<subscript>30low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>30high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>31low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>31high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>32low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>32high</subscript></entry>
|
||||||
|
<entry>Y'<subscript>33low</subscript></entry>
|
||||||
|
<entry>Y'<subscript>33high</subscript></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
</para>
|
||||||
|
</formalpara>
|
||||||
|
</example>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
|
@ -673,6 +673,7 @@ access the palette, this must be done with ioctls of the Linux framebuffer API.<
|
||||||
&sub-srggb8;
|
&sub-srggb8;
|
||||||
&sub-sbggr16;
|
&sub-sbggr16;
|
||||||
&sub-srggb10;
|
&sub-srggb10;
|
||||||
|
&sub-srggb12;
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="yuv-formats">
|
<section id="yuv-formats">
|
||||||
|
@ -696,6 +697,8 @@ information.</para>
|
||||||
&sub-packed-yuv;
|
&sub-packed-yuv;
|
||||||
&sub-grey;
|
&sub-grey;
|
||||||
&sub-y10;
|
&sub-y10;
|
||||||
|
&sub-y12;
|
||||||
|
&sub-y10b;
|
||||||
&sub-y16;
|
&sub-y16;
|
||||||
&sub-yuyv;
|
&sub-yuyv;
|
||||||
&sub-uyvy;
|
&sub-uyvy;
|
||||||
|
@ -711,6 +714,7 @@ information.</para>
|
||||||
&sub-nv12m;
|
&sub-nv12m;
|
||||||
&sub-nv12mt;
|
&sub-nv12mt;
|
||||||
&sub-nv16;
|
&sub-nv16;
|
||||||
|
&sub-m420;
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
|
@ -456,6 +456,23 @@
|
||||||
<entry>b<subscript>1</subscript></entry>
|
<entry>b<subscript>1</subscript></entry>
|
||||||
<entry>b<subscript>0</subscript></entry>
|
<entry>b<subscript>0</subscript></entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row id="V4L2-MBUS-FMT-SGBRG8-1X8">
|
||||||
|
<entry>V4L2_MBUS_FMT_SGBRG8_1X8</entry>
|
||||||
|
<entry>0x3013</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>g<subscript>7</subscript></entry>
|
||||||
|
<entry>g<subscript>6</subscript></entry>
|
||||||
|
<entry>g<subscript>5</subscript></entry>
|
||||||
|
<entry>g<subscript>4</subscript></entry>
|
||||||
|
<entry>g<subscript>3</subscript></entry>
|
||||||
|
<entry>g<subscript>2</subscript></entry>
|
||||||
|
<entry>g<subscript>1</subscript></entry>
|
||||||
|
<entry>g<subscript>0</subscript></entry>
|
||||||
|
</row>
|
||||||
<row id="V4L2-MBUS-FMT-SGRBG8-1X8">
|
<row id="V4L2-MBUS-FMT-SGRBG8-1X8">
|
||||||
<entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry>
|
<entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry>
|
||||||
<entry>0x3002</entry>
|
<entry>0x3002</entry>
|
||||||
|
@ -473,6 +490,23 @@
|
||||||
<entry>g<subscript>1</subscript></entry>
|
<entry>g<subscript>1</subscript></entry>
|
||||||
<entry>g<subscript>0</subscript></entry>
|
<entry>g<subscript>0</subscript></entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row id="V4L2-MBUS-FMT-SRGGB8-1X8">
|
||||||
|
<entry>V4L2_MBUS_FMT_SRGGB8_1X8</entry>
|
||||||
|
<entry>0x3014</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>r<subscript>7</subscript></entry>
|
||||||
|
<entry>r<subscript>6</subscript></entry>
|
||||||
|
<entry>r<subscript>5</subscript></entry>
|
||||||
|
<entry>r<subscript>4</subscript></entry>
|
||||||
|
<entry>r<subscript>3</subscript></entry>
|
||||||
|
<entry>r<subscript>2</subscript></entry>
|
||||||
|
<entry>r<subscript>1</subscript></entry>
|
||||||
|
<entry>r<subscript>0</subscript></entry>
|
||||||
|
</row>
|
||||||
<row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8">
|
<row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8">
|
||||||
<entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry>
|
<entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry>
|
||||||
<entry>0x300b</entry>
|
<entry>0x300b</entry>
|
||||||
|
@ -2159,6 +2193,31 @@
|
||||||
<entry>u<subscript>1</subscript></entry>
|
<entry>u<subscript>1</subscript></entry>
|
||||||
<entry>u<subscript>0</subscript></entry>
|
<entry>u<subscript>0</subscript></entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row id="V4L2-MBUS-FMT-Y12-1X12">
|
||||||
|
<entry>V4L2_MBUS_FMT_Y12_1X12</entry>
|
||||||
|
<entry>0x2013</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>-</entry>
|
||||||
|
<entry>y<subscript>11</subscript></entry>
|
||||||
|
<entry>y<subscript>10</subscript></entry>
|
||||||
|
<entry>y<subscript>9</subscript></entry>
|
||||||
|
<entry>y<subscript>8</subscript></entry>
|
||||||
|
<entry>y<subscript>7</subscript></entry>
|
||||||
|
<entry>y<subscript>6</subscript></entry>
|
||||||
|
<entry>y<subscript>5</subscript></entry>
|
||||||
|
<entry>y<subscript>4</subscript></entry>
|
||||||
|
<entry>y<subscript>3</subscript></entry>
|
||||||
|
<entry>y<subscript>2</subscript></entry>
|
||||||
|
<entry>y<subscript>1</subscript></entry>
|
||||||
|
<entry>y<subscript>0</subscript></entry>
|
||||||
|
</row>
|
||||||
<row id="V4L2-MBUS-FMT-UYVY8-1X16">
|
<row id="V4L2-MBUS-FMT-UYVY8-1X16">
|
||||||
<entry>V4L2_MBUS_FMT_UYVY8_1X16</entry>
|
<entry>V4L2_MBUS_FMT_UYVY8_1X16</entry>
|
||||||
<entry>0x200f</entry>
|
<entry>0x200f</entry>
|
||||||
|
@ -2463,5 +2522,51 @@
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>JPEG Compressed Formats</title>
|
||||||
|
|
||||||
|
<para>Those data formats consist of an ordered sequence of 8-bit bytes
|
||||||
|
obtained from JPEG compression process. Additionally to the
|
||||||
|
<constant>_JPEG</constant> prefix the format code is made of
|
||||||
|
the following information.
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>The number of bus samples per entropy encoded byte.</para></listitem>
|
||||||
|
<listitem><para>The bus width.</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>For instance, for a JPEG baseline process and an 8-bit bus width
|
||||||
|
the format will be named <constant>V4L2_MBUS_FMT_JPEG_1X8</constant>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>The following table lists existing JPEG compressed formats.</para>
|
||||||
|
|
||||||
|
<table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-jpeg">
|
||||||
|
<title>JPEG Formats</title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
<colspec colname="id" align="left" />
|
||||||
|
<colspec colname="code" align="left"/>
|
||||||
|
<colspec colname="remarks" align="left"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Identifier</entry>
|
||||||
|
<entry>Code</entry>
|
||||||
|
<entry>Remarks</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody valign="top">
|
||||||
|
<row id="V4L2-MBUS-FMT-JPEG-1X8">
|
||||||
|
<entry>V4L2_MBUS_FMT_JPEG_1X8</entry>
|
||||||
|
<entry>0x4001</entry>
|
||||||
|
<entry>Besides of its usage for the parallel bus this format is
|
||||||
|
recommended for transmission of JPEG data over MIPI CSI bus
|
||||||
|
using the User Defined 8-bit Data types.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -311,6 +311,9 @@ struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> {
|
||||||
#define <link linkend="V4L2-PIX-FMT-Y10">V4L2_PIX_FMT_Y10</link> v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
|
#define <link linkend="V4L2-PIX-FMT-Y10">V4L2_PIX_FMT_Y10</link> v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
|
||||||
#define <link linkend="V4L2-PIX-FMT-Y16">V4L2_PIX_FMT_Y16</link> v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
|
#define <link linkend="V4L2-PIX-FMT-Y16">V4L2_PIX_FMT_Y16</link> v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
|
||||||
|
|
||||||
|
/* Grey bit-packed formats */
|
||||||
|
#define <link linkend="V4L2-PIX-FMT-Y10BPACK">V4L2_PIX_FMT_Y10BPACK</link> v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */
|
||||||
|
|
||||||
/* Palette formats */
|
/* Palette formats */
|
||||||
#define <link linkend="V4L2-PIX-FMT-PAL8">V4L2_PIX_FMT_PAL8</link> v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */
|
#define <link linkend="V4L2-PIX-FMT-PAL8">V4L2_PIX_FMT_PAL8</link> v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */
|
||||||
|
|
||||||
|
@ -333,6 +336,7 @@ struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> {
|
||||||
#define <link linkend="V4L2-PIX-FMT-YUV420">V4L2_PIX_FMT_YUV420</link> v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */
|
#define <link linkend="V4L2-PIX-FMT-YUV420">V4L2_PIX_FMT_YUV420</link> v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */
|
||||||
#define <link linkend="V4L2-PIX-FMT-HI240">V4L2_PIX_FMT_HI240</link> v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
|
#define <link linkend="V4L2-PIX-FMT-HI240">V4L2_PIX_FMT_HI240</link> v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
|
||||||
#define <link linkend="V4L2-PIX-FMT-HM12">V4L2_PIX_FMT_HM12</link> v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
|
#define <link linkend="V4L2-PIX-FMT-HM12">V4L2_PIX_FMT_HM12</link> v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
|
||||||
|
#define <link linkend="V4L2-PIX-FMT-M420">V4L2_PIX_FMT_M420</link> v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
|
||||||
|
|
||||||
/* two planes -- one Y, one Cr + Cb interleaved */
|
/* two planes -- one Y, one Cr + Cb interleaved */
|
||||||
#define <link linkend="V4L2-PIX-FMT-NV12">V4L2_PIX_FMT_NV12</link> v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
#define <link linkend="V4L2-PIX-FMT-NV12">V4L2_PIX_FMT_NV12</link> v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
||||||
|
|
|
@ -209,7 +209,7 @@ tools. One such tool that is particularly recommended is the Linux
|
||||||
Cross-Reference project, which is able to present source code in a
|
Cross-Reference project, which is able to present source code in a
|
||||||
self-referential, indexed webpage format. An excellent up-to-date
|
self-referential, indexed webpage format. An excellent up-to-date
|
||||||
repository of the kernel code may be found at:
|
repository of the kernel code may be found at:
|
||||||
http://users.sosdg.org/~qiyong/lxr/
|
http://lxr.linux.no/+trees
|
||||||
|
|
||||||
|
|
||||||
The development process
|
The development process
|
||||||
|
|
|
@ -4,10 +4,11 @@ ChangeLog:
|
||||||
|
|
||||||
SMP IRQ affinity
|
SMP IRQ affinity
|
||||||
|
|
||||||
/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
|
/proc/irq/IRQ#/smp_affinity and /proc/irq/IRQ#/smp_affinity_list specify
|
||||||
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
|
which target CPUs are permitted for a given IRQ source. It's a bitmask
|
||||||
to turn off all CPUs, and if an IRQ controller does not support IRQ
|
(smp_affinity) or cpu list (smp_affinity_list) of allowed CPUs. It's not
|
||||||
affinity then the value will not change from the default 0xffffffff.
|
allowed to turn off all CPUs, and if an IRQ controller does not support
|
||||||
|
IRQ affinity then the value will not change from the default of all cpus.
|
||||||
|
|
||||||
/proc/irq/default_smp_affinity specifies default affinity mask that applies
|
/proc/irq/default_smp_affinity specifies default affinity mask that applies
|
||||||
to all non-active IRQs. Once IRQ is allocated/activated its affinity bitmask
|
to all non-active IRQs. Once IRQ is allocated/activated its affinity bitmask
|
||||||
|
@ -54,3 +55,11 @@ round-trip min/avg/max = 0.1/0.5/585.4 ms
|
||||||
This time around IRQ44 was delivered only to the last four processors.
|
This time around IRQ44 was delivered only to the last four processors.
|
||||||
i.e counters for the CPU0-3 did not change.
|
i.e counters for the CPU0-3 did not change.
|
||||||
|
|
||||||
|
Here is an example of limiting that same irq (44) to cpus 1024 to 1031:
|
||||||
|
|
||||||
|
[root@moon 44]# echo 1024-1031 > smp_affinity
|
||||||
|
[root@moon 44]# cat smp_affinity
|
||||||
|
1024-1031
|
||||||
|
|
||||||
|
Note that to do this with a bitmask would require 32 bitmasks of zero
|
||||||
|
to follow the pertinent one.
|
||||||
|
|
|
@ -21,7 +21,7 @@ rcu.txt
|
||||||
RTFP.txt
|
RTFP.txt
|
||||||
- List of RCU papers (bibliography) going back to 1980.
|
- List of RCU papers (bibliography) going back to 1980.
|
||||||
stallwarn.txt
|
stallwarn.txt
|
||||||
- RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR)
|
- RCU CPU stall warnings (module parameter rcu_cpu_stall_suppress)
|
||||||
torture.txt
|
torture.txt
|
||||||
- RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST)
|
- RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST)
|
||||||
trace.txt
|
trace.txt
|
||||||
|
|
|
@ -1,22 +1,25 @@
|
||||||
Using RCU's CPU Stall Detector
|
Using RCU's CPU Stall Detector
|
||||||
|
|
||||||
The CONFIG_RCU_CPU_STALL_DETECTOR kernel config parameter enables
|
The rcu_cpu_stall_suppress module parameter enables RCU's CPU stall
|
||||||
RCU's CPU stall detector, which detects conditions that unduly delay
|
detector, which detects conditions that unduly delay RCU grace periods.
|
||||||
RCU grace periods. The stall detector's idea of what constitutes
|
This module parameter enables CPU stall detection by default, but
|
||||||
"unduly delayed" is controlled by a set of C preprocessor macros:
|
may be overridden via boot-time parameter or at runtime via sysfs.
|
||||||
|
The stall detector's idea of what constitutes "unduly delayed" is
|
||||||
|
controlled by a set of kernel configuration variables and cpp macros:
|
||||||
|
|
||||||
RCU_SECONDS_TILL_STALL_CHECK
|
CONFIG_RCU_CPU_STALL_TIMEOUT
|
||||||
|
|
||||||
This macro defines the period of time that RCU will wait from
|
This kernel configuration parameter defines the period of time
|
||||||
the beginning of a grace period until it issues an RCU CPU
|
that RCU will wait from the beginning of a grace period until it
|
||||||
stall warning. This time period is normally ten seconds.
|
issues an RCU CPU stall warning. This time period is normally
|
||||||
|
ten seconds.
|
||||||
|
|
||||||
RCU_SECONDS_TILL_STALL_RECHECK
|
RCU_SECONDS_TILL_STALL_RECHECK
|
||||||
|
|
||||||
This macro defines the period of time that RCU will wait after
|
This macro defines the period of time that RCU will wait after
|
||||||
issuing a stall warning until it issues another stall warning
|
issuing a stall warning until it issues another stall warning
|
||||||
for the same stall. This time period is normally set to thirty
|
for the same stall. This time period is normally set to three
|
||||||
seconds.
|
times the check interval plus thirty seconds.
|
||||||
|
|
||||||
RCU_STALL_RAT_DELAY
|
RCU_STALL_RAT_DELAY
|
||||||
|
|
||||||
|
|
|
@ -10,34 +10,46 @@ for rcutree and next for rcutiny.
|
||||||
|
|
||||||
CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats
|
CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats
|
||||||
|
|
||||||
These implementations of RCU provides five debugfs files under the
|
These implementations of RCU provides several debugfs files under the
|
||||||
top-level directory RCU: rcu/rcudata (which displays fields in struct
|
top-level directory "rcu":
|
||||||
rcu_data), rcu/rcudata.csv (which is a .csv spreadsheet version of
|
|
||||||
rcu/rcudata), rcu/rcugp (which displays grace-period counters),
|
rcu/rcudata:
|
||||||
rcu/rcuhier (which displays the struct rcu_node hierarchy), and
|
Displays fields in struct rcu_data.
|
||||||
rcu/rcu_pending (which displays counts of the reasons that the
|
rcu/rcudata.csv:
|
||||||
rcu_pending() function decided that there was core RCU work to do).
|
Comma-separated values spreadsheet version of rcudata.
|
||||||
|
rcu/rcugp:
|
||||||
|
Displays grace-period counters.
|
||||||
|
rcu/rcuhier:
|
||||||
|
Displays the struct rcu_node hierarchy.
|
||||||
|
rcu/rcu_pending:
|
||||||
|
Displays counts of the reasons rcu_pending() decided that RCU had
|
||||||
|
work to do.
|
||||||
|
rcu/rcutorture:
|
||||||
|
Displays rcutorture test progress.
|
||||||
|
rcu/rcuboost:
|
||||||
|
Displays RCU boosting statistics. Only present if
|
||||||
|
CONFIG_RCU_BOOST=y.
|
||||||
|
|
||||||
The output of "cat rcu/rcudata" looks as follows:
|
The output of "cat rcu/rcudata" looks as follows:
|
||||||
|
|
||||||
rcu_sched:
|
rcu_sched:
|
||||||
0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10
|
0 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=545/1/0 df=50 of=0 ri=0 ql=163 qs=NRW. kt=0/W/0 ktl=ebc3 b=10 ci=153737 co=0 ca=0
|
||||||
1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10
|
1 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=967/1/0 df=58 of=0 ri=0 ql=634 qs=NRW. kt=0/W/1 ktl=58c b=10 ci=191037 co=0 ca=0
|
||||||
2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10
|
2 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1081/1/0 df=175 of=0 ri=0 ql=74 qs=N.W. kt=0/W/2 ktl=da94 b=10 ci=75991 co=0 ca=0
|
||||||
3 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=6681/1 dn=0 df=1545 of=0 ri=0 ql=0 b=10
|
3 c=20942 g=20943 pq=1 pqc=20942 qp=1 dt=1846/0/0 df=404 of=0 ri=0 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=72261 co=0 ca=0
|
||||||
4 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1003/1 dn=0 df=1992 of=0 ri=0 ql=0 b=10
|
4 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=369/1/0 df=83 of=0 ri=0 ql=48 qs=N.W. kt=0/W/4 ktl=e0e7 b=10 ci=128365 co=0 ca=0
|
||||||
5 c=17829 g=17830 pq=1 pqc=17829 qp=1 dt=3887/1 dn=0 df=3331 of=0 ri=4 ql=2 b=10
|
5 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=381/1/0 df=64 of=0 ri=0 ql=169 qs=NRW. kt=0/W/5 ktl=fb2f b=10 ci=164360 co=0 ca=0
|
||||||
6 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=859/1 dn=0 df=3224 of=0 ri=0 ql=0 b=10
|
6 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1037/1/0 df=183 of=0 ri=0 ql=62 qs=N.W. kt=0/W/6 ktl=d2ad b=10 ci=65663 co=0 ca=0
|
||||||
7 c=17829 g=17830 pq=0 pqc=17829 qp=1 dt=3761/1 dn=0 df=1818 of=0 ri=0 ql=2 b=10
|
7 c=20897 g=20897 pq=1 pqc=20896 qp=0 dt=1572/0/0 df=382 of=0 ri=0 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=75006 co=0 ca=0
|
||||||
rcu_bh:
|
rcu_bh:
|
||||||
0 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=10951/1 dn=0 df=0 of=0 ri=0 ql=0 b=10
|
0 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=545/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/0 ktl=ebc3 b=10 ci=0 co=0 ca=0
|
||||||
1 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=16117/1 dn=0 df=13 of=0 ri=0 ql=0 b=10
|
1 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=967/1/0 df=3 of=0 ri=1 ql=0 qs=.... kt=0/W/1 ktl=58c b=10 ci=151 co=0 ca=0
|
||||||
2 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1445/1 dn=0 df=15 of=0 ri=0 ql=0 b=10
|
2 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1081/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/2 ktl=da94 b=10 ci=0 co=0 ca=0
|
||||||
3 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=6681/1 dn=0 df=9 of=0 ri=0 ql=0 b=10
|
3 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1846/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=0 co=0 ca=0
|
||||||
4 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1003/1 dn=0 df=15 of=0 ri=0 ql=0 b=10
|
4 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=369/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/4 ktl=e0e7 b=10 ci=0 co=0 ca=0
|
||||||
5 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3887/1 dn=0 df=15 of=0 ri=0 ql=0 b=10
|
5 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=381/1/0 df=4 of=0 ri=1 ql=0 qs=.... kt=0/W/5 ktl=fb2f b=10 ci=0 co=0 ca=0
|
||||||
6 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=859/1 dn=0 df=15 of=0 ri=0 ql=0 b=10
|
6 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1037/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/6 ktl=d2ad b=10 ci=0 co=0 ca=0
|
||||||
7 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3761/1 dn=0 df=15 of=0 ri=0 ql=0 b=10
|
7 c=1474 g=1474 pq=1 pqc=1473 qp=0 dt=1572/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=0 co=0 ca=0
|
||||||
|
|
||||||
The first section lists the rcu_data structures for rcu_sched, the second
|
The first section lists the rcu_data structures for rcu_sched, the second
|
||||||
for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an
|
for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an
|
||||||
|
@ -52,17 +64,18 @@ o The number at the beginning of each line is the CPU number.
|
||||||
substantially larger than the number of actual CPUs.
|
substantially larger than the number of actual CPUs.
|
||||||
|
|
||||||
o "c" is the count of grace periods that this CPU believes have
|
o "c" is the count of grace periods that this CPU believes have
|
||||||
completed. CPUs in dynticks idle mode may lag quite a ways
|
completed. Offlined CPUs and CPUs in dynticks idle mode may
|
||||||
behind, for example, CPU 4 under "rcu_sched" above, which has
|
lag quite a ways behind, for example, CPU 6 under "rcu_sched"
|
||||||
slept through the past 25 RCU grace periods. It is not unusual
|
above, which has been offline through not quite 40,000 RCU grace
|
||||||
to see CPUs lagging by thousands of grace periods.
|
periods. It is not unusual to see CPUs lagging by thousands of
|
||||||
|
grace periods.
|
||||||
|
|
||||||
o "g" is the count of grace periods that this CPU believes have
|
o "g" is the count of grace periods that this CPU believes have
|
||||||
started. Again, CPUs in dynticks idle mode may lag behind.
|
started. Again, offlined CPUs and CPUs in dynticks idle mode
|
||||||
If the "c" and "g" values are equal, this CPU has already
|
may lag behind. If the "c" and "g" values are equal, this CPU
|
||||||
reported a quiescent state for the last RCU grace period that
|
has already reported a quiescent state for the last RCU grace
|
||||||
it is aware of, otherwise, the CPU believes that it owes RCU a
|
period that it is aware of, otherwise, the CPU believes that it
|
||||||
quiescent state.
|
owes RCU a quiescent state.
|
||||||
|
|
||||||
o "pq" indicates that this CPU has passed through a quiescent state
|
o "pq" indicates that this CPU has passed through a quiescent state
|
||||||
for the current grace period. It is possible for "pq" to be
|
for the current grace period. It is possible for "pq" to be
|
||||||
|
@ -81,22 +94,16 @@ o "pqc" indicates which grace period the last-observed quiescent
|
||||||
the next grace period!
|
the next grace period!
|
||||||
|
|
||||||
o "qp" indicates that RCU still expects a quiescent state from
|
o "qp" indicates that RCU still expects a quiescent state from
|
||||||
this CPU.
|
this CPU. Offlined CPUs and CPUs in dyntick idle mode might
|
||||||
|
well have qp=1, which is OK: RCU is still ignoring them.
|
||||||
|
|
||||||
o "dt" is the current value of the dyntick counter that is incremented
|
o "dt" is the current value of the dyntick counter that is incremented
|
||||||
when entering or leaving dynticks idle state, either by the
|
when entering or leaving dynticks idle state, either by the
|
||||||
scheduler or by irq. The number after the "/" is the interrupt
|
scheduler or by irq. This number is even if the CPU is in
|
||||||
nesting depth when in dyntick-idle state, or one greater than
|
dyntick idle mode and odd otherwise. The number after the first
|
||||||
the interrupt-nesting depth otherwise.
|
"/" is the interrupt nesting depth when in dyntick-idle state,
|
||||||
|
or one greater than the interrupt-nesting depth otherwise.
|
||||||
This field is displayed only for CONFIG_NO_HZ kernels.
|
The number after the second "/" is the NMI nesting depth.
|
||||||
|
|
||||||
o "dn" is the current value of the dyntick counter that is incremented
|
|
||||||
when entering or leaving dynticks idle state via NMI. If both
|
|
||||||
the "dt" and "dn" values are even, then this CPU is in dynticks
|
|
||||||
idle mode and may be ignored by RCU. If either of these two
|
|
||||||
counters is odd, then RCU must be alert to the possibility of
|
|
||||||
an RCU read-side critical section running on this CPU.
|
|
||||||
|
|
||||||
This field is displayed only for CONFIG_NO_HZ kernels.
|
This field is displayed only for CONFIG_NO_HZ kernels.
|
||||||
|
|
||||||
|
@ -108,7 +115,7 @@ o "df" is the number of times that some other CPU has forced a
|
||||||
|
|
||||||
o "of" is the number of times that some other CPU has forced a
|
o "of" is the number of times that some other CPU has forced a
|
||||||
quiescent state on behalf of this CPU due to this CPU being
|
quiescent state on behalf of this CPU due to this CPU being
|
||||||
offline. In a perfect world, this might neve happen, but it
|
offline. In a perfect world, this might never happen, but it
|
||||||
turns out that offlining and onlining a CPU can take several grace
|
turns out that offlining and onlining a CPU can take several grace
|
||||||
periods, and so there is likely to be an extended period of time
|
periods, and so there is likely to be an extended period of time
|
||||||
when RCU believes that the CPU is online when it really is not.
|
when RCU believes that the CPU is online when it really is not.
|
||||||
|
@ -125,6 +132,62 @@ o "ql" is the number of RCU callbacks currently residing on
|
||||||
of what state they are in (new, waiting for grace period to
|
of what state they are in (new, waiting for grace period to
|
||||||
start, waiting for grace period to end, ready to invoke).
|
start, waiting for grace period to end, ready to invoke).
|
||||||
|
|
||||||
|
o "qs" gives an indication of the state of the callback queue
|
||||||
|
with four characters:
|
||||||
|
|
||||||
|
"N" Indicates that there are callbacks queued that are not
|
||||||
|
ready to be handled by the next grace period, and thus
|
||||||
|
will be handled by the grace period following the next
|
||||||
|
one.
|
||||||
|
|
||||||
|
"R" Indicates that there are callbacks queued that are
|
||||||
|
ready to be handled by the next grace period.
|
||||||
|
|
||||||
|
"W" Indicates that there are callbacks queued that are
|
||||||
|
waiting on the current grace period.
|
||||||
|
|
||||||
|
"D" Indicates that there are callbacks queued that have
|
||||||
|
already been handled by a prior grace period, and are
|
||||||
|
thus waiting to be invoked. Note that callbacks in
|
||||||
|
the process of being invoked are not counted here.
|
||||||
|
Callbacks in the process of being invoked are those
|
||||||
|
that have been removed from the rcu_data structures
|
||||||
|
queues by rcu_do_batch(), but which have not yet been
|
||||||
|
invoked.
|
||||||
|
|
||||||
|
If there are no callbacks in a given one of the above states,
|
||||||
|
the corresponding character is replaced by ".".
|
||||||
|
|
||||||
|
o "kt" is the per-CPU kernel-thread state. The digit preceding
|
||||||
|
the first slash is zero if there is no work pending and 1
|
||||||
|
otherwise. The character between the first pair of slashes is
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
"S" The kernel thread is stopped, in other words, all
|
||||||
|
CPUs corresponding to this rcu_node structure are
|
||||||
|
offline.
|
||||||
|
|
||||||
|
"R" The kernel thread is running.
|
||||||
|
|
||||||
|
"W" The kernel thread is waiting because there is no work
|
||||||
|
for it to do.
|
||||||
|
|
||||||
|
"O" The kernel thread is waiting because it has been
|
||||||
|
forced off of its designated CPU or because its
|
||||||
|
->cpus_allowed mask permits it to run on other than
|
||||||
|
its designated CPU.
|
||||||
|
|
||||||
|
"Y" The kernel thread is yielding to avoid hogging CPU.
|
||||||
|
|
||||||
|
"?" Unknown value, indicates a bug.
|
||||||
|
|
||||||
|
The number after the final slash is the CPU that the kthread
|
||||||
|
is actually running on.
|
||||||
|
|
||||||
|
o "ktl" is the low-order 16 bits (in hexadecimal) of the count of
|
||||||
|
the number of times that this CPU's per-CPU kthread has gone
|
||||||
|
through its loop servicing invoke_rcu_cpu_kthread() requests.
|
||||||
|
|
||||||
o "b" is the batch limit for this CPU. If more than this number
|
o "b" is the batch limit for this CPU. If more than this number
|
||||||
of RCU callbacks is ready to invoke, then the remainder will
|
of RCU callbacks is ready to invoke, then the remainder will
|
||||||
be deferred.
|
be deferred.
|
||||||
|
@ -174,14 +237,14 @@ o "gpnum" is the number of grace periods that have started. It is
|
||||||
The output of "cat rcu/rcuhier" looks as follows, with very long lines:
|
The output of "cat rcu/rcuhier" looks as follows, with very long lines:
|
||||||
|
|
||||||
c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6
|
c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6
|
||||||
1/1 .>. 0:127 ^0
|
1/1 ..>. 0:127 ^0
|
||||||
3/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
3/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3
|
||||||
3/3f .>. 0:5 ^0 2/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
3/3f ..>. 0:5 ^0 2/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3
|
||||||
rcu_bh:
|
rcu_bh:
|
||||||
c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0
|
c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0
|
||||||
0/1 .>. 0:127 ^0
|
0/1 ..>. 0:127 ^0
|
||||||
0/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
0/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3
|
||||||
0/3f .>. 0:5 ^0 0/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
0/3f ..>. 0:5 ^0 0/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3
|
||||||
|
|
||||||
This is once again split into "rcu_sched" and "rcu_bh" portions,
|
This is once again split into "rcu_sched" and "rcu_bh" portions,
|
||||||
and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional
|
and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional
|
||||||
|
@ -240,13 +303,20 @@ o Each element of the form "1/1 0:127 ^0" represents one struct
|
||||||
current grace period.
|
current grace period.
|
||||||
|
|
||||||
o The characters separated by the ">" indicate the state
|
o The characters separated by the ">" indicate the state
|
||||||
of the blocked-tasks lists. A "T" preceding the ">"
|
of the blocked-tasks lists. A "G" preceding the ">"
|
||||||
indicates that at least one task blocked in an RCU
|
indicates that at least one task blocked in an RCU
|
||||||
read-side critical section blocks the current grace
|
read-side critical section blocks the current grace
|
||||||
period, while a "." preceding the ">" indicates otherwise.
|
period, while a "E" preceding the ">" indicates that
|
||||||
The character following the ">" indicates similarly for
|
at least one task blocked in an RCU read-side critical
|
||||||
the next grace period. A "T" should appear in this
|
section blocks the current expedited grace period.
|
||||||
field only for rcu-preempt.
|
A "T" character following the ">" indicates that at
|
||||||
|
least one task is blocked within an RCU read-side
|
||||||
|
critical section, regardless of whether any current
|
||||||
|
grace period (expedited or normal) is inconvenienced.
|
||||||
|
A "." character appears if the corresponding condition
|
||||||
|
does not hold, so that "..>." indicates that no tasks
|
||||||
|
are blocked. In contrast, "GE>T" indicates maximal
|
||||||
|
inconvenience from blocked tasks.
|
||||||
|
|
||||||
o The numbers separated by the ":" are the range of CPUs
|
o The numbers separated by the ":" are the range of CPUs
|
||||||
served by this struct rcu_node. This can be helpful
|
served by this struct rcu_node. This can be helpful
|
||||||
|
@ -328,6 +398,113 @@ o "nn" is the number of times that this CPU needed nothing. Alert
|
||||||
is due to short-circuit evaluation in rcu_pending().
|
is due to short-circuit evaluation in rcu_pending().
|
||||||
|
|
||||||
|
|
||||||
|
The output of "cat rcu/rcutorture" looks as follows:
|
||||||
|
|
||||||
|
rcutorture test sequence: 0 (test in progress)
|
||||||
|
rcutorture update version number: 615
|
||||||
|
|
||||||
|
The first line shows the number of rcutorture tests that have completed
|
||||||
|
since boot. If a test is currently running, the "(test in progress)"
|
||||||
|
string will appear as shown above. The second line shows the number of
|
||||||
|
update cycles that the current test has started, or zero if there is
|
||||||
|
no test in progress.
|
||||||
|
|
||||||
|
|
||||||
|
The output of "cat rcu/rcuboost" looks as follows:
|
||||||
|
|
||||||
|
0:5 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f
|
||||||
|
balk: nt=0 egt=989 bt=0 nb=0 ny=0 nos=16
|
||||||
|
6:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f
|
||||||
|
balk: nt=0 egt=225 bt=0 nb=0 ny=0 nos=6
|
||||||
|
|
||||||
|
This information is output only for rcu_preempt. Each two-line entry
|
||||||
|
corresponds to a leaf rcu_node strcuture. The fields are as follows:
|
||||||
|
|
||||||
|
o "n:m" is the CPU-number range for the corresponding two-line
|
||||||
|
entry. In the sample output above, the first entry covers
|
||||||
|
CPUs zero through five and the second entry covers CPUs 6
|
||||||
|
and 7.
|
||||||
|
|
||||||
|
o "tasks=TNEB" gives the state of the various segments of the
|
||||||
|
rnp->blocked_tasks list:
|
||||||
|
|
||||||
|
"T" This indicates that there are some tasks that blocked
|
||||||
|
while running on one of the corresponding CPUs while
|
||||||
|
in an RCU read-side critical section.
|
||||||
|
|
||||||
|
"N" This indicates that some of the blocked tasks are preventing
|
||||||
|
the current normal (non-expedited) grace period from
|
||||||
|
completing.
|
||||||
|
|
||||||
|
"E" This indicates that some of the blocked tasks are preventing
|
||||||
|
the current expedited grace period from completing.
|
||||||
|
|
||||||
|
"B" This indicates that some of the blocked tasks are in
|
||||||
|
need of RCU priority boosting.
|
||||||
|
|
||||||
|
Each character is replaced with "." if the corresponding
|
||||||
|
condition does not hold.
|
||||||
|
|
||||||
|
o "kt" is the state of the RCU priority-boosting kernel
|
||||||
|
thread associated with the corresponding rcu_node structure.
|
||||||
|
The state can be one of the following:
|
||||||
|
|
||||||
|
"S" The kernel thread is stopped, in other words, all
|
||||||
|
CPUs corresponding to this rcu_node structure are
|
||||||
|
offline.
|
||||||
|
|
||||||
|
"R" The kernel thread is running.
|
||||||
|
|
||||||
|
"W" The kernel thread is waiting because there is no work
|
||||||
|
for it to do.
|
||||||
|
|
||||||
|
"Y" The kernel thread is yielding to avoid hogging CPU.
|
||||||
|
|
||||||
|
"?" Unknown value, indicates a bug.
|
||||||
|
|
||||||
|
o "ntb" is the number of tasks boosted.
|
||||||
|
|
||||||
|
o "neb" is the number of tasks boosted in order to complete an
|
||||||
|
expedited grace period.
|
||||||
|
|
||||||
|
o "nnb" is the number of tasks boosted in order to complete a
|
||||||
|
normal (non-expedited) grace period. When boosting a task
|
||||||
|
that was blocking both an expedited and a normal grace period,
|
||||||
|
it is counted against the expedited total above.
|
||||||
|
|
||||||
|
o "j" is the low-order 16 bits of the jiffies counter in
|
||||||
|
hexadecimal.
|
||||||
|
|
||||||
|
o "bt" is the low-order 16 bits of the value that the jiffies
|
||||||
|
counter will have when we next start boosting, assuming that
|
||||||
|
the current grace period does not end beforehand. This is
|
||||||
|
also in hexadecimal.
|
||||||
|
|
||||||
|
o "balk: nt" counts the number of times we didn't boost (in
|
||||||
|
other words, we balked) even though it was time to boost because
|
||||||
|
there were no blocked tasks to boost. This situation occurs
|
||||||
|
when there is one blocked task on one rcu_node structure and
|
||||||
|
none on some other rcu_node structure.
|
||||||
|
|
||||||
|
o "egt" counts the number of times we balked because although
|
||||||
|
there were blocked tasks, none of them were blocking the
|
||||||
|
current grace period, whether expedited or otherwise.
|
||||||
|
|
||||||
|
o "bt" counts the number of times we balked because boosting
|
||||||
|
had already been initiated for the current grace period.
|
||||||
|
|
||||||
|
o "nb" counts the number of times we balked because there
|
||||||
|
was at least one task blocking the current non-expedited grace
|
||||||
|
period that never had blocked. If it is already running, it
|
||||||
|
just won't help to boost its priority!
|
||||||
|
|
||||||
|
o "ny" counts the number of times we balked because it was
|
||||||
|
not yet time to start boosting.
|
||||||
|
|
||||||
|
o "nos" counts the number of times we balked for other
|
||||||
|
reasons, e.g., the grace period ended first.
|
||||||
|
|
||||||
|
|
||||||
CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats
|
CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats
|
||||||
|
|
||||||
These implementations of RCU provides a single debugfs file under the
|
These implementations of RCU provides a single debugfs file under the
|
||||||
|
@ -394,9 +571,9 @@ o "neb" is the number of expedited grace periods that have had
|
||||||
o "nnb" is the number of normal grace periods that have had
|
o "nnb" is the number of normal grace periods that have had
|
||||||
to resort to RCU priority boosting since boot.
|
to resort to RCU priority boosting since boot.
|
||||||
|
|
||||||
o "j" is the low-order 12 bits of the jiffies counter in hexadecimal.
|
o "j" is the low-order 16 bits of the jiffies counter in hexadecimal.
|
||||||
|
|
||||||
o "bt" is the low-order 12 bits of the value that the jiffies counter
|
o "bt" is the low-order 16 bits of the value that the jiffies counter
|
||||||
will have at the next time that boosting is scheduled to begin.
|
will have at the next time that boosting is scheduled to begin.
|
||||||
|
|
||||||
o In the line beginning with "normal balk", the fields are as follows:
|
o In the line beginning with "normal balk", the fields are as follows:
|
||||||
|
|
|
@ -714,10 +714,11 @@ Jeff Garzik, "Linux kernel patch submission format".
|
||||||
<http://linux.yyz.us/patch-format.html>
|
<http://linux.yyz.us/patch-format.html>
|
||||||
|
|
||||||
Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
||||||
<http://www.kroah.com/log/2005/03/31/>
|
<http://www.kroah.com/log/linux/maintainer.html>
|
||||||
<http://www.kroah.com/log/2005/07/08/>
|
<http://www.kroah.com/log/linux/maintainer-02.html>
|
||||||
<http://www.kroah.com/log/2005/10/19/>
|
<http://www.kroah.com/log/linux/maintainer-03.html>
|
||||||
<http://www.kroah.com/log/2006/01/11/>
|
<http://www.kroah.com/log/linux/maintainer-04.html>
|
||||||
|
<http://www.kroah.com/log/linux/maintainer-05.html>
|
||||||
|
|
||||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||||
<http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
|
<http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
|
||||||
|
|
|
@ -21,7 +21,7 @@ information will not be available.
|
||||||
To extract cgroup statistics a utility very similar to getdelays.c
|
To extract cgroup statistics a utility very similar to getdelays.c
|
||||||
has been developed, the sample output of the utility is shown below
|
has been developed, the sample output of the utility is shown below
|
||||||
|
|
||||||
~/balbir/cgroupstats # ./getdelays -C "/cgroup/a"
|
~/balbir/cgroupstats # ./getdelays -C "/sys/fs/cgroup/a"
|
||||||
sleeping 1, blocked 0, running 1, stopped 0, uninterruptible 0
|
sleeping 1, blocked 0, running 1, stopped 0, uninterruptible 0
|
||||||
~/balbir/cgroupstats # ./getdelays -C "/cgroup"
|
~/balbir/cgroupstats # ./getdelays -C "/sys/fs/cgroup"
|
||||||
sleeping 155, blocked 0, running 1, stopped 0, uninterruptible 2
|
sleeping 155, blocked 0, running 1, stopped 0, uninterruptible 2
|
||||||
|
|
|
@ -177,6 +177,8 @@ static int get_family_id(int sd)
|
||||||
rc = send_cmd(sd, GENL_ID_CTRL, getpid(), CTRL_CMD_GETFAMILY,
|
rc = send_cmd(sd, GENL_ID_CTRL, getpid(), CTRL_CMD_GETFAMILY,
|
||||||
CTRL_ATTR_FAMILY_NAME, (void *)name,
|
CTRL_ATTR_FAMILY_NAME, (void *)name,
|
||||||
strlen(TASKSTATS_GENL_NAME)+1);
|
strlen(TASKSTATS_GENL_NAME)+1);
|
||||||
|
if (rc < 0)
|
||||||
|
return 0; /* sendto() failure? */
|
||||||
|
|
||||||
rep_len = recv(sd, &ans, sizeof(ans), 0);
|
rep_len = recv(sd, &ans, sizeof(ans), 0);
|
||||||
if (ans.n.nlmsg_type == NLMSG_ERROR ||
|
if (ans.n.nlmsg_type == NLMSG_ERROR ||
|
||||||
|
@ -191,30 +193,37 @@ static int get_family_id(int sd)
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define average_ms(t, c) (t / 1000000ULL / (c ? c : 1))
|
||||||
|
|
||||||
static void print_delayacct(struct taskstats *t)
|
static void print_delayacct(struct taskstats *t)
|
||||||
{
|
{
|
||||||
printf("\n\nCPU %15s%15s%15s%15s\n"
|
printf("\n\nCPU %15s%15s%15s%15s%15s\n"
|
||||||
" %15llu%15llu%15llu%15llu\n"
|
" %15llu%15llu%15llu%15llu%15.3fms\n"
|
||||||
"IO %15s%15s\n"
|
"IO %15s%15s%15s\n"
|
||||||
" %15llu%15llu\n"
|
" %15llu%15llu%15llums\n"
|
||||||
"SWAP %15s%15s\n"
|
"SWAP %15s%15s%15s\n"
|
||||||
" %15llu%15llu\n"
|
" %15llu%15llu%15llums\n"
|
||||||
"RECLAIM %12s%15s\n"
|
"RECLAIM %12s%15s%15s\n"
|
||||||
" %15llu%15llu\n",
|
" %15llu%15llu%15llums\n",
|
||||||
"count", "real total", "virtual total", "delay total",
|
"count", "real total", "virtual total",
|
||||||
|
"delay total", "delay average",
|
||||||
(unsigned long long)t->cpu_count,
|
(unsigned long long)t->cpu_count,
|
||||||
(unsigned long long)t->cpu_run_real_total,
|
(unsigned long long)t->cpu_run_real_total,
|
||||||
(unsigned long long)t->cpu_run_virtual_total,
|
(unsigned long long)t->cpu_run_virtual_total,
|
||||||
(unsigned long long)t->cpu_delay_total,
|
(unsigned long long)t->cpu_delay_total,
|
||||||
"count", "delay total",
|
average_ms((double)t->cpu_delay_total, t->cpu_count),
|
||||||
|
"count", "delay total", "delay average",
|
||||||
(unsigned long long)t->blkio_count,
|
(unsigned long long)t->blkio_count,
|
||||||
(unsigned long long)t->blkio_delay_total,
|
(unsigned long long)t->blkio_delay_total,
|
||||||
"count", "delay total",
|
average_ms(t->blkio_delay_total, t->blkio_count),
|
||||||
|
"count", "delay total", "delay average",
|
||||||
(unsigned long long)t->swapin_count,
|
(unsigned long long)t->swapin_count,
|
||||||
(unsigned long long)t->swapin_delay_total,
|
(unsigned long long)t->swapin_delay_total,
|
||||||
"count", "delay total",
|
average_ms(t->swapin_delay_total, t->swapin_count),
|
||||||
|
"count", "delay total", "delay average",
|
||||||
(unsigned long long)t->freepages_count,
|
(unsigned long long)t->freepages_count,
|
||||||
(unsigned long long)t->freepages_delay_total);
|
(unsigned long long)t->freepages_delay_total,
|
||||||
|
average_ms(t->freepages_delay_total, t->freepages_count));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void task_context_switch_counts(struct taskstats *t)
|
static void task_context_switch_counts(struct taskstats *t)
|
||||||
|
@ -433,8 +442,6 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int i;
|
|
||||||
|
|
||||||
rep_len = recv(nl_sd, &msg, sizeof(msg), 0);
|
rep_len = recv(nl_sd, &msg, sizeof(msg), 0);
|
||||||
PRINTF("received %d bytes\n", rep_len);
|
PRINTF("received %d bytes\n", rep_len);
|
||||||
|
|
||||||
|
@ -459,7 +466,6 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
||||||
len = 0;
|
len = 0;
|
||||||
i = 0;
|
|
||||||
while (len < rep_len) {
|
while (len < rep_len) {
|
||||||
len += NLA_ALIGN(na->nla_len);
|
len += NLA_ALIGN(na->nla_len);
|
||||||
switch (na->nla_type) {
|
switch (na->nla_type) {
|
||||||
|
|
|
@ -66,3 +66,8 @@ Note: We can use a kernel with multiple custom ACPI method running,
|
||||||
But each individual write to debugfs can implement a SINGLE
|
But each individual write to debugfs can implement a SINGLE
|
||||||
method override. i.e. if we want to insert/override multiple
|
method override. i.e. if we want to insert/override multiple
|
||||||
ACPI methods, we need to redo step c) ~ g) for multiple times.
|
ACPI methods, we need to redo step c) ~ g) for multiple times.
|
||||||
|
|
||||||
|
Note: Be aware that root can mis-use this driver to modify arbitrary
|
||||||
|
memory and gain additional rights, if root's privileges got
|
||||||
|
restricted (for example if root is not allowed to load additional
|
||||||
|
modules after boot).
|
||||||
|
|
|
@ -65,13 +65,19 @@ looks at the connected hardware is beyond the scope of this document.
|
||||||
The boot loader must ultimately be able to provide a MACH_TYPE_xxx
|
The boot loader must ultimately be able to provide a MACH_TYPE_xxx
|
||||||
value to the kernel. (see linux/arch/arm/tools/mach-types).
|
value to the kernel. (see linux/arch/arm/tools/mach-types).
|
||||||
|
|
||||||
|
4. Setup boot data
|
||||||
4. Setup the kernel tagged list
|
------------------
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
|
Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
|
||||||
New boot loaders: MANDATORY
|
New boot loaders: MANDATORY
|
||||||
|
|
||||||
|
The boot loader must provide either a tagged list or a dtb image for
|
||||||
|
passing configuration data to the kernel. The physical address of the
|
||||||
|
boot data is passed to the kernel in register r2.
|
||||||
|
|
||||||
|
4a. Setup the kernel tagged list
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
The boot loader must create and initialise the kernel tagged list.
|
The boot loader must create and initialise the kernel tagged list.
|
||||||
A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
|
A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
|
||||||
The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
|
The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
|
||||||
|
@ -101,6 +107,24 @@ The tagged list must be placed in a region of memory where neither
|
||||||
the kernel decompressor nor initrd 'bootp' program will overwrite
|
the kernel decompressor nor initrd 'bootp' program will overwrite
|
||||||
it. The recommended placement is in the first 16KiB of RAM.
|
it. The recommended placement is in the first 16KiB of RAM.
|
||||||
|
|
||||||
|
4b. Setup the device tree
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The boot loader must load a device tree image (dtb) into system ram
|
||||||
|
at a 64bit aligned address and initialize it with the boot data. The
|
||||||
|
dtb format is documented in Documentation/devicetree/booting-without-of.txt.
|
||||||
|
The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
|
||||||
|
physical address to determine if a dtb has been passed instead of a
|
||||||
|
tagged list.
|
||||||
|
|
||||||
|
The boot loader must pass at a minimum the size and location of the
|
||||||
|
system memory, and the root filesystem location. The dtb must be
|
||||||
|
placed in a region of memory where the kernel decompressor will not
|
||||||
|
overwrite it. The recommended placement is in the first 16KiB of RAM
|
||||||
|
with the caveat that it may not be located at physical address 0 since
|
||||||
|
the kernel interprets a value of 0 in r2 to mean neither a tagged list
|
||||||
|
nor a dtb were passed.
|
||||||
|
|
||||||
5. Calling the kernel image
|
5. Calling the kernel image
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
@ -125,7 +149,8 @@ In either case, the following conditions must be met:
|
||||||
- CPU register settings
|
- CPU register settings
|
||||||
r0 = 0,
|
r0 = 0,
|
||||||
r1 = machine type number discovered in (3) above.
|
r1 = machine type number discovered in (3) above.
|
||||||
r2 = physical address of tagged list in system RAM.
|
r2 = physical address of tagged list in system RAM, or
|
||||||
|
physical address of device tree block (dtb) in system RAM
|
||||||
|
|
||||||
- CPU mode
|
- CPU mode
|
||||||
All forms of interrupts must be disabled (IRQs and FIQs)
|
All forms of interrupts must be disabled (IRQs and FIQs)
|
||||||
|
|
|
@ -14,7 +14,6 @@ Introduction
|
||||||
- S3C24XX: See Documentation/arm/Samsung-S3C24XX/Overview.txt for full list
|
- S3C24XX: See Documentation/arm/Samsung-S3C24XX/Overview.txt for full list
|
||||||
- S3C64XX: S3C6400 and S3C6410
|
- S3C64XX: S3C6400 and S3C6410
|
||||||
- S5P6440
|
- S5P6440
|
||||||
- S5P6442
|
|
||||||
- S5PC100
|
- S5PC100
|
||||||
- S5PC110 / S5PV210
|
- S5PC110 / S5PV210
|
||||||
|
|
||||||
|
@ -36,7 +35,6 @@ Configuration
|
||||||
unifying all the SoCs into one kernel.
|
unifying all the SoCs into one kernel.
|
||||||
|
|
||||||
s5p6440_defconfig - S5P6440 specific default configuration
|
s5p6440_defconfig - S5P6440 specific default configuration
|
||||||
s5p6442_defconfig - S5P6442 specific default configuration
|
|
||||||
s5pc100_defconfig - S5PC100 specific default configuration
|
s5pc100_defconfig - S5PC100 specific default configuration
|
||||||
s5pc110_defconfig - S5PC110 specific default configuration
|
s5pc110_defconfig - S5PC110 specific default configuration
|
||||||
s5pv210_defconfig - S5PV210 specific default configuration
|
s5pv210_defconfig - S5PV210 specific default configuration
|
||||||
|
|
|
@ -12,7 +12,7 @@ Also, it should be made opaque such that any kind of cast to a normal
|
||||||
C integer type will fail. Something like the following should
|
C integer type will fail. Something like the following should
|
||||||
suffice:
|
suffice:
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
typedef struct { int counter; } atomic_t;
|
||||||
|
|
||||||
Historically, counter has been declared volatile. This is now discouraged.
|
Historically, counter has been declared volatile. This is now discouraged.
|
||||||
See Documentation/volatile-considered-harmful.txt for the complete rationale.
|
See Documentation/volatile-considered-harmful.txt for the complete rationale.
|
||||||
|
|
|
@ -169,3 +169,18 @@ is issued which positions the tape to a known position. Typically you
|
||||||
must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example)
|
must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example)
|
||||||
before i/o can proceed again to a tape drive which was reset.
|
before i/o can proceed again to a tape drive which was reset.
|
||||||
|
|
||||||
|
There is a cciss_tape_cmds module parameter which can be used to make cciss
|
||||||
|
allocate more commands for use by tape drives. Ordinarily only a few commands
|
||||||
|
(6) are allocated for tape drives because tape drives are slow and
|
||||||
|
infrequently used and the primary purpose of Smart Array controllers is to
|
||||||
|
act as a RAID controller for disk drives, so the vast majority of commands
|
||||||
|
are allocated for disk devices. However, if you have more than a few tape
|
||||||
|
drives attached to a smart array, the default number of commands may not be
|
||||||
|
enought (for example, if you have 8 tape drives, you could only rewind 6
|
||||||
|
at one time with the default number of commands.) The cciss_tape_cmds module
|
||||||
|
parameter allows more commands (up to 16 more) to be allocated for use by
|
||||||
|
tape drives. For example:
|
||||||
|
|
||||||
|
insmod cciss.ko cciss_tape_cmds=16
|
||||||
|
|
||||||
|
Or, as a kernel boot parameter passed in via grub: cciss.cciss_tape_cmds=8
|
||||||
|
|
|
@ -16,7 +16,7 @@ on all processors in the system. Don't let this scare you into
|
||||||
thinking SMP cache/tlb flushing must be so inefficient, this is in
|
thinking SMP cache/tlb flushing must be so inefficient, this is in
|
||||||
fact an area where many optimizations are possible. For example,
|
fact an area where many optimizations are possible. For example,
|
||||||
if it can be proven that a user address space has never executed
|
if it can be proven that a user address space has never executed
|
||||||
on a cpu (see vma->cpu_vm_mask), one need not perform a flush
|
on a cpu (see mm_cpumask()), one need not perform a flush
|
||||||
for this address space on that cpu.
|
for this address space on that cpu.
|
||||||
|
|
||||||
First, the TLB flushing interfaces, since they are the simplest. The
|
First, the TLB flushing interfaces, since they are the simplest. The
|
||||||
|
|
|
@ -28,16 +28,19 @@ cgroups. Here is what you can do.
|
||||||
- Enable group scheduling in CFQ
|
- Enable group scheduling in CFQ
|
||||||
CONFIG_CFQ_GROUP_IOSCHED=y
|
CONFIG_CFQ_GROUP_IOSCHED=y
|
||||||
|
|
||||||
- Compile and boot into kernel and mount IO controller (blkio).
|
- Compile and boot into kernel and mount IO controller (blkio); see
|
||||||
|
cgroups.txt, Why are cgroups needed?.
|
||||||
|
|
||||||
mount -t cgroup -o blkio none /cgroup
|
mount -t tmpfs cgroup_root /sys/fs/cgroup
|
||||||
|
mkdir /sys/fs/cgroup/blkio
|
||||||
|
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
|
||||||
|
|
||||||
- Create two cgroups
|
- Create two cgroups
|
||||||
mkdir -p /cgroup/test1/ /cgroup/test2
|
mkdir -p /sys/fs/cgroup/blkio/test1/ /sys/fs/cgroup/blkio/test2
|
||||||
|
|
||||||
- Set weights of group test1 and test2
|
- Set weights of group test1 and test2
|
||||||
echo 1000 > /cgroup/test1/blkio.weight
|
echo 1000 > /sys/fs/cgroup/blkio/test1/blkio.weight
|
||||||
echo 500 > /cgroup/test2/blkio.weight
|
echo 500 > /sys/fs/cgroup/blkio/test2/blkio.weight
|
||||||
|
|
||||||
- Create two same size files (say 512MB each) on same disk (file1, file2) and
|
- Create two same size files (say 512MB each) on same disk (file1, file2) and
|
||||||
launch two dd threads in different cgroup to read those files.
|
launch two dd threads in different cgroup to read those files.
|
||||||
|
@ -46,12 +49,12 @@ cgroups. Here is what you can do.
|
||||||
echo 3 > /proc/sys/vm/drop_caches
|
echo 3 > /proc/sys/vm/drop_caches
|
||||||
|
|
||||||
dd if=/mnt/sdb/zerofile1 of=/dev/null &
|
dd if=/mnt/sdb/zerofile1 of=/dev/null &
|
||||||
echo $! > /cgroup/test1/tasks
|
echo $! > /sys/fs/cgroup/blkio/test1/tasks
|
||||||
cat /cgroup/test1/tasks
|
cat /sys/fs/cgroup/blkio/test1/tasks
|
||||||
|
|
||||||
dd if=/mnt/sdb/zerofile2 of=/dev/null &
|
dd if=/mnt/sdb/zerofile2 of=/dev/null &
|
||||||
echo $! > /cgroup/test2/tasks
|
echo $! > /sys/fs/cgroup/blkio/test2/tasks
|
||||||
cat /cgroup/test2/tasks
|
cat /sys/fs/cgroup/blkio/test2/tasks
|
||||||
|
|
||||||
- At macro level, first dd should finish first. To get more precise data, keep
|
- At macro level, first dd should finish first. To get more precise data, keep
|
||||||
on looking at (with the help of script), at blkio.disk_time and
|
on looking at (with the help of script), at blkio.disk_time and
|
||||||
|
@ -68,13 +71,13 @@ Throttling/Upper Limit policy
|
||||||
- Enable throttling in block layer
|
- Enable throttling in block layer
|
||||||
CONFIG_BLK_DEV_THROTTLING=y
|
CONFIG_BLK_DEV_THROTTLING=y
|
||||||
|
|
||||||
- Mount blkio controller
|
- Mount blkio controller (see cgroups.txt, Why are cgroups needed?)
|
||||||
mount -t cgroup -o blkio none /cgroup/blkio
|
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
|
||||||
|
|
||||||
- Specify a bandwidth rate on particular device for root group. The format
|
- Specify a bandwidth rate on particular device for root group. The format
|
||||||
for policy is "<major>:<minor> <byes_per_second>".
|
for policy is "<major>:<minor> <byes_per_second>".
|
||||||
|
|
||||||
echo "8:16 1048576" > /cgroup/blkio/blkio.read_bps_device
|
echo "8:16 1048576" > /sys/fs/cgroup/blkio/blkio.read_bps_device
|
||||||
|
|
||||||
Above will put a limit of 1MB/second on reads happening for root group
|
Above will put a limit of 1MB/second on reads happening for root group
|
||||||
on device having major/minor number 8:16.
|
on device having major/minor number 8:16.
|
||||||
|
@ -108,7 +111,7 @@ Hierarchical Cgroups
|
||||||
CFQ and throttling will practically treat all groups at same level.
|
CFQ and throttling will practically treat all groups at same level.
|
||||||
|
|
||||||
pivot
|
pivot
|
||||||
/ | \ \
|
/ / \ \
|
||||||
root test1 test2 test3
|
root test1 test2 test3
|
||||||
|
|
||||||
Down the line we can implement hierarchical accounting/control support
|
Down the line we can implement hierarchical accounting/control support
|
||||||
|
@ -149,7 +152,7 @@ Proportional weight policy files
|
||||||
|
|
||||||
Following is the format.
|
Following is the format.
|
||||||
|
|
||||||
#echo dev_maj:dev_minor weight > /path/to/cgroup/blkio.weight_device
|
# echo dev_maj:dev_minor weight > blkio.weight_device
|
||||||
Configure weight=300 on /dev/sdb (8:16) in this cgroup
|
Configure weight=300 on /dev/sdb (8:16) in this cgroup
|
||||||
# echo 8:16 300 > blkio.weight_device
|
# echo 8:16 300 > blkio.weight_device
|
||||||
# cat blkio.weight_device
|
# cat blkio.weight_device
|
||||||
|
|
|
@ -138,11 +138,11 @@ With the ability to classify tasks differently for different resources
|
||||||
the admin can easily set up a script which receives exec notifications
|
the admin can easily set up a script which receives exec notifications
|
||||||
and depending on who is launching the browser he can
|
and depending on who is launching the browser he can
|
||||||
|
|
||||||
# echo browser_pid > /mnt/<restype>/<userclass>/tasks
|
# echo browser_pid > /sys/fs/cgroup/<restype>/<userclass>/tasks
|
||||||
|
|
||||||
With only a single hierarchy, he now would potentially have to create
|
With only a single hierarchy, he now would potentially have to create
|
||||||
a separate cgroup for every browser launched and associate it with
|
a separate cgroup for every browser launched and associate it with
|
||||||
approp network and other resource class. This may lead to
|
appropriate network and other resource class. This may lead to
|
||||||
proliferation of such cgroups.
|
proliferation of such cgroups.
|
||||||
|
|
||||||
Also lets say that the administrator would like to give enhanced network
|
Also lets say that the administrator would like to give enhanced network
|
||||||
|
@ -153,9 +153,9 @@ apps enhanced CPU power,
|
||||||
With ability to write pids directly to resource classes, it's just a
|
With ability to write pids directly to resource classes, it's just a
|
||||||
matter of :
|
matter of :
|
||||||
|
|
||||||
# echo pid > /mnt/network/<new_class>/tasks
|
# echo pid > /sys/fs/cgroup/network/<new_class>/tasks
|
||||||
(after some time)
|
(after some time)
|
||||||
# echo pid > /mnt/network/<orig_class>/tasks
|
# echo pid > /sys/fs/cgroup/network/<orig_class>/tasks
|
||||||
|
|
||||||
Without this ability, he would have to split the cgroup into
|
Without this ability, he would have to split the cgroup into
|
||||||
multiple separate ones and then associate the new cgroups with the
|
multiple separate ones and then associate the new cgroups with the
|
||||||
|
@ -236,7 +236,8 @@ containing the following files describing that cgroup:
|
||||||
- cgroup.procs: list of tgids in the cgroup. This list is not
|
- cgroup.procs: list of tgids in the cgroup. This list is not
|
||||||
guaranteed to be sorted or free of duplicate tgids, and userspace
|
guaranteed to be sorted or free of duplicate tgids, and userspace
|
||||||
should sort/uniquify the list if this property is required.
|
should sort/uniquify the list if this property is required.
|
||||||
This is a read-only file, for now.
|
Writing a thread group id into this file moves all threads in that
|
||||||
|
group into this cgroup.
|
||||||
- notify_on_release flag: run the release agent on exit?
|
- notify_on_release flag: run the release agent on exit?
|
||||||
- release_agent: the path to use for release notifications (this file
|
- release_agent: the path to use for release notifications (this file
|
||||||
exists in the top cgroup only)
|
exists in the top cgroup only)
|
||||||
|
@ -309,21 +310,24 @@ subsystem, this is the case for the cpuset.
|
||||||
To start a new job that is to be contained within a cgroup, using
|
To start a new job that is to be contained within a cgroup, using
|
||||||
the "cpuset" cgroup subsystem, the steps are something like:
|
the "cpuset" cgroup subsystem, the steps are something like:
|
||||||
|
|
||||||
1) mkdir /dev/cgroup
|
1) mount -t tmpfs cgroup_root /sys/fs/cgroup
|
||||||
2) mount -t cgroup -ocpuset cpuset /dev/cgroup
|
2) mkdir /sys/fs/cgroup/cpuset
|
||||||
3) Create the new cgroup by doing mkdir's and write's (or echo's) in
|
3) mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
|
||||||
the /dev/cgroup virtual file system.
|
4) Create the new cgroup by doing mkdir's and write's (or echo's) in
|
||||||
4) Start a task that will be the "founding father" of the new job.
|
the /sys/fs/cgroup virtual file system.
|
||||||
5) Attach that task to the new cgroup by writing its pid to the
|
5) Start a task that will be the "founding father" of the new job.
|
||||||
/dev/cgroup tasks file for that cgroup.
|
6) Attach that task to the new cgroup by writing its pid to the
|
||||||
6) fork, exec or clone the job tasks from this founding father task.
|
/sys/fs/cgroup/cpuset/tasks file for that cgroup.
|
||||||
|
7) fork, exec or clone the job tasks from this founding father task.
|
||||||
|
|
||||||
For example, the following sequence of commands will setup a cgroup
|
For example, the following sequence of commands will setup a cgroup
|
||||||
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
|
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
|
||||||
and then start a subshell 'sh' in that cgroup:
|
and then start a subshell 'sh' in that cgroup:
|
||||||
|
|
||||||
mount -t cgroup cpuset -ocpuset /dev/cgroup
|
mount -t tmpfs cgroup_root /sys/fs/cgroup
|
||||||
cd /dev/cgroup
|
mkdir /sys/fs/cgroup/cpuset
|
||||||
|
mount -t cgroup cpuset -ocpuset /sys/fs/cgroup/cpuset
|
||||||
|
cd /sys/fs/cgroup/cpuset
|
||||||
mkdir Charlie
|
mkdir Charlie
|
||||||
cd Charlie
|
cd Charlie
|
||||||
/bin/echo 2-3 > cpuset.cpus
|
/bin/echo 2-3 > cpuset.cpus
|
||||||
|
@ -344,7 +348,7 @@ Creating, modifying, using the cgroups can be done through the cgroup
|
||||||
virtual filesystem.
|
virtual filesystem.
|
||||||
|
|
||||||
To mount a cgroup hierarchy with all available subsystems, type:
|
To mount a cgroup hierarchy with all available subsystems, type:
|
||||||
# mount -t cgroup xxx /dev/cgroup
|
# mount -t cgroup xxx /sys/fs/cgroup
|
||||||
|
|
||||||
The "xxx" is not interpreted by the cgroup code, but will appear in
|
The "xxx" is not interpreted by the cgroup code, but will appear in
|
||||||
/proc/mounts so may be any useful identifying string that you like.
|
/proc/mounts so may be any useful identifying string that you like.
|
||||||
|
@ -353,23 +357,32 @@ Note: Some subsystems do not work without some user input first. For instance,
|
||||||
if cpusets are enabled the user will have to populate the cpus and mems files
|
if cpusets are enabled the user will have to populate the cpus and mems files
|
||||||
for each new cgroup created before that group can be used.
|
for each new cgroup created before that group can be used.
|
||||||
|
|
||||||
|
As explained in section `1.2 Why are cgroups needed?' you should create
|
||||||
|
different hierarchies of cgroups for each single resource or group of
|
||||||
|
resources you want to control. Therefore, you should mount a tmpfs on
|
||||||
|
/sys/fs/cgroup and create directories for each cgroup resource or resource
|
||||||
|
group.
|
||||||
|
|
||||||
|
# mount -t tmpfs cgroup_root /sys/fs/cgroup
|
||||||
|
# mkdir /sys/fs/cgroup/rg1
|
||||||
|
|
||||||
To mount a cgroup hierarchy with just the cpuset and memory
|
To mount a cgroup hierarchy with just the cpuset and memory
|
||||||
subsystems, type:
|
subsystems, type:
|
||||||
# mount -t cgroup -o cpuset,memory hier1 /dev/cgroup
|
# mount -t cgroup -o cpuset,memory hier1 /sys/fs/cgroup/rg1
|
||||||
|
|
||||||
To change the set of subsystems bound to a mounted hierarchy, just
|
To change the set of subsystems bound to a mounted hierarchy, just
|
||||||
remount with different options:
|
remount with different options:
|
||||||
# mount -o remount,cpuset,blkio hier1 /dev/cgroup
|
# mount -o remount,cpuset,blkio hier1 /sys/fs/cgroup/rg1
|
||||||
|
|
||||||
Now memory is removed from the hierarchy and blkio is added.
|
Now memory is removed from the hierarchy and blkio is added.
|
||||||
|
|
||||||
Note this will add blkio to the hierarchy but won't remove memory or
|
Note this will add blkio to the hierarchy but won't remove memory or
|
||||||
cpuset, because the new options are appended to the old ones:
|
cpuset, because the new options are appended to the old ones:
|
||||||
# mount -o remount,blkio /dev/cgroup
|
# mount -o remount,blkio /sys/fs/cgroup/rg1
|
||||||
|
|
||||||
To Specify a hierarchy's release_agent:
|
To Specify a hierarchy's release_agent:
|
||||||
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
|
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
|
||||||
xxx /dev/cgroup
|
xxx /sys/fs/cgroup/rg1
|
||||||
|
|
||||||
Note that specifying 'release_agent' more than once will return failure.
|
Note that specifying 'release_agent' more than once will return failure.
|
||||||
|
|
||||||
|
@ -378,17 +391,17 @@ when the hierarchy consists of a single (root) cgroup. Supporting
|
||||||
the ability to arbitrarily bind/unbind subsystems from an existing
|
the ability to arbitrarily bind/unbind subsystems from an existing
|
||||||
cgroup hierarchy is intended to be implemented in the future.
|
cgroup hierarchy is intended to be implemented in the future.
|
||||||
|
|
||||||
Then under /dev/cgroup you can find a tree that corresponds to the
|
Then under /sys/fs/cgroup/rg1 you can find a tree that corresponds to the
|
||||||
tree of the cgroups in the system. For instance, /dev/cgroup
|
tree of the cgroups in the system. For instance, /sys/fs/cgroup/rg1
|
||||||
is the cgroup that holds the whole system.
|
is the cgroup that holds the whole system.
|
||||||
|
|
||||||
If you want to change the value of release_agent:
|
If you want to change the value of release_agent:
|
||||||
# echo "/sbin/new_release_agent" > /dev/cgroup/release_agent
|
# echo "/sbin/new_release_agent" > /sys/fs/cgroup/rg1/release_agent
|
||||||
|
|
||||||
It can also be changed via remount.
|
It can also be changed via remount.
|
||||||
|
|
||||||
If you want to create a new cgroup under /dev/cgroup:
|
If you want to create a new cgroup under /sys/fs/cgroup/rg1:
|
||||||
# cd /dev/cgroup
|
# cd /sys/fs/cgroup/rg1
|
||||||
# mkdir my_cgroup
|
# mkdir my_cgroup
|
||||||
|
|
||||||
Now you want to do something with this cgroup.
|
Now you want to do something with this cgroup.
|
||||||
|
@ -430,6 +443,12 @@ You can attach the current shell task by echoing 0:
|
||||||
|
|
||||||
# echo 0 > tasks
|
# echo 0 > tasks
|
||||||
|
|
||||||
|
You can use the cgroup.procs file instead of the tasks file to move all
|
||||||
|
threads in a threadgroup at once. Echoing the pid of any task in a
|
||||||
|
threadgroup to cgroup.procs causes all tasks in that threadgroup to be
|
||||||
|
be attached to the cgroup. Writing 0 to cgroup.procs moves all tasks
|
||||||
|
in the writing task's threadgroup.
|
||||||
|
|
||||||
Note: Since every task is always a member of exactly one cgroup in each
|
Note: Since every task is always a member of exactly one cgroup in each
|
||||||
mounted hierarchy, to remove a task from its current cgroup you must
|
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
|
||||||
|
@ -575,7 +594,7 @@ rmdir() will fail with it. From this behavior, pre_destroy() can be
|
||||||
called multiple times against a cgroup.
|
called multiple times against a cgroup.
|
||||||
|
|
||||||
int can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
int can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||||
struct task_struct *task, bool threadgroup)
|
struct task_struct *task)
|
||||||
(cgroup_mutex held by caller)
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
Called prior to moving a task into a cgroup; if the subsystem
|
Called prior to moving a task into a cgroup; if the subsystem
|
||||||
|
@ -584,9 +603,14 @@ task is passed, then a successful result indicates that *any*
|
||||||
unspecified task can be moved into the cgroup. Note that this isn't
|
unspecified task can be moved into the cgroup. Note that this isn't
|
||||||
called on a fork. If this method returns 0 (success) then this should
|
called on a fork. If this method returns 0 (success) then this should
|
||||||
remain valid while the caller holds cgroup_mutex and it is ensured that either
|
remain valid while the caller holds cgroup_mutex and it is ensured that either
|
||||||
attach() or cancel_attach() will be called in future. If threadgroup is
|
attach() or cancel_attach() will be called in future.
|
||||||
true, then a successful result indicates that all threads in the given
|
|
||||||
thread's threadgroup can be moved together.
|
int can_attach_task(struct cgroup *cgrp, struct task_struct *tsk);
|
||||||
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
|
As can_attach, but for operations that must be run once per task to be
|
||||||
|
attached (possibly many when using cgroup_attach_proc). Called after
|
||||||
|
can_attach.
|
||||||
|
|
||||||
void cancel_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
void cancel_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||||
struct task_struct *task, bool threadgroup)
|
struct task_struct *task, bool threadgroup)
|
||||||
|
@ -598,15 +622,24 @@ function, so that the subsystem can implement a rollback. If not, not necessary.
|
||||||
This will be called only about subsystems whose can_attach() operation have
|
This will be called only about subsystems whose can_attach() operation have
|
||||||
succeeded.
|
succeeded.
|
||||||
|
|
||||||
|
void pre_attach(struct cgroup *cgrp);
|
||||||
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
|
For any non-per-thread attachment work that needs to happen before
|
||||||
|
attach_task. Needed by cpuset.
|
||||||
|
|
||||||
void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
|
||||||
struct cgroup *old_cgrp, struct task_struct *task,
|
struct cgroup *old_cgrp, struct task_struct *task)
|
||||||
bool threadgroup)
|
|
||||||
(cgroup_mutex held by caller)
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
Called after the task has been attached to the cgroup, to allow any
|
Called after the task has been attached to the cgroup, to allow any
|
||||||
post-attachment activity that requires memory allocations or blocking.
|
post-attachment activity that requires memory allocations or blocking.
|
||||||
If threadgroup is true, the subsystem should take care of all threads
|
|
||||||
in the specified thread's threadgroup. Currently does not support any
|
void attach_task(struct cgroup *cgrp, struct task_struct *tsk);
|
||||||
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
|
As attach, but for operations that must be run once per task to be attached,
|
||||||
|
like can_attach_task. Called before attach. Currently does not support any
|
||||||
subsystem that might need the old_cgrp for every thread in the group.
|
subsystem that might need the old_cgrp for every thread in the group.
|
||||||
|
|
||||||
void fork(struct cgroup_subsy *ss, struct task_struct *task)
|
void fork(struct cgroup_subsy *ss, struct task_struct *task)
|
||||||
|
@ -630,7 +663,7 @@ always handled well.
|
||||||
void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp)
|
void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp)
|
||||||
(cgroup_mutex held by caller)
|
(cgroup_mutex held by caller)
|
||||||
|
|
||||||
Called at the end of cgroup_clone() to do any parameter
|
Called during cgroup_create() to do any parameter
|
||||||
initialization which might be required before a task could attach. For
|
initialization which might be required before a task could attach. For
|
||||||
example in cpusets, no task may attach before 'cpus' and 'mems' are set
|
example in cpusets, no task may attach before 'cpus' and 'mems' are set
|
||||||
up.
|
up.
|
||||||
|
|
|
@ -10,26 +10,25 @@ directly present in its group.
|
||||||
|
|
||||||
Accounting groups can be created by first mounting the cgroup filesystem.
|
Accounting groups can be created by first mounting the cgroup filesystem.
|
||||||
|
|
||||||
# mkdir /cgroups
|
# mount -t cgroup -ocpuacct none /sys/fs/cgroup
|
||||||
# mount -t cgroup -ocpuacct none /cgroups
|
|
||||||
|
|
||||||
With the above step, the initial or the parent accounting group
|
With the above step, the initial or the parent accounting group becomes
|
||||||
becomes visible at /cgroups. At bootup, this group includes all the
|
visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in
|
||||||
tasks in the system. /cgroups/tasks lists the tasks in this cgroup.
|
the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup.
|
||||||
/cgroups/cpuacct.usage gives the CPU time (in nanoseconds) obtained by
|
/sys/fs/cgroup/cpuacct.usage gives the CPU time (in nanoseconds) obtained
|
||||||
this group which is essentially the CPU time obtained by all the tasks
|
by this group which is essentially the CPU time obtained by all the tasks
|
||||||
in the system.
|
in the system.
|
||||||
|
|
||||||
New accounting groups can be created under the parent group /cgroups.
|
New accounting groups can be created under the parent group /sys/fs/cgroup.
|
||||||
|
|
||||||
# cd /cgroups
|
# cd /sys/fs/cgroup
|
||||||
# mkdir g1
|
# mkdir g1
|
||||||
# echo $$ > g1
|
# echo $$ > g1
|
||||||
|
|
||||||
The above steps create a new group g1 and move the current shell
|
The above steps create a new group g1 and move the current shell
|
||||||
process (bash) into it. CPU time consumed by this bash and its children
|
process (bash) into it. CPU time consumed by this bash and its children
|
||||||
can be obtained from g1/cpuacct.usage and the same is accumulated in
|
can be obtained from g1/cpuacct.usage and the same is accumulated in
|
||||||
/cgroups/cpuacct.usage also.
|
/sys/fs/cgroup/cpuacct.usage also.
|
||||||
|
|
||||||
cpuacct.stat file lists a few statistics which further divide the
|
cpuacct.stat file lists a few statistics which further divide the
|
||||||
CPU time obtained by the cgroup into user and system times. Currently
|
CPU time obtained by the cgroup into user and system times. Currently
|
||||||
|
|
|
@ -661,21 +661,21 @@ than stress the kernel.
|
||||||
|
|
||||||
To start a new job that is to be contained within a cpuset, the steps are:
|
To start a new job that is to be contained within a cpuset, the steps are:
|
||||||
|
|
||||||
1) mkdir /dev/cpuset
|
1) mkdir /sys/fs/cgroup/cpuset
|
||||||
2) mount -t cgroup -ocpuset cpuset /dev/cpuset
|
2) mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
|
||||||
3) Create the new cpuset by doing mkdir's and write's (or echo's) in
|
3) Create the new cpuset by doing mkdir's and write's (or echo's) in
|
||||||
the /dev/cpuset virtual file system.
|
the /sys/fs/cgroup/cpuset virtual file system.
|
||||||
4) Start a task that will be the "founding father" of the new job.
|
4) Start a task that will be the "founding father" of the new job.
|
||||||
5) Attach that task to the new cpuset by writing its pid to the
|
5) Attach that task to the new cpuset by writing its pid to the
|
||||||
/dev/cpuset tasks file for that cpuset.
|
/sys/fs/cgroup/cpuset tasks file for that cpuset.
|
||||||
6) fork, exec or clone the job tasks from this founding father task.
|
6) fork, exec or clone the job tasks from this founding father task.
|
||||||
|
|
||||||
For example, the following sequence of commands will setup a cpuset
|
For example, the following sequence of commands will setup a cpuset
|
||||||
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
|
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
|
||||||
and then start a subshell 'sh' in that cpuset:
|
and then start a subshell 'sh' in that cpuset:
|
||||||
|
|
||||||
mount -t cgroup -ocpuset cpuset /dev/cpuset
|
mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
|
||||||
cd /dev/cpuset
|
cd /sys/fs/cgroup/cpuset
|
||||||
mkdir Charlie
|
mkdir Charlie
|
||||||
cd Charlie
|
cd Charlie
|
||||||
/bin/echo 2-3 > cpuset.cpus
|
/bin/echo 2-3 > cpuset.cpus
|
||||||
|
@ -710,14 +710,14 @@ Creating, modifying, using the cpusets can be done through the cpuset
|
||||||
virtual filesystem.
|
virtual filesystem.
|
||||||
|
|
||||||
To mount it, type:
|
To mount it, type:
|
||||||
# mount -t cgroup -o cpuset cpuset /dev/cpuset
|
# mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset
|
||||||
|
|
||||||
Then under /dev/cpuset you can find a tree that corresponds to the
|
Then under /sys/fs/cgroup/cpuset you can find a tree that corresponds to the
|
||||||
tree of the cpusets in the system. For instance, /dev/cpuset
|
tree of the cpusets in the system. For instance, /sys/fs/cgroup/cpuset
|
||||||
is the cpuset that holds the whole system.
|
is the cpuset that holds the whole system.
|
||||||
|
|
||||||
If you want to create a new cpuset under /dev/cpuset:
|
If you want to create a new cpuset under /sys/fs/cgroup/cpuset:
|
||||||
# cd /dev/cpuset
|
# cd /sys/fs/cgroup/cpuset
|
||||||
# mkdir my_cpuset
|
# mkdir my_cpuset
|
||||||
|
|
||||||
Now you want to do something with this cpuset.
|
Now you want to do something with this cpuset.
|
||||||
|
@ -765,12 +765,12 @@ wrapper around the cgroup filesystem.
|
||||||
|
|
||||||
The command
|
The command
|
||||||
|
|
||||||
mount -t cpuset X /dev/cpuset
|
mount -t cpuset X /sys/fs/cgroup/cpuset
|
||||||
|
|
||||||
is equivalent to
|
is equivalent to
|
||||||
|
|
||||||
mount -t cgroup -ocpuset,noprefix X /dev/cpuset
|
mount -t cgroup -ocpuset,noprefix X /sys/fs/cgroup/cpuset
|
||||||
echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent
|
echo "/sbin/cpuset_release_agent" > /sys/fs/cgroup/cpuset/release_agent
|
||||||
|
|
||||||
2.2 Adding/removing cpus
|
2.2 Adding/removing cpus
|
||||||
------------------------
|
------------------------
|
||||||
|
|
|
@ -22,16 +22,16 @@ removed from the child(ren).
|
||||||
An entry is added using devices.allow, and removed using
|
An entry is added using devices.allow, and removed using
|
||||||
devices.deny. For instance
|
devices.deny. For instance
|
||||||
|
|
||||||
echo 'c 1:3 mr' > /cgroups/1/devices.allow
|
echo 'c 1:3 mr' > /sys/fs/cgroup/1/devices.allow
|
||||||
|
|
||||||
allows cgroup 1 to read and mknod the device usually known as
|
allows cgroup 1 to read and mknod the device usually known as
|
||||||
/dev/null. Doing
|
/dev/null. Doing
|
||||||
|
|
||||||
echo a > /cgroups/1/devices.deny
|
echo a > /sys/fs/cgroup/1/devices.deny
|
||||||
|
|
||||||
will remove the default 'a *:* rwm' entry. Doing
|
will remove the default 'a *:* rwm' entry. Doing
|
||||||
|
|
||||||
echo a > /cgroups/1/devices.allow
|
echo a > /sys/fs/cgroup/1/devices.allow
|
||||||
|
|
||||||
will add the 'a *:* rwm' entry to the whitelist.
|
will add the 'a *:* rwm' entry to the whitelist.
|
||||||
|
|
||||||
|
|
|
@ -59,28 +59,28 @@ is non-freezable.
|
||||||
|
|
||||||
* Examples of usage :
|
* Examples of usage :
|
||||||
|
|
||||||
# mkdir /containers
|
# mkdir /sys/fs/cgroup/freezer
|
||||||
# mount -t cgroup -ofreezer freezer /containers
|
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
|
||||||
# mkdir /containers/0
|
# mkdir /sys/fs/cgroup/freezer/0
|
||||||
# echo $some_pid > /containers/0/tasks
|
# echo $some_pid > /sys/fs/cgroup/freezer/0/tasks
|
||||||
|
|
||||||
to get status of the freezer subsystem :
|
to get status of the freezer subsystem :
|
||||||
|
|
||||||
# cat /containers/0/freezer.state
|
# cat /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
THAWED
|
THAWED
|
||||||
|
|
||||||
to freeze all tasks in the container :
|
to freeze all tasks in the container :
|
||||||
|
|
||||||
# echo FROZEN > /containers/0/freezer.state
|
# echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
# cat /containers/0/freezer.state
|
# cat /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
FREEZING
|
FREEZING
|
||||||
# cat /containers/0/freezer.state
|
# cat /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
FROZEN
|
FROZEN
|
||||||
|
|
||||||
to unfreeze all tasks in the container :
|
to unfreeze all tasks in the container :
|
||||||
|
|
||||||
# echo THAWED > /containers/0/freezer.state
|
# echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
# cat /containers/0/freezer.state
|
# cat /sys/fs/cgroup/freezer/0/freezer.state
|
||||||
THAWED
|
THAWED
|
||||||
|
|
||||||
This is the basic mechanism which should do the right thing for user space task
|
This is the basic mechanism which should do the right thing for user space task
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
Memory Resource Controller
|
Memory Resource Controller
|
||||||
|
|
||||||
NOTE: The Memory Resource Controller has been generically been referred
|
NOTE: The Memory Resource Controller has generically been referred to as the
|
||||||
to as the memory controller in this document. Do not confuse memory
|
memory controller in this document. Do not confuse memory controller
|
||||||
controller used here with the memory controller that is used in hardware.
|
used here with the memory controller that is used in hardware.
|
||||||
|
|
||||||
(For editors)
|
(For editors)
|
||||||
In this document:
|
In this document:
|
||||||
|
@ -52,8 +52,10 @@ Brief summary of control files.
|
||||||
tasks # attach a task(thread) and show list of threads
|
tasks # attach a task(thread) and show list of threads
|
||||||
cgroup.procs # show list of processes
|
cgroup.procs # show list of processes
|
||||||
cgroup.event_control # an interface for event_fd()
|
cgroup.event_control # an interface for event_fd()
|
||||||
memory.usage_in_bytes # show current memory(RSS+Cache) usage.
|
memory.usage_in_bytes # show current res_counter usage for memory
|
||||||
memory.memsw.usage_in_bytes # show current memory+Swap usage
|
(See 5.5 for details)
|
||||||
|
memory.memsw.usage_in_bytes # show current res_counter usage for memory+Swap
|
||||||
|
(See 5.5 for details)
|
||||||
memory.limit_in_bytes # set/show limit of memory usage
|
memory.limit_in_bytes # set/show limit of memory usage
|
||||||
memory.memsw.limit_in_bytes # set/show limit of memory+Swap usage
|
memory.memsw.limit_in_bytes # set/show limit of memory+Swap usage
|
||||||
memory.failcnt # show the number of memory usage hits limits
|
memory.failcnt # show the number of memory usage hits limits
|
||||||
|
@ -68,6 +70,7 @@ Brief summary of control files.
|
||||||
(See sysctl's vm.swappiness)
|
(See sysctl's vm.swappiness)
|
||||||
memory.move_charge_at_immigrate # set/show controls of moving charges
|
memory.move_charge_at_immigrate # set/show controls of moving charges
|
||||||
memory.oom_control # set/show oom controls.
|
memory.oom_control # set/show oom controls.
|
||||||
|
memory.numa_stat # show the number of memory usage per numa node
|
||||||
|
|
||||||
1. History
|
1. History
|
||||||
|
|
||||||
|
@ -179,7 +182,7 @@ behind this approach is that a cgroup that aggressively uses a shared
|
||||||
page will eventually get charged for it (once it is uncharged from
|
page will eventually get charged for it (once it is uncharged from
|
||||||
the cgroup that brought it in -- this will happen on memory pressure).
|
the cgroup that brought it in -- this will happen on memory pressure).
|
||||||
|
|
||||||
Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used..
|
Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used.
|
||||||
When you do swapoff and make swapped-out pages of shmem(tmpfs) to
|
When you do swapoff and make swapped-out pages of shmem(tmpfs) to
|
||||||
be backed into memory in force, charges for pages are accounted against the
|
be backed into memory in force, charges for pages are accounted against the
|
||||||
caller of swapoff rather than the users of shmem.
|
caller of swapoff rather than the users of shmem.
|
||||||
|
@ -211,7 +214,7 @@ affecting global LRU, memory+swap limit is better than just limiting swap from
|
||||||
OS point of view.
|
OS point of view.
|
||||||
|
|
||||||
* What happens when a cgroup hits memory.memsw.limit_in_bytes
|
* What happens when a cgroup hits memory.memsw.limit_in_bytes
|
||||||
When a cgroup his memory.memsw.limit_in_bytes, it's useless to do swap-out
|
When a cgroup hits memory.memsw.limit_in_bytes, it's useless to do swap-out
|
||||||
in this cgroup. Then, swap-out will not be done by cgroup routine and file
|
in this cgroup. Then, swap-out will not be done by cgroup routine and file
|
||||||
caches are dropped. But as mentioned above, global LRU can do swapout memory
|
caches are dropped. But as mentioned above, global LRU can do swapout memory
|
||||||
from it for sanity of the system's memory management state. You can't forbid
|
from it for sanity of the system's memory management state. You can't forbid
|
||||||
|
@ -261,16 +264,17 @@ b. Enable CONFIG_RESOURCE_COUNTERS
|
||||||
c. Enable CONFIG_CGROUP_MEM_RES_CTLR
|
c. Enable CONFIG_CGROUP_MEM_RES_CTLR
|
||||||
d. Enable CONFIG_CGROUP_MEM_RES_CTLR_SWAP (to use swap extension)
|
d. Enable CONFIG_CGROUP_MEM_RES_CTLR_SWAP (to use swap extension)
|
||||||
|
|
||||||
1. Prepare the cgroups
|
1. Prepare the cgroups (see cgroups.txt, Why are cgroups needed?)
|
||||||
# mkdir -p /cgroups
|
# mount -t tmpfs none /sys/fs/cgroup
|
||||||
# mount -t cgroup none /cgroups -o memory
|
# mkdir /sys/fs/cgroup/memory
|
||||||
|
# mount -t cgroup none /sys/fs/cgroup/memory -o memory
|
||||||
|
|
||||||
2. Make the new group and move bash into it
|
2. Make the new group and move bash into it
|
||||||
# mkdir /cgroups/0
|
# mkdir /sys/fs/cgroup/memory/0
|
||||||
# echo $$ > /cgroups/0/tasks
|
# echo $$ > /sys/fs/cgroup/memory/0/tasks
|
||||||
|
|
||||||
Since now we're in the 0 cgroup, we can alter the memory limit:
|
Since now we're in the 0 cgroup, we can alter the memory limit:
|
||||||
# echo 4M > /cgroups/0/memory.limit_in_bytes
|
# echo 4M > /sys/fs/cgroup/memory/0/memory.limit_in_bytes
|
||||||
|
|
||||||
NOTE: We can use a suffix (k, K, m, M, g or G) to indicate values in kilo,
|
NOTE: We can use a suffix (k, K, m, M, g or G) to indicate values in kilo,
|
||||||
mega or gigabytes. (Here, Kilo, Mega, Giga are Kibibytes, Mebibytes, Gibibytes.)
|
mega or gigabytes. (Here, Kilo, Mega, Giga are Kibibytes, Mebibytes, Gibibytes.)
|
||||||
|
@ -278,11 +282,11 @@ mega or gigabytes. (Here, Kilo, Mega, Giga are Kibibytes, Mebibytes, Gibibytes.)
|
||||||
NOTE: We can write "-1" to reset the *.limit_in_bytes(unlimited).
|
NOTE: We can write "-1" to reset the *.limit_in_bytes(unlimited).
|
||||||
NOTE: We cannot set limits on the root cgroup any more.
|
NOTE: We cannot set limits on the root cgroup any more.
|
||||||
|
|
||||||
# cat /cgroups/0/memory.limit_in_bytes
|
# cat /sys/fs/cgroup/memory/0/memory.limit_in_bytes
|
||||||
4194304
|
4194304
|
||||||
|
|
||||||
We can check the usage:
|
We can check the usage:
|
||||||
# cat /cgroups/0/memory.usage_in_bytes
|
# cat /sys/fs/cgroup/memory/0/memory.usage_in_bytes
|
||||||
1216512
|
1216512
|
||||||
|
|
||||||
A successful write to this file does not guarantee a successful set of
|
A successful write to this file does not guarantee a successful set of
|
||||||
|
@ -453,6 +457,33 @@ memory under it will be reclaimed.
|
||||||
You can reset failcnt by writing 0 to failcnt file.
|
You can reset failcnt by writing 0 to failcnt file.
|
||||||
# echo 0 > .../memory.failcnt
|
# echo 0 > .../memory.failcnt
|
||||||
|
|
||||||
|
5.5 usage_in_bytes
|
||||||
|
|
||||||
|
For efficiency, as other kernel components, memory cgroup uses some optimization
|
||||||
|
to avoid unnecessary cacheline false sharing. usage_in_bytes is affected by the
|
||||||
|
method and doesn't show 'exact' value of memory(and swap) usage, it's an fuzz
|
||||||
|
value for efficient access. (Of course, when necessary, it's synchronized.)
|
||||||
|
If you want to know more exact memory usage, you should use RSS+CACHE(+SWAP)
|
||||||
|
value in memory.stat(see 5.2).
|
||||||
|
|
||||||
|
5.6 numa_stat
|
||||||
|
|
||||||
|
This is similar to numa_maps but operates on a per-memcg basis. This is
|
||||||
|
useful for providing visibility into the numa locality information within
|
||||||
|
an memcg since the pages are allowed to be allocated from any physical
|
||||||
|
node. One of the usecases is evaluating application performance by
|
||||||
|
combining this information with the application's cpu allocation.
|
||||||
|
|
||||||
|
We export "total", "file", "anon" and "unevictable" pages per-node for
|
||||||
|
each memcg. The ouput format of memory.numa_stat is:
|
||||||
|
|
||||||
|
total=<total pages> N0=<node 0 pages> N1=<node 1 pages> ...
|
||||||
|
file=<total file pages> N0=<node 0 pages> N1=<node 1 pages> ...
|
||||||
|
anon=<total anon pages> N0=<node 0 pages> N1=<node 1 pages> ...
|
||||||
|
unevictable=<total anon pages> N0=<node 0 pages> N1=<node 1 pages> ...
|
||||||
|
|
||||||
|
And we have total = file + anon + unevictable.
|
||||||
|
|
||||||
6. Hierarchy support
|
6. Hierarchy support
|
||||||
|
|
||||||
The memory controller supports a deep hierarchy and hierarchical accounting.
|
The memory controller supports a deep hierarchy and hierarchical accounting.
|
||||||
|
@ -460,13 +491,13 @@ The hierarchy is created by creating the appropriate cgroups in the
|
||||||
cgroup filesystem. Consider for example, the following cgroup filesystem
|
cgroup filesystem. Consider for example, the following cgroup filesystem
|
||||||
hierarchy
|
hierarchy
|
||||||
|
|
||||||
root
|
root
|
||||||
/ | \
|
/ | \
|
||||||
/ | \
|
/ | \
|
||||||
a b c
|
a b c
|
||||||
| \
|
| \
|
||||||
| \
|
| \
|
||||||
d e
|
d e
|
||||||
|
|
||||||
In the diagram above, with hierarchical accounting enabled, all memory
|
In the diagram above, with hierarchical accounting enabled, all memory
|
||||||
usage of e, is accounted to its ancestors up until the root (i.e, c and root),
|
usage of e, is accounted to its ancestors up until the root (i.e, c and root),
|
||||||
|
|
397
Documentation/devicetree/bindings/crypto/fsl-sec4.txt
Normal file
397
Documentation/devicetree/bindings/crypto/fsl-sec4.txt
Normal file
|
@ -0,0 +1,397 @@
|
||||||
|
=====================================================================
|
||||||
|
SEC 4 Device Tree Binding
|
||||||
|
Copyright (C) 2008-2011 Freescale Semiconductor Inc.
|
||||||
|
|
||||||
|
CONTENTS
|
||||||
|
-Overview
|
||||||
|
-SEC 4 Node
|
||||||
|
-Job Ring Node
|
||||||
|
-Run Time Integrity Check (RTIC) Node
|
||||||
|
-Run Time Integrity Check (RTIC) Memory Node
|
||||||
|
-Secure Non-Volatile Storage (SNVS) Node
|
||||||
|
-Full Example
|
||||||
|
|
||||||
|
NOTE: the SEC 4 is also known as Freescale's Cryptographic Accelerator
|
||||||
|
Accelerator and Assurance Module (CAAM).
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Overview
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
SEC 4 h/w can process requests from 2 types of sources.
|
||||||
|
1. DPAA Queue Interface (HW interface between Queue Manager & SEC 4).
|
||||||
|
2. Job Rings (HW interface between cores & SEC 4 registers).
|
||||||
|
|
||||||
|
High Speed Data Path Configuration:
|
||||||
|
|
||||||
|
HW interface between QM & SEC 4 and also BM & SEC 4, on DPAA-enabled parts
|
||||||
|
such as the P4080. The number of simultaneous dequeues the QI can make is
|
||||||
|
equal to the number of Descriptor Controller (DECO) engines in a particular
|
||||||
|
SEC version. E.g., the SEC 4.0 in the P4080 has 5 DECOs and can thus
|
||||||
|
dequeue from 5 subportals simultaneously.
|
||||||
|
|
||||||
|
Job Ring Data Path Configuration:
|
||||||
|
|
||||||
|
Each JR is located on a separate 4k page, they may (or may not) be made visible
|
||||||
|
in the memory partition devoted to a particular core. The P4080 has 4 JRs, so
|
||||||
|
up to 4 JRs can be configured; and all 4 JRs process requests in parallel.
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
SEC 4 Node
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
Node defines the base address of the SEC 4 block.
|
||||||
|
This block specifies the address range of all global
|
||||||
|
configuration registers for the SEC 4 block. It
|
||||||
|
also receives interrupts from the Run Time Integrity Check
|
||||||
|
(RTIC) function within the SEC 4 block.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,sec-v4.0"
|
||||||
|
|
||||||
|
- #address-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
for representing physical addresses in child nodes.
|
||||||
|
|
||||||
|
- #size-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
for representing the size of physical addresses in
|
||||||
|
child nodes.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical
|
||||||
|
address and length of the SEC4 configuration registers.
|
||||||
|
registers
|
||||||
|
|
||||||
|
- ranges
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
range of the SEC 4.0 register space (-SNVS not included). A
|
||||||
|
triplet that includes the child address, parent address, &
|
||||||
|
length.
|
||||||
|
|
||||||
|
- interrupts
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop_encoded-array>
|
||||||
|
Definition: Specifies the interrupts generated by this
|
||||||
|
device. The value of the interrupts property
|
||||||
|
consists of one interrupt specifier. The format
|
||||||
|
of the specifier is defined by the binding document
|
||||||
|
describing the node's interrupt parent.
|
||||||
|
|
||||||
|
- interrupt-parent
|
||||||
|
Usage: (required if interrupt property is defined)
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: A single <phandle> value that points
|
||||||
|
to the interrupt parent to which the child domain
|
||||||
|
is being mapped.
|
||||||
|
|
||||||
|
Note: All other standard properties (see the ePAPR) are allowed
|
||||||
|
but are optional.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
crypto@300000 {
|
||||||
|
compatible = "fsl,sec-v4.0";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x300000 0x10000>;
|
||||||
|
ranges = <0 0x300000 0x10000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <92 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Job Ring (JR) Node
|
||||||
|
|
||||||
|
Child of the crypto node defines data processing interface to SEC 4
|
||||||
|
across the peripheral bus for purposes of processing
|
||||||
|
cryptographic descriptors. The specified address
|
||||||
|
range can be made visible to one (or more) cores.
|
||||||
|
The interrupt defined for this node is controlled within
|
||||||
|
the address range of this node.
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,sec-v4.0-job-ring"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: Specifies a two JR parameters: an offset from
|
||||||
|
the parent physical address and the length the JR registers.
|
||||||
|
|
||||||
|
- fsl,liodn
|
||||||
|
Usage: optional-but-recommended
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition:
|
||||||
|
Specifies the LIODN to be used in conjunction with
|
||||||
|
the ppid-to-liodn table that specifies the PPID to LIODN mapping.
|
||||||
|
Needed if the PAMU is used. Value is a 12 bit value
|
||||||
|
where value is a LIODN ID for this JR. This property is
|
||||||
|
normally set by boot firmware.
|
||||||
|
|
||||||
|
- interrupts
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop_encoded-array>
|
||||||
|
Definition: Specifies the interrupts generated by this
|
||||||
|
device. The value of the interrupts property
|
||||||
|
consists of one interrupt specifier. The format
|
||||||
|
of the specifier is defined by the binding document
|
||||||
|
describing the node's interrupt parent.
|
||||||
|
|
||||||
|
- interrupt-parent
|
||||||
|
Usage: (required if interrupt property is defined)
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: A single <phandle> value that points
|
||||||
|
to the interrupt parent to which the child domain
|
||||||
|
is being mapped.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
jr@1000 {
|
||||||
|
compatible = "fsl,sec-v4.0-job-ring";
|
||||||
|
reg = <0x1000 0x1000>;
|
||||||
|
fsl,liodn = <0x081>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <88 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Run Time Integrity Check (RTIC) Node
|
||||||
|
|
||||||
|
Child node of the crypto node. Defines a register space that
|
||||||
|
contains up to 5 sets of addresses and their lengths (sizes) that
|
||||||
|
will be checked at run time. After an initial hash result is
|
||||||
|
calculated, these addresses are checked by HW to monitor any
|
||||||
|
change. If any memory is modified, a Security Violation is
|
||||||
|
triggered (see SNVS definition).
|
||||||
|
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,sec-v4.0-rtic".
|
||||||
|
|
||||||
|
- #address-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
for representing physical addresses in child nodes. Must
|
||||||
|
have a value of 1.
|
||||||
|
|
||||||
|
- #size-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
for representing the size of physical addresses in
|
||||||
|
child nodes. Must have a value of 1.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies a two parameters:
|
||||||
|
an offset from the parent physical address and the length
|
||||||
|
the SEC4 registers.
|
||||||
|
|
||||||
|
- ranges
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
range of the SEC 4 register space (-SNVS not included). A
|
||||||
|
triplet that includes the child address, parent address, &
|
||||||
|
length.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
rtic@6000 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x6000 0x100>;
|
||||||
|
ranges = <0x0 0x6100 0xe00>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Run Time Integrity Check (RTIC) Memory Node
|
||||||
|
A child node that defines individual RTIC memory regions that are used to
|
||||||
|
perform run-time integrity check of memory areas that should not modified.
|
||||||
|
The node defines a register that contains the memory address &
|
||||||
|
length (combined) and a second register that contains the hash result
|
||||||
|
in big endian format.
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,sec-v4.0-rtic-memory".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies two parameters:
|
||||||
|
an offset from the parent physical address and the length:
|
||||||
|
|
||||||
|
1. The location of the RTIC memory address & length registers.
|
||||||
|
2. The location RTIC hash result.
|
||||||
|
|
||||||
|
- fsl,rtic-region
|
||||||
|
Usage: optional-but-recommended
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition:
|
||||||
|
Specifies the HW address (36 bit address) for this region
|
||||||
|
followed by the length of the HW partition to be checked;
|
||||||
|
the address is represented as a 64 bit quantity followed
|
||||||
|
by a 32 bit length.
|
||||||
|
|
||||||
|
- fsl,liodn
|
||||||
|
Usage: optional-but-recommended
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition:
|
||||||
|
Specifies the LIODN to be used in conjunction with
|
||||||
|
the ppid-to-liodn table that specifies the PPID to LIODN
|
||||||
|
mapping. Needed if the PAMU is used. Value is a 12 bit value
|
||||||
|
where value is a LIODN ID for this RTIC memory region. This
|
||||||
|
property is normally set by boot firmware.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
rtic-a@0 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
||||||
|
reg = <0x00 0x20 0x100 0x80>;
|
||||||
|
fsl,liodn = <0x03c>;
|
||||||
|
fsl,rtic-region = <0x12345678 0x12345678 0x12345678>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Secure Non-Volatile Storage (SNVS) Node
|
||||||
|
|
||||||
|
Node defines address range and the associated
|
||||||
|
interrupt for the SNVS function. This function
|
||||||
|
monitors security state information & reports
|
||||||
|
security violations.
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,sec-v4.0-mon".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical
|
||||||
|
address and length of the SEC4 configuration
|
||||||
|
registers.
|
||||||
|
|
||||||
|
- interrupts
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop_encoded-array>
|
||||||
|
Definition: Specifies the interrupts generated by this
|
||||||
|
device. The value of the interrupts property
|
||||||
|
consists of one interrupt specifier. The format
|
||||||
|
of the specifier is defined by the binding document
|
||||||
|
describing the node's interrupt parent.
|
||||||
|
|
||||||
|
- interrupt-parent
|
||||||
|
Usage: (required if interrupt property is defined)
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: A single <phandle> value that points
|
||||||
|
to the interrupt parent to which the child domain
|
||||||
|
is being mapped.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
sec_mon@314000 {
|
||||||
|
compatible = "fsl,sec-v4.0-mon";
|
||||||
|
reg = <0x314000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <93 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
FULL EXAMPLE
|
||||||
|
|
||||||
|
crypto: crypto@300000 {
|
||||||
|
compatible = "fsl,sec-v4.0";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x300000 0x10000>;
|
||||||
|
ranges = <0 0x300000 0x10000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <92 2>;
|
||||||
|
|
||||||
|
sec_jr0: jr@1000 {
|
||||||
|
compatible = "fsl,sec-v4.0-job-ring";
|
||||||
|
reg = <0x1000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <88 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sec_jr1: jr@2000 {
|
||||||
|
compatible = "fsl,sec-v4.0-job-ring";
|
||||||
|
reg = <0x2000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <89 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sec_jr2: jr@3000 {
|
||||||
|
compatible = "fsl,sec-v4.0-job-ring";
|
||||||
|
reg = <0x3000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <90 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sec_jr3: jr@4000 {
|
||||||
|
compatible = "fsl,sec-v4.0-job-ring";
|
||||||
|
reg = <0x4000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <91 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rtic@6000 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x6000 0x100>;
|
||||||
|
ranges = <0x0 0x6100 0xe00>;
|
||||||
|
|
||||||
|
rtic_a: rtic-a@0 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
||||||
|
reg = <0x00 0x20 0x100 0x80>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rtic_b: rtic-b@20 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
||||||
|
reg = <0x20 0x20 0x200 0x80>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rtic_c: rtic-c@40 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
||||||
|
reg = <0x40 0x20 0x300 0x80>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rtic_d: rtic-d@60 {
|
||||||
|
compatible = "fsl,sec-v4.0-rtic-memory";
|
||||||
|
reg = <0x60 0x20 0x500 0x80>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sec_mon: sec_mon@314000 {
|
||||||
|
compatible = "fsl,sec-v4.0-mon";
|
||||||
|
reg = <0x314000 0x1000>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <93 2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
36
Documentation/devicetree/bindings/gpio/gpio_keys.txt
Normal file
36
Documentation/devicetree/bindings/gpio/gpio_keys.txt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
Device-Tree bindings for input/gpio_keys.c keyboard driver
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible = "gpio-keys";
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- autorepeat: Boolean, Enable auto repeat feature of Linux input
|
||||||
|
subsystem.
|
||||||
|
|
||||||
|
Each button (key) is represented as a sub-node of "gpio-keys":
|
||||||
|
Subnode properties:
|
||||||
|
|
||||||
|
- gpios: OF devcie-tree gpio specificatin.
|
||||||
|
- label: Descriptive name of the key.
|
||||||
|
- linux,code: Keycode to emit.
|
||||||
|
|
||||||
|
Optional subnode-properties:
|
||||||
|
- linux,input-type: Specify event type this button/key generates.
|
||||||
|
If not specified defaults to <1> == EV_KEY.
|
||||||
|
- debounce-interval: Debouncing interval time in milliseconds.
|
||||||
|
If not specified defaults to 5.
|
||||||
|
- gpio-key,wakeup: Boolean, button can wake-up the system.
|
||||||
|
|
||||||
|
Example nodes:
|
||||||
|
|
||||||
|
gpio_keys {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
autorepeat;
|
||||||
|
button@21 {
|
||||||
|
label = "GPIO Key UP";
|
||||||
|
linux,code = <103>;
|
||||||
|
gpios = <&gpio1 0 1>;
|
||||||
|
};
|
||||||
|
...
|
61
Documentation/devicetree/bindings/net/can/fsl-flexcan.txt
Executable file
61
Documentation/devicetree/bindings/net/can/fsl-flexcan.txt
Executable file
|
@ -0,0 +1,61 @@
|
||||||
|
CAN Device Tree Bindings
|
||||||
|
------------------------
|
||||||
|
2011 Freescale Semiconductor, Inc.
|
||||||
|
|
||||||
|
fsl,flexcan-v1.0 nodes
|
||||||
|
-----------------------
|
||||||
|
In addition to the required compatible-, reg- and interrupt-properties, you can
|
||||||
|
also specify which clock source shall be used for the controller.
|
||||||
|
|
||||||
|
CPI Clock- Can Protocol Interface Clock
|
||||||
|
This CLK_SRC bit of CTRL(control register) selects the clock source to
|
||||||
|
the CAN Protocol Interface(CPI) to be either the peripheral clock
|
||||||
|
(driven by the PLL) or the crystal oscillator clock. The selected clock
|
||||||
|
is the one fed to the prescaler to generate the Serial Clock (Sclock).
|
||||||
|
The PRESDIV field of CTRL(control register) controls a prescaler that
|
||||||
|
generates the Serial Clock (Sclock), whose period defines the
|
||||||
|
time quantum used to compose the CAN waveform.
|
||||||
|
|
||||||
|
Can Engine Clock Source
|
||||||
|
There are two sources for CAN clock
|
||||||
|
- Platform Clock It represents the bus clock
|
||||||
|
- Oscillator Clock
|
||||||
|
|
||||||
|
Peripheral Clock (PLL)
|
||||||
|
--------------
|
||||||
|
|
|
||||||
|
--------- -------------
|
||||||
|
| |CPI Clock | Prescaler | Sclock
|
||||||
|
| |---------------->| (1.. 256) |------------>
|
||||||
|
--------- -------------
|
||||||
|
| |
|
||||||
|
-------------- ---------------------CLK_SRC
|
||||||
|
Oscillator Clock
|
||||||
|
|
||||||
|
- fsl,flexcan-clock-source : CAN Engine Clock Source.This property selects
|
||||||
|
the peripheral clock. PLL clock is fed to the
|
||||||
|
prescaler to generate the Serial Clock (Sclock).
|
||||||
|
Valid values are "oscillator" and "platform"
|
||||||
|
"oscillator": CAN engine clock source is oscillator clock.
|
||||||
|
"platform" The CAN engine clock source is the bus clock
|
||||||
|
(platform clock).
|
||||||
|
|
||||||
|
- fsl,flexcan-clock-divider : for the reference and system clock, an additional
|
||||||
|
clock divider can be specified.
|
||||||
|
- clock-frequency: frequency required to calculate the bitrate for FlexCAN.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
- v1.0 of flexcan-v1.0 represent the IP block version for P1010 SOC.
|
||||||
|
- P1010 does not have oscillator as the Clock Source.So the default
|
||||||
|
Clock Source is platform clock.
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
can0@1c000 {
|
||||||
|
compatible = "fsl,flexcan-v1.0";
|
||||||
|
reg = <0x1c000 0x1000>;
|
||||||
|
interrupts = <48 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
fsl,flexcan-clock-source = "platform";
|
||||||
|
fsl,flexcan-clock-divider = <2>;
|
||||||
|
clock-frequency = <fixed by u-boot>;
|
||||||
|
};
|
|
@ -74,3 +74,57 @@ Example:
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
phy-handle = <&phy0>
|
phy-handle = <&phy0>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
* Gianfar PTP clock nodes
|
||||||
|
|
||||||
|
General Properties:
|
||||||
|
|
||||||
|
- compatible Should be "fsl,etsec-ptp"
|
||||||
|
- reg Offset and length of the register set for the device
|
||||||
|
- interrupts There should be at least two interrupts. Some devices
|
||||||
|
have as many as four PTP related interrupts.
|
||||||
|
|
||||||
|
Clock Properties:
|
||||||
|
|
||||||
|
- fsl,tclk-period Timer reference clock period in nanoseconds.
|
||||||
|
- fsl,tmr-prsc Prescaler, divides the output clock.
|
||||||
|
- fsl,tmr-add Frequency compensation value.
|
||||||
|
- fsl,tmr-fiper1 Fixed interval period pulse generator.
|
||||||
|
- fsl,tmr-fiper2 Fixed interval period pulse generator.
|
||||||
|
- fsl,max-adj Maximum frequency adjustment in parts per billion.
|
||||||
|
|
||||||
|
These properties set the operational parameters for the PTP
|
||||||
|
clock. You must choose these carefully for the clock to work right.
|
||||||
|
Here is how to figure good values:
|
||||||
|
|
||||||
|
TimerOsc = system clock MHz
|
||||||
|
tclk_period = desired clock period nanoseconds
|
||||||
|
NominalFreq = 1000 / tclk_period MHz
|
||||||
|
FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0)
|
||||||
|
tmr_add = ceil(2^32 / FreqDivRatio)
|
||||||
|
OutputClock = NominalFreq / tmr_prsc MHz
|
||||||
|
PulseWidth = 1 / OutputClock microseconds
|
||||||
|
FiperFreq1 = desired frequency in Hz
|
||||||
|
FiperDiv1 = 1000000 * OutputClock / FiperFreq1
|
||||||
|
tmr_fiper1 = tmr_prsc * tclk_period * FiperDiv1 - tclk_period
|
||||||
|
max_adj = 1000000000 * (FreqDivRatio - 1.0) - 1
|
||||||
|
|
||||||
|
The calculation for tmr_fiper2 is the same as for tmr_fiper1. The
|
||||||
|
driver expects that tmr_fiper1 will be correctly set to produce a 1
|
||||||
|
Pulse Per Second (PPS) signal, since this will be offered to the PPS
|
||||||
|
subsystem to synchronize the Linux clock.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
ptp_clock@24E00 {
|
||||||
|
compatible = "fsl,etsec-ptp";
|
||||||
|
reg = <0x24E00 0xB0>;
|
||||||
|
interrupts = <12 0x8 13 0x8>;
|
||||||
|
interrupt-parent = < &ipic >;
|
||||||
|
fsl,tclk-period = <10>;
|
||||||
|
fsl,tmr-prsc = <100>;
|
||||||
|
fsl,tmr-add = <0x999999A4>;
|
||||||
|
fsl,tmr-fiper1 = <0x3B9AC9F6>;
|
||||||
|
fsl,tmr-fiper2 = <0x00018696>;
|
||||||
|
fsl,max-adj = <659999998>;
|
||||||
|
};
|
||||||
|
|
76
Documentation/devicetree/bindings/powerpc/fsl/ifc.txt
Normal file
76
Documentation/devicetree/bindings/powerpc/fsl/ifc.txt
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
Integrated Flash Controller
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
- name : Should be ifc
|
||||||
|
- compatible : should contain "fsl,ifc". The version of the integrated
|
||||||
|
flash controller can be found in the IFC_REV register at
|
||||||
|
offset zero.
|
||||||
|
|
||||||
|
- #address-cells : Should be either two or three. The first cell is the
|
||||||
|
chipselect number, and the remaining cells are the
|
||||||
|
offset into the chipselect.
|
||||||
|
- #size-cells : Either one or two, depending on how large each chipselect
|
||||||
|
can be.
|
||||||
|
- reg : Offset and length of the register set for the device
|
||||||
|
- interrupts : IFC has two interrupts. The first one is the "common"
|
||||||
|
interrupt(CM_EVTER_STAT), and second is the NAND interrupt
|
||||||
|
(NAND_EVTER_STAT).
|
||||||
|
|
||||||
|
- ranges : Each range corresponds to a single chipselect, and covers
|
||||||
|
the entire access window as configured.
|
||||||
|
|
||||||
|
Child device nodes describe the devices connected to IFC such as NOR (e.g.
|
||||||
|
cfi-flash) and NAND (fsl,ifc-nand). There might be board specific devices
|
||||||
|
like FPGAs, CPLDs, etc.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
ifc@ffe1e000 {
|
||||||
|
compatible = "fsl,ifc", "simple-bus";
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x0 0xffe1e000 0 0x2000>;
|
||||||
|
interrupts = <16 2 19 2>;
|
||||||
|
|
||||||
|
/* NOR, NAND Flashes and CPLD on board */
|
||||||
|
ranges = <0x0 0x0 0x0 0xee000000 0x02000000
|
||||||
|
0x1 0x0 0x0 0xffa00000 0x00010000
|
||||||
|
0x3 0x0 0x0 0xffb00000 0x00020000>;
|
||||||
|
|
||||||
|
flash@0,0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "cfi-flash";
|
||||||
|
reg = <0x0 0x0 0x2000000>;
|
||||||
|
bank-width = <2>;
|
||||||
|
device-width = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
/* 32MB for user data */
|
||||||
|
reg = <0x0 0x02000000>;
|
||||||
|
label = "NOR Data";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
flash@1,0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,ifc-nand";
|
||||||
|
reg = <0x1 0x0 0x10000>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
/* This location must not be altered */
|
||||||
|
/* 1MB for u-boot Bootloader Image */
|
||||||
|
reg = <0x0 0x00100000>;
|
||||||
|
label = "NAND U-Boot Image";
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cpld@3,0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,p1010rdb-cpld";
|
||||||
|
reg = <0x3 0x0 0x000001f>;
|
||||||
|
};
|
||||||
|
};
|
38
Documentation/devicetree/bindings/powerpc/fsl/mpic-timer.txt
Normal file
38
Documentation/devicetree/bindings/powerpc/fsl/mpic-timer.txt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
* Freescale MPIC timers
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "fsl,mpic-global-timer"
|
||||||
|
|
||||||
|
- reg : Contains two regions. The first is the main timer register bank
|
||||||
|
(GTCCRxx, GTBCRxx, GTVPRxx, GTDRxx). The second is the timer control
|
||||||
|
register (TCRx) for the group.
|
||||||
|
|
||||||
|
- fsl,available-ranges: use <start count> style section to define which
|
||||||
|
timer interrupts can be used. This property is optional; without this,
|
||||||
|
all timers within the group can be used.
|
||||||
|
|
||||||
|
- interrupts: one interrupt per timer in the group, in order, starting
|
||||||
|
with timer zero. If timer-available-ranges is present, only the
|
||||||
|
interrupts that correspond to available timers shall be present.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
/* Note that this requires #interrupt-cells to be 4 */
|
||||||
|
timer0: timer@41100 {
|
||||||
|
compatible = "fsl,mpic-global-timer";
|
||||||
|
reg = <0x41100 0x100 0x41300 4>;
|
||||||
|
|
||||||
|
/* Another AMP partition is using timers 0 and 1 */
|
||||||
|
fsl,available-ranges = <2 2>;
|
||||||
|
|
||||||
|
interrupts = <2 0 3 0
|
||||||
|
3 0 3 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
timer1: timer@42100 {
|
||||||
|
compatible = "fsl,mpic-global-timer";
|
||||||
|
reg = <0x42100 0x100 0x42300 4>;
|
||||||
|
interrupts = <4 0 3 0
|
||||||
|
5 0 3 0
|
||||||
|
6 0 3 0
|
||||||
|
7 0 3 0>;
|
||||||
|
};
|
|
@ -190,7 +190,7 @@ EXAMPLE 4
|
||||||
*/
|
*/
|
||||||
timer0: timer@41100 {
|
timer0: timer@41100 {
|
||||||
compatible = "fsl,mpic-global-timer";
|
compatible = "fsl,mpic-global-timer";
|
||||||
reg = <0x41100 0x100>;
|
reg = <0x41100 0x100 0x41300 4>;
|
||||||
interrupts = <0 0 3 0
|
interrupts = <0 0 3 0
|
||||||
1 0 3 0
|
1 0 3 0
|
||||||
2 0 3 0
|
2 0 3 0
|
||||||
|
|
|
@ -127,7 +127,7 @@ Nintendo Wii device tree
|
||||||
- reg : should contain the SDHCI registers location and length
|
- reg : should contain the SDHCI registers location and length
|
||||||
- interrupts : should contain the SDHCI interrupt
|
- interrupts : should contain the SDHCI interrupt
|
||||||
|
|
||||||
1.j) The Inter-Processsor Communication (IPC) node
|
1.j) The Inter-Processor Communication (IPC) node
|
||||||
|
|
||||||
Represent the Inter-Processor Communication interface. This interface
|
Represent the Inter-Processor Communication interface. This interface
|
||||||
enables communications between the Broadway and the Starlet processors.
|
enables communications between the Broadway and the Starlet processors.
|
||||||
|
|
|
@ -12,8 +12,9 @@ Table of Contents
|
||||||
=================
|
=================
|
||||||
|
|
||||||
I - Introduction
|
I - Introduction
|
||||||
1) Entry point for arch/powerpc
|
1) Entry point for arch/arm
|
||||||
2) Entry point for arch/x86
|
2) Entry point for arch/powerpc
|
||||||
|
3) Entry point for arch/x86
|
||||||
|
|
||||||
II - The DT block format
|
II - The DT block format
|
||||||
1) Header
|
1) Header
|
||||||
|
@ -148,7 +149,46 @@ upgrades without significantly impacting the kernel code or cluttering
|
||||||
it with special cases.
|
it with special cases.
|
||||||
|
|
||||||
|
|
||||||
1) Entry point for arch/powerpc
|
1) Entry point for arch/arm
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
There is one single entry point to the kernel, at the start
|
||||||
|
of the kernel image. That entry point supports two calling
|
||||||
|
conventions. A summary of the interface is described here. A full
|
||||||
|
description of the boot requirements is documented in
|
||||||
|
Documentation/arm/Booting
|
||||||
|
|
||||||
|
a) ATAGS interface. Minimal information is passed from firmware
|
||||||
|
to the kernel with a tagged list of predefined parameters.
|
||||||
|
|
||||||
|
r0 : 0
|
||||||
|
|
||||||
|
r1 : Machine type number
|
||||||
|
|
||||||
|
r2 : Physical address of tagged list in system RAM
|
||||||
|
|
||||||
|
b) Entry with a flattened device-tree block. Firmware loads the
|
||||||
|
physical address of the flattened device tree block (dtb) into r2,
|
||||||
|
r1 is not used, but it is considered good practise to use a valid
|
||||||
|
machine number as described in Documentation/arm/Booting.
|
||||||
|
|
||||||
|
r0 : 0
|
||||||
|
|
||||||
|
r1 : Valid machine type number. When using a device tree,
|
||||||
|
a single machine type number will often be assigned to
|
||||||
|
represent a class or family of SoCs.
|
||||||
|
|
||||||
|
r2 : physical pointer to the device-tree block
|
||||||
|
(defined in chapter II) in RAM. Device tree can be located
|
||||||
|
anywhere in system RAM, but it should be aligned on a 64 bit
|
||||||
|
boundary.
|
||||||
|
|
||||||
|
The kernel will differentiate between ATAGS and device tree booting by
|
||||||
|
reading the memory pointed to by r2 and looking for either the flattened
|
||||||
|
device tree block magic value (0xd00dfeed) or the ATAG_CORE value at
|
||||||
|
offset 0x4 from r2 (0x54410001).
|
||||||
|
|
||||||
|
2) Entry point for arch/powerpc
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
There is one single entry point to the kernel, at the start
|
There is one single entry point to the kernel, at the start
|
||||||
|
@ -226,7 +266,7 @@ it with special cases.
|
||||||
cannot support both configurations with Book E and configurations
|
cannot support both configurations with Book E and configurations
|
||||||
with classic Powerpc architectures.
|
with classic Powerpc architectures.
|
||||||
|
|
||||||
2) Entry point for arch/x86
|
3) Entry point for arch/x86
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
There is one single 32bit entry point to the kernel at code32_start,
|
There is one single 32bit entry point to the kernel at code32_start,
|
||||||
|
|
|
@ -1 +1,96 @@
|
||||||
See Documentation/crypto/async-tx-api.txt
|
DMA Engine API Guide
|
||||||
|
====================
|
||||||
|
|
||||||
|
Vinod Koul <vinod dot koul at intel.com>
|
||||||
|
|
||||||
|
NOTE: For DMA Engine usage in async_tx please see:
|
||||||
|
Documentation/crypto/async-tx-api.txt
|
||||||
|
|
||||||
|
|
||||||
|
Below is a guide to device driver writers on how to use the Slave-DMA API of the
|
||||||
|
DMA Engine. This is applicable only for slave DMA usage only.
|
||||||
|
|
||||||
|
The slave DMA usage consists of following steps
|
||||||
|
1. Allocate a DMA slave channel
|
||||||
|
2. Set slave and controller specific parameters
|
||||||
|
3. Get a descriptor for transaction
|
||||||
|
4. Submit the transaction and wait for callback notification
|
||||||
|
|
||||||
|
1. Allocate a DMA slave channel
|
||||||
|
Channel allocation is slightly different in the slave DMA context, client
|
||||||
|
drivers typically need a channel from a particular DMA controller only and even
|
||||||
|
in some cases a specific channel is desired. To request a channel
|
||||||
|
dma_request_channel() API is used.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
struct dma_chan *dma_request_channel(dma_cap_mask_t mask,
|
||||||
|
dma_filter_fn filter_fn,
|
||||||
|
void *filter_param);
|
||||||
|
where dma_filter_fn is defined as:
|
||||||
|
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
||||||
|
|
||||||
|
When the optional 'filter_fn' parameter is set to NULL dma_request_channel
|
||||||
|
simply returns the first channel that satisfies the capability mask. Otherwise,
|
||||||
|
when the mask parameter is insufficient for specifying the necessary channel,
|
||||||
|
the filter_fn routine can be used to disposition the available channels in the
|
||||||
|
system. The filter_fn routine is called once for each free channel in the
|
||||||
|
system. Upon seeing a suitable channel filter_fn returns DMA_ACK which flags
|
||||||
|
that channel to be the return value from dma_request_channel. A channel
|
||||||
|
allocated via this interface is exclusive to the caller, until
|
||||||
|
dma_release_channel() is called.
|
||||||
|
|
||||||
|
2. Set slave and controller specific parameters
|
||||||
|
Next step is always to pass some specific information to the DMA driver. Most of
|
||||||
|
the generic information which a slave DMA can use is in struct dma_slave_config.
|
||||||
|
It allows the clients to specify DMA direction, DMA addresses, bus widths, DMA
|
||||||
|
burst lengths etc. If some DMA controllers have more parameters to be sent then
|
||||||
|
they should try to embed struct dma_slave_config in their controller specific
|
||||||
|
structure. That gives flexibility to client to pass more parameters, if
|
||||||
|
required.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
int dmaengine_slave_config(struct dma_chan *chan,
|
||||||
|
struct dma_slave_config *config)
|
||||||
|
|
||||||
|
3. Get a descriptor for transaction
|
||||||
|
For slave usage the various modes of slave transfers supported by the
|
||||||
|
DMA-engine are:
|
||||||
|
slave_sg - DMA a list of scatter gather buffers from/to a peripheral
|
||||||
|
dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the
|
||||||
|
operation is explicitly stopped.
|
||||||
|
The non NULL return of this transfer API represents a "descriptor" for the given
|
||||||
|
transaction.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_sg)(
|
||||||
|
struct dma_chan *chan,
|
||||||
|
struct scatterlist *dst_sg, unsigned int dst_nents,
|
||||||
|
struct scatterlist *src_sg, unsigned int src_nents,
|
||||||
|
unsigned long flags);
|
||||||
|
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)(
|
||||||
|
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
|
||||||
|
size_t period_len, enum dma_data_direction direction);
|
||||||
|
|
||||||
|
4. Submit the transaction and wait for callback notification
|
||||||
|
To schedule the transaction to be scheduled by dma device, the "descriptor"
|
||||||
|
returned in above (3) needs to be submitted.
|
||||||
|
To tell the dma driver that a transaction is ready to be serviced, the
|
||||||
|
descriptor->submit() callback needs to be invoked. This chains the descriptor to
|
||||||
|
the pending queue.
|
||||||
|
The transactions in the pending queue can be activated by calling the
|
||||||
|
issue_pending API. If channel is idle then the first transaction in queue is
|
||||||
|
started and subsequent ones queued up.
|
||||||
|
On completion of the DMA operation the next in queue is submitted and a tasklet
|
||||||
|
triggered. The tasklet would then call the client driver completion callback
|
||||||
|
routine for notification, if set.
|
||||||
|
Interface:
|
||||||
|
void dma_async_issue_pending(struct dma_chan *chan);
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
Additional usage notes for dma driver writers
|
||||||
|
1/ Although DMA engine specifies that completion callback routines cannot submit
|
||||||
|
any new operations, but typically for slave DMA subsequent transaction may not
|
||||||
|
be available for submit prior to callback routine being called. This requirement
|
||||||
|
is not a requirement for DMA-slave devices. But they should take care to drop
|
||||||
|
the spin-lock they might be holding before calling the callback routine
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
*.a
|
*.a
|
||||||
*.aux
|
*.aux
|
||||||
*.bin
|
*.bin
|
||||||
|
*.bz2
|
||||||
|
*.cis
|
||||||
*.cpio
|
*.cpio
|
||||||
*.csp
|
*.csp
|
||||||
*.dsp
|
*.dsp
|
||||||
|
@ -8,6 +10,8 @@
|
||||||
*.elf
|
*.elf
|
||||||
*.eps
|
*.eps
|
||||||
*.fw
|
*.fw
|
||||||
|
*.gcno
|
||||||
|
*.gcov
|
||||||
*.gen.S
|
*.gen.S
|
||||||
*.gif
|
*.gif
|
||||||
*.grep
|
*.grep
|
||||||
|
@ -19,14 +23,20 @@
|
||||||
*.ko
|
*.ko
|
||||||
*.log
|
*.log
|
||||||
*.lst
|
*.lst
|
||||||
|
*.lzma
|
||||||
|
*.lzo
|
||||||
|
*.mo
|
||||||
*.moc
|
*.moc
|
||||||
*.mod.c
|
*.mod.c
|
||||||
*.o
|
*.o
|
||||||
*.o.*
|
*.o.*
|
||||||
|
*.order
|
||||||
*.orig
|
*.orig
|
||||||
*.out
|
*.out
|
||||||
|
*.patch
|
||||||
*.pdf
|
*.pdf
|
||||||
*.png
|
*.png
|
||||||
|
*.pot
|
||||||
*.ps
|
*.ps
|
||||||
*.rej
|
*.rej
|
||||||
*.s
|
*.s
|
||||||
|
@ -39,16 +49,22 @@
|
||||||
*.tex
|
*.tex
|
||||||
*.ver
|
*.ver
|
||||||
*.xml
|
*.xml
|
||||||
|
*.xz
|
||||||
*_MODULES
|
*_MODULES
|
||||||
*_vga16.c
|
*_vga16.c
|
||||||
*~
|
*~
|
||||||
|
\#*#
|
||||||
*.9
|
*.9
|
||||||
*.9.gz
|
|
||||||
.*
|
.*
|
||||||
|
.*.d
|
||||||
.mm
|
.mm
|
||||||
53c700_d.h
|
53c700_d.h
|
||||||
CVS
|
CVS
|
||||||
ChangeSet
|
ChangeSet
|
||||||
|
GPATH
|
||||||
|
GRTAGS
|
||||||
|
GSYMS
|
||||||
|
GTAGS
|
||||||
Image
|
Image
|
||||||
Kerntypes
|
Kerntypes
|
||||||
Module.markers
|
Module.markers
|
||||||
|
@ -57,15 +73,14 @@ PENDING
|
||||||
SCCS
|
SCCS
|
||||||
System.map*
|
System.map*
|
||||||
TAGS
|
TAGS
|
||||||
|
aconf
|
||||||
|
af_names.h
|
||||||
aic7*reg.h*
|
aic7*reg.h*
|
||||||
aic7*reg_print.c*
|
aic7*reg_print.c*
|
||||||
aic7*seq.h*
|
aic7*seq.h*
|
||||||
aicasm
|
aicasm
|
||||||
aicdb.h*
|
aicdb.h*
|
||||||
altivec1.c
|
altivec*.c
|
||||||
altivec2.c
|
|
||||||
altivec4.c
|
|
||||||
altivec8.c
|
|
||||||
asm-offsets.h
|
asm-offsets.h
|
||||||
asm_offsets.h
|
asm_offsets.h
|
||||||
autoconf.h*
|
autoconf.h*
|
||||||
|
@ -80,6 +95,7 @@ btfixupprep
|
||||||
build
|
build
|
||||||
bvmlinux
|
bvmlinux
|
||||||
bzImage*
|
bzImage*
|
||||||
|
capability_names.h
|
||||||
capflags.c
|
capflags.c
|
||||||
classlist.h*
|
classlist.h*
|
||||||
comp*.log
|
comp*.log
|
||||||
|
@ -88,7 +104,8 @@ conf
|
||||||
config
|
config
|
||||||
config-*
|
config-*
|
||||||
config_data.h*
|
config_data.h*
|
||||||
config_data.gz*
|
config.mak
|
||||||
|
config.mak.autogen
|
||||||
conmakehash
|
conmakehash
|
||||||
consolemap_deftbl.c*
|
consolemap_deftbl.c*
|
||||||
cpustr.h
|
cpustr.h
|
||||||
|
@ -96,7 +113,9 @@ crc32table.h*
|
||||||
cscope.*
|
cscope.*
|
||||||
defkeymap.c
|
defkeymap.c
|
||||||
devlist.h*
|
devlist.h*
|
||||||
|
dnotify_test
|
||||||
docproc
|
docproc
|
||||||
|
dslm
|
||||||
elf2ecoff
|
elf2ecoff
|
||||||
elfconfig.h*
|
elfconfig.h*
|
||||||
evergreen_reg_safe.h
|
evergreen_reg_safe.h
|
||||||
|
@ -105,6 +124,7 @@ flask.h
|
||||||
fore200e_mkfirm
|
fore200e_mkfirm
|
||||||
fore200e_pca_fw.c*
|
fore200e_pca_fw.c*
|
||||||
gconf
|
gconf
|
||||||
|
gconf.glade.h
|
||||||
gen-devlist
|
gen-devlist
|
||||||
gen_crc32table
|
gen_crc32table
|
||||||
gen_init_cpio
|
gen_init_cpio
|
||||||
|
@ -112,11 +132,12 @@ generated
|
||||||
genheaders
|
genheaders
|
||||||
genksyms
|
genksyms
|
||||||
*_gray256.c
|
*_gray256.c
|
||||||
|
hpet_example
|
||||||
|
hugepage-mmap
|
||||||
|
hugepage-shm
|
||||||
ihex2fw
|
ihex2fw
|
||||||
ikconfig.h*
|
ikconfig.h*
|
||||||
inat-tables.c
|
inat-tables.c
|
||||||
initramfs_data.cpio
|
|
||||||
initramfs_data.cpio.gz
|
|
||||||
initramfs_list
|
initramfs_list
|
||||||
int16.c
|
int16.c
|
||||||
int1.c
|
int1.c
|
||||||
|
@ -133,15 +154,19 @@ kxgettext
|
||||||
lkc_defs.h
|
lkc_defs.h
|
||||||
lex.c
|
lex.c
|
||||||
lex.*.c
|
lex.*.c
|
||||||
|
linux
|
||||||
logo_*.c
|
logo_*.c
|
||||||
logo_*_clut224.c
|
logo_*_clut224.c
|
||||||
logo_*_mono.c
|
logo_*_mono.c
|
||||||
lxdialog
|
lxdialog
|
||||||
|
mach
|
||||||
mach-types
|
mach-types
|
||||||
mach-types.h
|
mach-types.h
|
||||||
machtypes.h
|
machtypes.h
|
||||||
map
|
map
|
||||||
|
map_hugetlb
|
||||||
maui_boot.h
|
maui_boot.h
|
||||||
|
media
|
||||||
mconf
|
mconf
|
||||||
miboot*
|
miboot*
|
||||||
mk_elfconfig
|
mk_elfconfig
|
||||||
|
@ -150,23 +175,29 @@ mkbugboot
|
||||||
mkcpustr
|
mkcpustr
|
||||||
mkdep
|
mkdep
|
||||||
mkprep
|
mkprep
|
||||||
|
mkregtable
|
||||||
mktables
|
mktables
|
||||||
mktree
|
mktree
|
||||||
modpost
|
modpost
|
||||||
modules.builtin
|
modules.builtin
|
||||||
modules.order
|
modules.order
|
||||||
modversions.h*
|
modversions.h*
|
||||||
|
nconf
|
||||||
ncscope.*
|
ncscope.*
|
||||||
offset.h
|
offset.h
|
||||||
offsets.h
|
offsets.h
|
||||||
oui.c*
|
oui.c*
|
||||||
|
page-types
|
||||||
parse.c
|
parse.c
|
||||||
parse.h
|
parse.h
|
||||||
patches*
|
patches*
|
||||||
pca200e.bin
|
pca200e.bin
|
||||||
pca200e_ecd.bin2
|
pca200e_ecd.bin2
|
||||||
piggy.gz
|
perf.data
|
||||||
|
perf.data.old
|
||||||
|
perf-archive
|
||||||
piggyback
|
piggyback
|
||||||
|
piggy.gzip
|
||||||
piggy.S
|
piggy.S
|
||||||
pnmtologo
|
pnmtologo
|
||||||
ppc_defs.h*
|
ppc_defs.h*
|
||||||
|
@ -177,10 +208,9 @@ r200_reg_safe.h
|
||||||
r300_reg_safe.h
|
r300_reg_safe.h
|
||||||
r420_reg_safe.h
|
r420_reg_safe.h
|
||||||
r600_reg_safe.h
|
r600_reg_safe.h
|
||||||
raid6altivec*.c
|
recordmcount
|
||||||
raid6int*.c
|
|
||||||
raid6tables.c
|
|
||||||
relocs
|
relocs
|
||||||
|
rlim_names.h
|
||||||
rn50_reg_safe.h
|
rn50_reg_safe.h
|
||||||
rs600_reg_safe.h
|
rs600_reg_safe.h
|
||||||
rv515_reg_safe.h
|
rv515_reg_safe.h
|
||||||
|
@ -194,6 +224,7 @@ split-include
|
||||||
syscalltab.h
|
syscalltab.h
|
||||||
tables.c
|
tables.c
|
||||||
tags
|
tags
|
||||||
|
test_get_len
|
||||||
tftpboot.img
|
tftpboot.img
|
||||||
timeconst.h
|
timeconst.h
|
||||||
times.h*
|
times.h*
|
||||||
|
@ -210,10 +241,13 @@ vdso32.so.dbg
|
||||||
vdso64.lds
|
vdso64.lds
|
||||||
vdso64.so.dbg
|
vdso64.so.dbg
|
||||||
version.h*
|
version.h*
|
||||||
|
vmImage
|
||||||
vmlinux
|
vmlinux
|
||||||
vmlinux-*
|
vmlinux-*
|
||||||
vmlinux.aout
|
vmlinux.aout
|
||||||
|
vmlinux.bin.all
|
||||||
vmlinux.lds
|
vmlinux.lds
|
||||||
|
vmlinuz
|
||||||
voffset.h
|
voffset.h
|
||||||
vsyscall.lds
|
vsyscall.lds
|
||||||
vsyscall_32.lds
|
vsyscall_32.lds
|
||||||
|
|
|
@ -3,24 +3,7 @@ Bus Types
|
||||||
|
|
||||||
Definition
|
Definition
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
See the kerneldoc for the struct bus_type.
|
||||||
struct bus_type {
|
|
||||||
char * name;
|
|
||||||
|
|
||||||
struct subsystem subsys;
|
|
||||||
struct kset drivers;
|
|
||||||
struct kset devices;
|
|
||||||
|
|
||||||
struct bus_attribute * bus_attrs;
|
|
||||||
struct device_attribute * dev_attrs;
|
|
||||||
struct driver_attribute * drv_attrs;
|
|
||||||
|
|
||||||
int (*match)(struct device * dev, struct device_driver * drv);
|
|
||||||
int (*hotplug) (struct device *dev, char **envp,
|
|
||||||
int num_envp, char *buffer, int buffer_size);
|
|
||||||
int (*suspend)(struct device * dev, pm_message_t state);
|
|
||||||
int (*resume)(struct device * dev);
|
|
||||||
};
|
|
||||||
|
|
||||||
int bus_register(struct bus_type * bus);
|
int bus_register(struct bus_type * bus);
|
||||||
|
|
||||||
|
|
|
@ -27,22 +27,7 @@ The device class structure looks like:
|
||||||
typedef int (*devclass_add)(struct device *);
|
typedef int (*devclass_add)(struct device *);
|
||||||
typedef void (*devclass_remove)(struct device *);
|
typedef void (*devclass_remove)(struct device *);
|
||||||
|
|
||||||
struct device_class {
|
See the kerneldoc for the struct class.
|
||||||
char * name;
|
|
||||||
rwlock_t lock;
|
|
||||||
u32 devnum;
|
|
||||||
struct list_head node;
|
|
||||||
|
|
||||||
struct list_head drivers;
|
|
||||||
struct list_head intf_list;
|
|
||||||
|
|
||||||
struct driver_dir_entry dir;
|
|
||||||
struct driver_dir_entry device_dir;
|
|
||||||
struct driver_dir_entry driver_dir;
|
|
||||||
|
|
||||||
devclass_add add_device;
|
|
||||||
devclass_remove remove_device;
|
|
||||||
};
|
|
||||||
|
|
||||||
A typical device class definition would look like:
|
A typical device class definition would look like:
|
||||||
|
|
||||||
|
|
|
@ -2,96 +2,7 @@
|
||||||
The Basic Device Structure
|
The Basic Device Structure
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
struct device {
|
See the kerneldoc for the struct device.
|
||||||
struct list_head g_list;
|
|
||||||
struct list_head node;
|
|
||||||
struct list_head bus_list;
|
|
||||||
struct list_head driver_list;
|
|
||||||
struct list_head intf_list;
|
|
||||||
struct list_head children;
|
|
||||||
struct device * parent;
|
|
||||||
|
|
||||||
char name[DEVICE_NAME_SIZE];
|
|
||||||
char bus_id[BUS_ID_SIZE];
|
|
||||||
|
|
||||||
spinlock_t lock;
|
|
||||||
atomic_t refcount;
|
|
||||||
|
|
||||||
struct bus_type * bus;
|
|
||||||
struct driver_dir_entry dir;
|
|
||||||
|
|
||||||
u32 class_num;
|
|
||||||
|
|
||||||
struct device_driver *driver;
|
|
||||||
void *driver_data;
|
|
||||||
void *platform_data;
|
|
||||||
|
|
||||||
u32 current_state;
|
|
||||||
unsigned char *saved_state;
|
|
||||||
|
|
||||||
void (*release)(struct device * dev);
|
|
||||||
};
|
|
||||||
|
|
||||||
Fields
|
|
||||||
~~~~~~
|
|
||||||
g_list: Node in the global device list.
|
|
||||||
|
|
||||||
node: Node in device's parent's children list.
|
|
||||||
|
|
||||||
bus_list: Node in device's bus's devices list.
|
|
||||||
|
|
||||||
driver_list: Node in device's driver's devices list.
|
|
||||||
|
|
||||||
intf_list: List of intf_data. There is one structure allocated for
|
|
||||||
each interface that the device supports.
|
|
||||||
|
|
||||||
children: List of child devices.
|
|
||||||
|
|
||||||
parent: *** FIXME ***
|
|
||||||
|
|
||||||
name: ASCII description of device.
|
|
||||||
Example: " 3Com Corporation 3c905 100BaseTX [Boomerang]"
|
|
||||||
|
|
||||||
bus_id: ASCII representation of device's bus position. This
|
|
||||||
field should be a name unique across all devices on the
|
|
||||||
bus type the device belongs to.
|
|
||||||
|
|
||||||
Example: PCI bus_ids are in the form of
|
|
||||||
<bus number>:<slot number>.<function number>
|
|
||||||
This name is unique across all PCI devices in the system.
|
|
||||||
|
|
||||||
lock: Spinlock for the device.
|
|
||||||
|
|
||||||
refcount: Reference count on the device.
|
|
||||||
|
|
||||||
bus: Pointer to struct bus_type that device belongs to.
|
|
||||||
|
|
||||||
dir: Device's sysfs directory.
|
|
||||||
|
|
||||||
class_num: Class-enumerated value of the device.
|
|
||||||
|
|
||||||
driver: Pointer to struct device_driver that controls the device.
|
|
||||||
|
|
||||||
driver_data: Driver-specific data.
|
|
||||||
|
|
||||||
platform_data: Platform data specific to the device.
|
|
||||||
|
|
||||||
Example: for devices on custom boards, as typical of embedded
|
|
||||||
and SOC based hardware, Linux often uses platform_data to point
|
|
||||||
to board-specific structures describing devices and how they
|
|
||||||
are wired. That can include what ports are available, chip
|
|
||||||
variants, which GPIO pins act in what additional roles, and so
|
|
||||||
on. This shrinks the "Board Support Packages" (BSPs) and
|
|
||||||
minimizes board-specific #ifdefs in drivers.
|
|
||||||
|
|
||||||
current_state: Current power state of the device.
|
|
||||||
|
|
||||||
saved_state: Pointer to saved state of the device. This is usable by
|
|
||||||
the device driver controlling the device.
|
|
||||||
|
|
||||||
release: Callback to free the device after all references have
|
|
||||||
gone away. This should be set by the allocator of the
|
|
||||||
device (i.e. the bus driver that discovered the device).
|
|
||||||
|
|
||||||
|
|
||||||
Programming Interface
|
Programming Interface
|
||||||
|
|
|
@ -1,23 +1,7 @@
|
||||||
|
|
||||||
Device Drivers
|
Device Drivers
|
||||||
|
|
||||||
struct device_driver {
|
See the kerneldoc for the struct device_driver.
|
||||||
char * name;
|
|
||||||
struct bus_type * bus;
|
|
||||||
|
|
||||||
struct completion unloaded;
|
|
||||||
struct kobject kobj;
|
|
||||||
list_t devices;
|
|
||||||
|
|
||||||
struct module *owner;
|
|
||||||
|
|
||||||
int (*probe) (struct device * dev);
|
|
||||||
int (*remove) (struct device * dev);
|
|
||||||
|
|
||||||
int (*suspend) (struct device * dev, pm_message_t state);
|
|
||||||
int (*resume) (struct device * dev);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Allocation
|
Allocation
|
||||||
|
|
|
@ -6,6 +6,42 @@ be removed from this file.
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: x86 floppy disable_hlt
|
||||||
|
When: 2012
|
||||||
|
Why: ancient workaround of dubious utility clutters the
|
||||||
|
code used by everybody else.
|
||||||
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
||||||
|
When: 2012
|
||||||
|
Why: This optional sub-feature of APM is of dubious reliability,
|
||||||
|
and ancient APM laptops are likely better served by calling HLT.
|
||||||
|
Deleting CONFIG_APM_CPU_IDLE allows x86 to stop exporting
|
||||||
|
the pm_idle function pointer to modules.
|
||||||
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: x86_32 "no-hlt" cmdline param
|
||||||
|
When: 2012
|
||||||
|
Why: remove a branch from idle path, simplify code used by everybody.
|
||||||
|
This option disabled the use of HLT in idle and machine_halt()
|
||||||
|
for hardware that was flakey 15-years ago. Today we have
|
||||||
|
"idle=poll" that removed HLT from idle, and so if such a machine
|
||||||
|
is still running the upstream kernel, "idle=poll" is likely sufficient.
|
||||||
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: x86 "idle=mwait" cmdline param
|
||||||
|
When: 2012
|
||||||
|
Why: simplify x86 idle code
|
||||||
|
Who: Len Brown <len.brown@intel.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
What: PRISM54
|
What: PRISM54
|
||||||
When: 2.6.34
|
When: 2.6.34
|
||||||
|
|
||||||
|
@ -35,17 +71,6 @@ Who: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: AR9170USB
|
|
||||||
When: 2.6.40
|
|
||||||
|
|
||||||
Why: This driver is deprecated and the firmware is no longer
|
|
||||||
maintained. The replacement driver "carl9170" has been
|
|
||||||
around for a while, so the devices are still supported.
|
|
||||||
|
|
||||||
Who: Christian Lamparter <chunkeey@googlemail.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: IRQF_SAMPLE_RANDOM
|
What: IRQF_SAMPLE_RANDOM
|
||||||
Check: IRQF_SAMPLE_RANDOM
|
Check: IRQF_SAMPLE_RANDOM
|
||||||
When: July 2009
|
When: July 2009
|
||||||
|
@ -226,7 +251,7 @@ Who: Zhang Rui <rui.zhang@intel.com>
|
||||||
What: CONFIG_ACPI_PROCFS_POWER
|
What: CONFIG_ACPI_PROCFS_POWER
|
||||||
When: 2.6.39
|
When: 2.6.39
|
||||||
Why: sysfs I/F for ACPI power devices, including AC and Battery,
|
Why: sysfs I/F for ACPI power devices, including AC and Battery,
|
||||||
has been working in upstream kenrel since 2.6.24, Sep 2007.
|
has been working in upstream kernel since 2.6.24, Sep 2007.
|
||||||
In 2.6.37, we make the sysfs I/F always built in and this option
|
In 2.6.37, we make the sysfs I/F always built in and this option
|
||||||
disabled by default.
|
disabled by default.
|
||||||
Remove this option and the ACPI power procfs interface in 2.6.39.
|
Remove this option and the ACPI power procfs interface in 2.6.39.
|
||||||
|
@ -273,16 +298,6 @@ Who: Michael Buesch <mb@bu3sch.de>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: /sys/o2cb symlink
|
|
||||||
When: January 2010
|
|
||||||
Why: /sys/fs/o2cb is the proper location for this information - /sys/o2cb
|
|
||||||
exists as a symlink for backwards compatibility for old versions of
|
|
||||||
ocfs2-tools. 2 years should be sufficient time to phase in new versions
|
|
||||||
which know to look in /sys/fs/o2cb.
|
|
||||||
Who: ocfs2-devel@oss.oracle.com
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: Ability for non root users to shm_get hugetlb pages based on mlock
|
What: Ability for non root users to shm_get hugetlb pages based on mlock
|
||||||
resource limits
|
resource limits
|
||||||
When: 2.6.31
|
When: 2.6.31
|
||||||
|
@ -405,16 +420,6 @@ Who: anybody or Florian Mickler <florian@mickler.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
What: capifs
|
|
||||||
When: February 2011
|
|
||||||
Files: drivers/isdn/capi/capifs.*
|
|
||||||
Why: udev fully replaces this special file system that only contains CAPI
|
|
||||||
NCCI TTY device nodes. User space (pppdcapiplugin) works without
|
|
||||||
noticing the difference.
|
|
||||||
Who: Jan Kiszka <jan.kiszka@web.de>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: KVM paravirt mmu host support
|
What: KVM paravirt mmu host support
|
||||||
When: January 2011
|
When: January 2011
|
||||||
Why: The paravirt mmu host support is slower than non-paravirt mmu, both
|
Why: The paravirt mmu host support is slower than non-paravirt mmu, both
|
||||||
|
@ -460,14 +465,6 @@ Who: Thomas Gleixner <tglx@linutronix.de>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
What: The acpi_sleep=s4_nonvs command line option
|
|
||||||
When: 2.6.37
|
|
||||||
Files: arch/x86/kernel/acpi/sleep.c
|
|
||||||
Why: superseded by acpi_sleep=nonvs
|
|
||||||
Who: Rafael J. Wysocki <rjw@sisk.pl>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: PCI DMA unmap state API
|
What: PCI DMA unmap state API
|
||||||
When: August 2012
|
When: August 2012
|
||||||
Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced
|
Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced
|
||||||
|
@ -484,23 +481,6 @@ Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
What: namespace cgroup (ns_cgroup)
|
|
||||||
When: 2.6.38
|
|
||||||
Why: The ns_cgroup leads to some problems:
|
|
||||||
* cgroup creation is out-of-control
|
|
||||||
* cgroup name can conflict when pids are looping
|
|
||||||
* it is not possible to have a single process handling
|
|
||||||
a lot of namespaces without falling in a exponential creation time
|
|
||||||
* we may want to create a namespace without creating a cgroup
|
|
||||||
|
|
||||||
The ns_cgroup is replaced by a compatibility flag 'clone_children',
|
|
||||||
where a newly created cgroup will copy the parent cgroup values.
|
|
||||||
The userspace has to manually create a cgroup and add a task to
|
|
||||||
the 'tasks' file.
|
|
||||||
Who: Daniel Lezcano <daniel.lezcano@free.fr>
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
What: iwlwifi disable_hw_scan module parameters
|
What: iwlwifi disable_hw_scan module parameters
|
||||||
When: 2.6.40
|
When: 2.6.40
|
||||||
Why: Hareware scan is the prefer method for iwlwifi devices for
|
Why: Hareware scan is the prefer method for iwlwifi devices for
|
||||||
|
@ -580,3 +560,26 @@ Why: These legacy callbacks should no longer be used as i2c-core offers
|
||||||
Who: Jean Delvare <khali@linux-fr.org>
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: Support for UVCIOC_CTRL_ADD in the uvcvideo driver
|
||||||
|
When: 2.6.42
|
||||||
|
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: 2.6.42
|
||||||
|
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: 2.6.42
|
||||||
|
Why: Superseded by the UVCIOC_CTRL_QUERY ioctl.
|
||||||
|
Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
|
@ -25,6 +25,8 @@ Other applications are described in the following papers:
|
||||||
http://xcpu.org/papers/cellfs-talk.pdf
|
http://xcpu.org/papers/cellfs-talk.pdf
|
||||||
* PROSE I/O: Using 9p to enable Application Partitions
|
* PROSE I/O: Using 9p to enable Application Partitions
|
||||||
http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf
|
http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf
|
||||||
|
* VirtFS: A Virtualization Aware File System pass-through
|
||||||
|
http://goo.gl/3WPDg
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
=====
|
=====
|
||||||
|
@ -130,31 +132,20 @@ OPTIONS
|
||||||
RESOURCES
|
RESOURCES
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Our current recommendation is to use Inferno (http://www.vitanuova.com/nferno/index.html)
|
Protocol specifications are maintained on github:
|
||||||
as the 9p server. You can start a 9p server under Inferno by issuing the
|
http://ericvh.github.com/9p-rfc/
|
||||||
following command:
|
|
||||||
; styxlisten -A tcp!*!564 export '#U*'
|
|
||||||
|
|
||||||
The -A specifies an unauthenticated export. The 564 is the port # (you may
|
9p client and server implementations are listed on
|
||||||
have to choose a higher port number if running as a normal user). The '#U*'
|
http://9p.cat-v.org/implementations
|
||||||
specifies exporting the root of the Linux name space. You may specify a
|
|
||||||
subset of the namespace by extending the path: '#U*'/tmp would just export
|
|
||||||
/tmp. For more information, see the Inferno manual pages covering styxlisten
|
|
||||||
and export.
|
|
||||||
|
|
||||||
A Linux version of the 9p server is now maintained under the npfs project
|
A 9p2000.L server is being developed by LLNL and can be found
|
||||||
on sourceforge (http://sourceforge.net/projects/npfs). The currently
|
at http://code.google.com/p/diod/
|
||||||
maintained version is the single-threaded version of the server (named spfs)
|
|
||||||
available from the same SVN repository.
|
|
||||||
|
|
||||||
There are user and developer mailing lists available through the v9fs project
|
There are user and developer mailing lists available through the v9fs project
|
||||||
on sourceforge (http://sourceforge.net/projects/v9fs).
|
on sourceforge (http://sourceforge.net/projects/v9fs).
|
||||||
|
|
||||||
A stand-alone version of the module (which should build for any 2.6 kernel)
|
News and other information is maintained on a Wiki.
|
||||||
is available via (http://github.com/ericvh/9p-sac/tree/master)
|
(http://sf.net/apps/mediawiki/v9fs/index.php).
|
||||||
|
|
||||||
News and other information is maintained on SWiK (http://swik.net/v9fs)
|
|
||||||
and the Wiki (http://sf.net/apps/mediawiki/v9fs/index.php).
|
|
||||||
|
|
||||||
Bug reports may be issued through the kernel.org bugzilla
|
Bug reports may be issued through the kernel.org bugzilla
|
||||||
(http://bugzilla.kernel.org)
|
(http://bugzilla.kernel.org)
|
||||||
|
|
|
@ -104,7 +104,7 @@ of the locking scheme for directory operations.
|
||||||
prototypes:
|
prototypes:
|
||||||
struct inode *(*alloc_inode)(struct super_block *sb);
|
struct inode *(*alloc_inode)(struct super_block *sb);
|
||||||
void (*destroy_inode)(struct inode *);
|
void (*destroy_inode)(struct inode *);
|
||||||
void (*dirty_inode) (struct inode *);
|
void (*dirty_inode) (struct inode *, int flags);
|
||||||
int (*write_inode) (struct inode *, struct writeback_control *wbc);
|
int (*write_inode) (struct inode *, struct writeback_control *wbc);
|
||||||
int (*drop_inode) (struct inode *);
|
int (*drop_inode) (struct inode *);
|
||||||
void (*evict_inode) (struct inode *);
|
void (*evict_inode) (struct inode *);
|
||||||
|
@ -126,7 +126,7 @@ locking rules:
|
||||||
s_umount
|
s_umount
|
||||||
alloc_inode:
|
alloc_inode:
|
||||||
destroy_inode:
|
destroy_inode:
|
||||||
dirty_inode: (must not sleep)
|
dirty_inode:
|
||||||
write_inode:
|
write_inode:
|
||||||
drop_inode: !!!inode->i_lock!!!
|
drop_inode: !!!inode->i_lock!!!
|
||||||
evict_inode:
|
evict_inode:
|
||||||
|
|
|
@ -464,9 +464,8 @@ static int __init configfs_example_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_unregister:
|
out_unregister:
|
||||||
for (; i >= 0; i--) {
|
for (i--; i >= 0; i--)
|
||||||
configfs_unregister_subsystem(example_subsys[i]);
|
configfs_unregister_subsystem(example_subsys[i]);
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -475,9 +474,8 @@ static void __exit configfs_example_exit(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; example_subsys[i]; i++) {
|
for (i = 0; example_subsys[i]; i++)
|
||||||
configfs_unregister_subsystem(example_subsys[i]);
|
configfs_unregister_subsystem(example_subsys[i]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(configfs_example_init);
|
module_init(configfs_example_init);
|
||||||
|
|
|
@ -427,9 +427,8 @@ static int __init configfs_example_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_unregister:
|
out_unregister:
|
||||||
for (; i >= 0; i--) {
|
for (i--; i >= 0; i--)
|
||||||
configfs_unregister_subsystem(example_subsys[i]);
|
configfs_unregister_subsystem(example_subsys[i]);
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -438,9 +437,8 @@ static void __exit configfs_example_exit(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; example_subsys[i]; i++) {
|
for (i = 0; example_subsys[i]; i++)
|
||||||
configfs_unregister_subsystem(example_subsys[i]);
|
configfs_unregister_subsystem(example_subsys[i]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(configfs_example_init);
|
module_init(configfs_example_init);
|
||||||
|
|
|
@ -226,10 +226,6 @@ acl Enables POSIX Access Control Lists support.
|
||||||
noacl This option disables POSIX Access Control List
|
noacl This option disables POSIX Access Control List
|
||||||
support.
|
support.
|
||||||
|
|
||||||
reservation
|
|
||||||
|
|
||||||
noreservation
|
|
||||||
|
|
||||||
bsddf (*) Make 'df' act like BSD.
|
bsddf (*) Make 'df' act like BSD.
|
||||||
minixdf Make 'df' act like Minix.
|
minixdf Make 'df' act like Minix.
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,8 @@ request-key will find the first matching line and corresponding program. In
|
||||||
this case, /some/other/program will handle all uid lookups and
|
this case, /some/other/program will handle all uid lookups and
|
||||||
/usr/sbin/nfs.idmap will handle gid, user, and group lookups.
|
/usr/sbin/nfs.idmap will handle gid, user, and group lookups.
|
||||||
|
|
||||||
See <file:Documentation/keys-request-keys.txt> for more information about the
|
See <file:Documentation/security/keys-request-keys.txt> for more information
|
||||||
request-key function.
|
about the request-key function.
|
||||||
|
|
||||||
|
|
||||||
=========
|
=========
|
||||||
|
|
|
@ -46,9 +46,15 @@ errors=panic Panic and halt the machine if an error occurs.
|
||||||
intr (*) Allow signals to interrupt cluster operations.
|
intr (*) Allow signals to interrupt cluster operations.
|
||||||
nointr Do not allow signals to interrupt cluster
|
nointr Do not allow signals to interrupt cluster
|
||||||
operations.
|
operations.
|
||||||
|
noatime Do not update access time.
|
||||||
|
relatime(*) Update atime if the previous atime is older than
|
||||||
|
mtime or ctime
|
||||||
|
strictatime Always update atime, but the minimum update interval
|
||||||
|
is specified by atime_quantum.
|
||||||
atime_quantum=60(*) OCFS2 will not update atime unless this number
|
atime_quantum=60(*) OCFS2 will not update atime unless this number
|
||||||
of seconds has passed since the last update.
|
of seconds has passed since the last update.
|
||||||
Set to zero to always update atime.
|
Set to zero to always update atime. This option need
|
||||||
|
work with strictatime.
|
||||||
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
|
||||||
journal.
|
journal.
|
||||||
|
|
|
@ -574,6 +574,12 @@ The contents of each smp_affinity file is the same by default:
|
||||||
> cat /proc/irq/0/smp_affinity
|
> cat /proc/irq/0/smp_affinity
|
||||||
ffffffff
|
ffffffff
|
||||||
|
|
||||||
|
There is an alternate interface, smp_affinity_list which allows specifying
|
||||||
|
a cpu range instead of a bitmask:
|
||||||
|
|
||||||
|
> cat /proc/irq/0/smp_affinity_list
|
||||||
|
1024-1031
|
||||||
|
|
||||||
The default_smp_affinity mask applies to all non-active IRQs, which are the
|
The default_smp_affinity mask applies to all non-active IRQs, which are the
|
||||||
IRQs which have not yet been allocated/activated, and hence which lack a
|
IRQs which have not yet been allocated/activated, and hence which lack a
|
||||||
/proc/irq/[0-9]* directory.
|
/proc/irq/[0-9]* directory.
|
||||||
|
@ -583,12 +589,13 @@ reports itself as being attached. This hardware locality information does not
|
||||||
include information about any possible driver locality preference.
|
include information about any possible driver locality preference.
|
||||||
|
|
||||||
prof_cpu_mask specifies which CPUs are to be profiled by the system wide
|
prof_cpu_mask specifies which CPUs are to be profiled by the system wide
|
||||||
profiler. Default value is ffffffff (all cpus).
|
profiler. Default value is ffffffff (all cpus if there are only 32 of them).
|
||||||
|
|
||||||
The way IRQs are routed is handled by the IO-APIC, and it's Round Robin
|
The way IRQs are routed is handled by the IO-APIC, and it's Round Robin
|
||||||
between all the CPUs which are allowed to handle it. As usual the kernel has
|
between all the CPUs which are allowed to handle it. As usual the kernel has
|
||||||
more info than you and does a better job than you, so the defaults are the
|
more info than you and does a better job than you, so the defaults are the
|
||||||
best choice for almost everyone.
|
best choice for almost everyone. [Note this applies only to those IO-APIC's
|
||||||
|
that support "Round Robin" interrupt distribution.]
|
||||||
|
|
||||||
There are three more important subdirectories in /proc: net, scsi, and sys.
|
There are three more important subdirectories in /proc: net, scsi, and sys.
|
||||||
The general rule is that the contents, or even the existence of these
|
The general rule is that the contents, or even the existence of these
|
||||||
|
|
|
@ -115,28 +115,8 @@ ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs
|
||||||
Module Parameters for Debugging
|
Module Parameters for Debugging
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
When UBIFS has been compiled with debugging enabled, there are 3 module
|
When UBIFS has been compiled with debugging enabled, there are 2 module
|
||||||
parameters that are available to control aspects of testing and debugging.
|
parameters that are available to control aspects of testing and debugging.
|
||||||
The parameters are unsigned integers where each bit controls an option.
|
|
||||||
The parameters are:
|
|
||||||
|
|
||||||
debug_msgs Selects which debug messages to display, as follows:
|
|
||||||
|
|
||||||
Message Type Flag value
|
|
||||||
|
|
||||||
General messages 1
|
|
||||||
Journal messages 2
|
|
||||||
Mount messages 4
|
|
||||||
Commit messages 8
|
|
||||||
LEB search messages 16
|
|
||||||
Budgeting messages 32
|
|
||||||
Garbage collection messages 64
|
|
||||||
Tree Node Cache (TNC) messages 128
|
|
||||||
LEB properties (lprops) messages 256
|
|
||||||
Input/output messages 512
|
|
||||||
Log messages 1024
|
|
||||||
Scan messages 2048
|
|
||||||
Recovery messages 4096
|
|
||||||
|
|
||||||
debug_chks Selects extra checks that UBIFS can do while running:
|
debug_chks Selects extra checks that UBIFS can do while running:
|
||||||
|
|
||||||
|
@ -154,11 +134,9 @@ debug_tsts Selects a mode of testing, as follows:
|
||||||
|
|
||||||
Test mode Flag value
|
Test mode Flag value
|
||||||
|
|
||||||
Force in-the-gaps method 2
|
|
||||||
Failure mode for recovery testing 4
|
Failure mode for recovery testing 4
|
||||||
|
|
||||||
For example, set debug_msgs to 5 to display General messages and Mount
|
For example, set debug_chks to 3 to enable general and TNC checks.
|
||||||
messages.
|
|
||||||
|
|
||||||
|
|
||||||
References
|
References
|
||||||
|
|
|
@ -211,7 +211,7 @@ struct super_operations {
|
||||||
struct inode *(*alloc_inode)(struct super_block *sb);
|
struct inode *(*alloc_inode)(struct super_block *sb);
|
||||||
void (*destroy_inode)(struct inode *);
|
void (*destroy_inode)(struct inode *);
|
||||||
|
|
||||||
void (*dirty_inode) (struct inode *);
|
void (*dirty_inode) (struct inode *, int flags);
|
||||||
int (*write_inode) (struct inode *, int);
|
int (*write_inode) (struct inode *, int);
|
||||||
void (*drop_inode) (struct inode *);
|
void (*drop_inode) (struct inode *);
|
||||||
void (*delete_inode) (struct inode *);
|
void (*delete_inode) (struct inode *);
|
||||||
|
|
|
@ -39,6 +39,12 @@ When mounting an XFS filesystem, the following options are accepted.
|
||||||
drive level write caching to be enabled, for devices that
|
drive level write caching to be enabled, for devices that
|
||||||
support write barriers.
|
support write barriers.
|
||||||
|
|
||||||
|
discard
|
||||||
|
Issue command to let the block device reclaim space freed by the
|
||||||
|
filesystem. This is useful for SSD devices, thinly provisioned
|
||||||
|
LUNs and virtual machine images, but may have a performance
|
||||||
|
impact. This option is incompatible with the nodelaylog option.
|
||||||
|
|
||||||
dmapi
|
dmapi
|
||||||
Enable the DMAPI (Data Management API) event callouts.
|
Enable the DMAPI (Data Management API) event callouts.
|
||||||
Use with the "mtpt" option.
|
Use with the "mtpt" option.
|
||||||
|
|
|
@ -66,10 +66,10 @@ trick is to ensure that any needed memory allocations are done before
|
||||||
entering atomic context, using:
|
entering atomic context, using:
|
||||||
|
|
||||||
int flex_array_prealloc(struct flex_array *array, unsigned int start,
|
int flex_array_prealloc(struct flex_array *array, unsigned int start,
|
||||||
unsigned int end, gfp_t flags);
|
unsigned int nr_elements, gfp_t flags);
|
||||||
|
|
||||||
This function will ensure that memory for the elements indexed in the range
|
This function will ensure that memory for the elements indexed in the range
|
||||||
defined by start and end has been allocated. Thereafter, a
|
defined by start and nr_elements has been allocated. Thereafter, a
|
||||||
flex_array_put() call on an element in that range is guaranteed not to
|
flex_array_put() call on an element in that range is guaranteed not to
|
||||||
block.
|
block.
|
||||||
|
|
||||||
|
|
119
Documentation/hid/hidraw.txt
Normal file
119
Documentation/hid/hidraw.txt
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices
|
||||||
|
==================================================================
|
||||||
|
|
||||||
|
The hidraw driver provides a raw interface to USB and Bluetooth Human
|
||||||
|
Interface Devices (HIDs). It differs from hiddev in that reports sent and
|
||||||
|
received are not parsed by the HID parser, but are sent to and received from
|
||||||
|
the device unmodified.
|
||||||
|
|
||||||
|
Hidraw should be used if the userspace application knows exactly how to
|
||||||
|
communicate with the hardware device, and is able to construct the HID
|
||||||
|
reports manually. This is often the case when making userspace drivers for
|
||||||
|
custom HID devices.
|
||||||
|
|
||||||
|
Hidraw is also useful for communicating with non-conformant HID devices
|
||||||
|
which send and receive data in a way that is inconsistent with their report
|
||||||
|
descriptors. Because hiddev parses reports which are sent and received
|
||||||
|
through it, checking them against the device's report descriptor, such
|
||||||
|
communication with these non-conformant devices is impossible using hiddev.
|
||||||
|
Hidraw is the only alternative, short of writing a custom kernel driver, for
|
||||||
|
these non-conformant devices.
|
||||||
|
|
||||||
|
A benefit of hidraw is that its use by userspace applications is independent
|
||||||
|
of the underlying hardware type. Currently, Hidraw is implemented for USB
|
||||||
|
and Bluetooth. In the future, as new hardware bus types are developed which
|
||||||
|
use the HID specification, hidraw will be expanded to add support for these
|
||||||
|
new bus types.
|
||||||
|
|
||||||
|
Hidraw uses a dynamic major number, meaning that udev should be relied on to
|
||||||
|
create hidraw device nodes. Udev will typically create the device nodes
|
||||||
|
directly under /dev (eg: /dev/hidraw0). As this location is distribution-
|
||||||
|
and udev rule-dependent, applications should use libudev to locate hidraw
|
||||||
|
devices attached to the system. There is a tutorial on libudev with a
|
||||||
|
working example at:
|
||||||
|
http://www.signal11.us/oss/udev/
|
||||||
|
|
||||||
|
The HIDRAW API
|
||||||
|
---------------
|
||||||
|
|
||||||
|
read()
|
||||||
|
-------
|
||||||
|
read() will read a queued report received from the HID device. On USB
|
||||||
|
devices, the reports read using read() are the reports sent from the device
|
||||||
|
on the INTERRUPT IN endpoint. By default, read() will block until there is
|
||||||
|
a report available to be read. read() can be made non-blocking, by passing
|
||||||
|
the O_NONBLOCK flag to open(), or by setting the O_NONBLOCK flag using
|
||||||
|
fcntl().
|
||||||
|
|
||||||
|
On a device which uses numbered reports, the first byte of the returned data
|
||||||
|
will be the report number; the report data follows, beginning in the second
|
||||||
|
byte. For devices which do not use numbered reports, the report data
|
||||||
|
will begin at the first byte.
|
||||||
|
|
||||||
|
write()
|
||||||
|
--------
|
||||||
|
The write() function will write a report to the device. For USB devices, if
|
||||||
|
the device has an INTERRUPT OUT endpoint, the report will be sent on that
|
||||||
|
endpoint. If it does not, the report will be sent over the control endpoint,
|
||||||
|
using a SET_REPORT transfer.
|
||||||
|
|
||||||
|
The first byte of the buffer passed to write() should be set to the report
|
||||||
|
number. If the device does not use numbered reports, the first byte should
|
||||||
|
be set to 0. The report data itself should begin at the second byte.
|
||||||
|
|
||||||
|
ioctl()
|
||||||
|
--------
|
||||||
|
Hidraw supports the following ioctls:
|
||||||
|
|
||||||
|
HIDIOCGRDESCSIZE: Get Report Descriptor Size
|
||||||
|
This ioctl will get the size of the device's report descriptor.
|
||||||
|
|
||||||
|
HIDIOCGRDESC: Get Report Descriptor
|
||||||
|
This ioctl returns the device's report descriptor using a
|
||||||
|
hidraw_report_descriptor struct. Make sure to set the size field of the
|
||||||
|
hidraw_report_descriptor struct to the size returned from HIDIOCGRDESCSIZE.
|
||||||
|
|
||||||
|
HIDIOCGRAWINFO: Get Raw Info
|
||||||
|
This ioctl will return a hidraw_devinfo struct containing the bus type, the
|
||||||
|
vendor ID (VID), and product ID (PID) of the device. The bus type can be one
|
||||||
|
of:
|
||||||
|
BUS_USB
|
||||||
|
BUS_HIL
|
||||||
|
BUS_BLUETOOTH
|
||||||
|
BUS_VIRTUAL
|
||||||
|
which are defined in linux/input.h.
|
||||||
|
|
||||||
|
HIDIOCGRAWNAME(len): Get Raw Name
|
||||||
|
This ioctl returns a string containing the vendor and product strings of
|
||||||
|
the device. The returned string is Unicode, UTF-8 encoded.
|
||||||
|
|
||||||
|
HIDIOCGRAWPHYS(len): Get Physical Address
|
||||||
|
This ioctl returns a string representing the physical address of the device.
|
||||||
|
For USB devices, the string contains the physical path to the device (the
|
||||||
|
USB controller, hubs, ports, etc). For Bluetooth devices, the string
|
||||||
|
contains the hardware (MAC) address of the device.
|
||||||
|
|
||||||
|
HIDIOCSFEATURE(len): Send a Feature Report
|
||||||
|
This ioctl will send a feature report to the device. Per the HID
|
||||||
|
specification, feature reports are always sent using the control endpoint.
|
||||||
|
Set the first byte of the supplied buffer to the report number. For devices
|
||||||
|
which do not use numbered reports, set the first byte to 0. The report data
|
||||||
|
begins in the second byte. Make sure to set len accordingly, to one more
|
||||||
|
than the length of the report (to account for the report number).
|
||||||
|
|
||||||
|
HIDIOCGFEATURE(len): Get a Feature Report
|
||||||
|
This ioctl will request a feature report from the device using the control
|
||||||
|
endpoint. The first byte of the supplied buffer should be set to the report
|
||||||
|
number of the requested report. For devices which do not use numbered
|
||||||
|
reports, set the first byte to 0. The report will be returned starting at
|
||||||
|
the first byte of the buffer (ie: the report number is not returned).
|
||||||
|
|
||||||
|
Example
|
||||||
|
---------
|
||||||
|
In samples/, find hid-example.c, which shows examples of read(), write(),
|
||||||
|
and all the ioctls for hidraw. The code may be used by anyone for any
|
||||||
|
purpose, and can serve as a starting point for developing applications using
|
||||||
|
hidraw.
|
||||||
|
|
||||||
|
Document by:
|
||||||
|
Alan Ott <alan@signal11.us>, Signal 11 Software
|
|
@ -14,10 +14,6 @@ Supported chips:
|
||||||
Prefix: 'gl523sm'
|
Prefix: 'gl523sm'
|
||||||
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
|
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
|
||||||
Datasheet:
|
Datasheet:
|
||||||
* Intel Xeon Processor
|
|
||||||
Prefix: - any other - may require 'force_adm1021' parameter
|
|
||||||
Addresses scanned: none
|
|
||||||
Datasheet: Publicly available at Intel website
|
|
||||||
* Maxim MAX1617
|
* Maxim MAX1617
|
||||||
Prefix: 'max1617'
|
Prefix: 'max1617'
|
||||||
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
|
Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
|
||||||
|
@ -91,21 +87,27 @@ will do no harm, but will return 'old' values. It is possible to make
|
||||||
ADM1021-clones do faster measurements, but there is really no good reason
|
ADM1021-clones do faster measurements, but there is really no good reason
|
||||||
for that.
|
for that.
|
||||||
|
|
||||||
Xeon support
|
|
||||||
------------
|
|
||||||
|
|
||||||
Some Xeon processors have real max1617, adm1021, or compatible chips
|
Netburst-based Xeon support
|
||||||
within them, with two temperature sensors.
|
---------------------------
|
||||||
|
|
||||||
Other Xeons have chips with only one sensor.
|
Some Xeon processors based on the Netburst (early Pentium 4, from 2001 to
|
||||||
|
2003) microarchitecture had real MAX1617, ADM1021, or compatible chips
|
||||||
|
within them, with two temperature sensors. Other Xeon processors of this
|
||||||
|
era (with 400 MHz FSB) had chips with only one temperature sensor.
|
||||||
|
|
||||||
If you have a Xeon, and the adm1021 module loads, and both temperatures
|
If you have such an old Xeon, and you get two valid temperatures when
|
||||||
appear valid, then things are good.
|
loading the adm1021 module, then things are good.
|
||||||
|
|
||||||
If the adm1021 module doesn't load, you should try this:
|
If nothing happens when loading the adm1021 module, and you are certain
|
||||||
modprobe adm1021 force_adm1021=BUS,ADDRESS
|
that your specific Xeon processor model includes compatible sensors, you
|
||||||
ADDRESS can only be 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e.
|
will have to explicitly instantiate the sensor chips from user-space. See
|
||||||
|
method 4 in Documentation/i2c/instantiating-devices. Possible slave
|
||||||
|
addresses are 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e. It is likely that
|
||||||
|
only temp2 will be correct and temp1 will have to be ignored.
|
||||||
|
|
||||||
If you have dual Xeons you may have appear to have two separate
|
Previous generations of the Xeon processor (based on Pentium II/III)
|
||||||
adm1021-compatible chips, or two single-temperature sensors, at distinct
|
didn't have these sensors. Next generations of Xeon processors (533 MHz
|
||||||
addresses.
|
FSB and faster) lost them, until the Core-based generation which
|
||||||
|
introduced integrated digital thermal sensors. These are supported by
|
||||||
|
the coretemp driver.
|
||||||
|
|
60
Documentation/hwmon/adm1275
Normal file
60
Documentation/hwmon/adm1275
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
Kernel driver adm1275
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Analog Devices ADM1275
|
||||||
|
Prefix: 'adm1275'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet: www.analog.com/static/imported-files/data_sheets/ADM1275.pdf
|
||||||
|
|
||||||
|
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver supports hardware montoring for Analog Devices ADM1275 Hot-Swap
|
||||||
|
Controller and Digital Power Monitor.
|
||||||
|
|
||||||
|
The ADM1275 is a hot-swap controller that allows a circuit board to be removed
|
||||||
|
from or inserted into a live backplane. It also features current and voltage
|
||||||
|
readback via an integrated 12-bit analog-to-digital converter (ADC), accessed
|
||||||
|
using a PMBus. interface.
|
||||||
|
|
||||||
|
The driver is a client driver to the core PMBus driver. Please see
|
||||||
|
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||||
|
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not auto-detect devices. You will have to instantiate the
|
||||||
|
devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Platform data support
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The driver supports standard PMBus driver platform data. Please see
|
||||||
|
Documentation/hwmon/pmbus for details.
|
||||||
|
|
||||||
|
|
||||||
|
Sysfs entries
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following attributes are supported. Limits are read-write; all other
|
||||||
|
attributes are read-only.
|
||||||
|
|
||||||
|
in1_label "vin1" or "vout1" depending on chip variant and
|
||||||
|
configuration.
|
||||||
|
in1_input Measured voltage. From READ_VOUT register.
|
||||||
|
in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
|
||||||
|
in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
|
||||||
|
in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
|
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
|
|
||||||
|
curr1_label "iout1"
|
||||||
|
curr1_input Measured current. From READ_IOUT register.
|
||||||
|
curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
||||||
|
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
|
|
@ -15,8 +15,13 @@ Author: Rudolf Marek
|
||||||
|
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
|
This driver permits reading the DTS (Digital Temperature Sensor) embedded
|
||||||
|
inside Intel CPUs. This driver can read both the per-core and per-package
|
||||||
|
temperature using the appropriate sensors. The per-package sensor is new;
|
||||||
|
as of now, it is present only in the SandyBridge platform. The driver will
|
||||||
|
show the temperature of all cores inside a package under a single device
|
||||||
|
directory inside hwmon.
|
||||||
|
|
||||||
This driver permits reading temperature sensor embedded inside Intel Core CPU.
|
|
||||||
Temperature is measured in degrees Celsius and measurement resolution is
|
Temperature is measured in degrees Celsius and measurement resolution is
|
||||||
1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
|
1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
|
||||||
the actual value of temperature register is in fact a delta from TjMax.
|
the actual value of temperature register is in fact a delta from TjMax.
|
||||||
|
@ -27,13 +32,15 @@ mechanism will perform actions to forcibly cool down the processor. Alarm
|
||||||
may be raised, if the temperature grows enough (more than TjMax) to trigger
|
may be raised, if the temperature grows enough (more than TjMax) to trigger
|
||||||
the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
|
the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
|
||||||
|
|
||||||
temp1_input - Core temperature (in millidegrees Celsius).
|
All Sysfs entries are named with their core_id (represented here by 'X').
|
||||||
temp1_max - All cooling devices should be turned on (on Core2).
|
tempX_input - Core temperature (in millidegrees Celsius).
|
||||||
temp1_crit - Maximum junction temperature (in millidegrees Celsius).
|
tempX_max - All cooling devices should be turned on (on Core2).
|
||||||
temp1_crit_alarm - Set when Out-of-spec bit is set, never clears.
|
tempX_crit - Maximum junction temperature (in millidegrees Celsius).
|
||||||
|
tempX_crit_alarm - Set when Out-of-spec bit is set, never clears.
|
||||||
Correct CPU operation is no longer guaranteed.
|
Correct CPU operation is no longer guaranteed.
|
||||||
temp1_label - Contains string "Core X", where X is processor
|
tempX_label - Contains string "Core X", where X is processor
|
||||||
number.
|
number. For Package temp, this will be "Physical id Y",
|
||||||
|
where Y is the package number.
|
||||||
|
|
||||||
The TjMax temperature is set to 85 degrees C if undocumented model specific
|
The TjMax temperature is set to 85 degrees C if undocumented model specific
|
||||||
register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
|
register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
|
||||||
|
|
42
Documentation/hwmon/emc6w201
Normal file
42
Documentation/hwmon/emc6w201
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
Kernel driver emc6w201
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* SMSC EMC6W201
|
||||||
|
Prefix: 'emc6w201'
|
||||||
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
|
||||||
|
Datasheet: Not public
|
||||||
|
|
||||||
|
Author: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
From the datasheet:
|
||||||
|
|
||||||
|
"The EMC6W201 is an environmental monitoring device with automatic fan
|
||||||
|
control capability and enhanced system acoustics for noise suppression.
|
||||||
|
This ACPI compliant device provides hardware monitoring for up to six
|
||||||
|
voltages (including its own VCC) and five external thermal sensors,
|
||||||
|
measures the speed of up to five fans, and controls the speed of
|
||||||
|
multiple DC fans using three Pulse Width Modulator (PWM) outputs. Note
|
||||||
|
that it is possible to control more than three fans by connecting two
|
||||||
|
fans to one PWM output. The EMC6W201 will be available in a 36-pin
|
||||||
|
QFN package."
|
||||||
|
|
||||||
|
The device is functionally close to the EMC6D100 series, but is
|
||||||
|
register-incompatible.
|
||||||
|
|
||||||
|
The driver currently only supports the monitoring of the voltages,
|
||||||
|
temperatures and fan speeds. Limits can be changed. Alarms are not
|
||||||
|
supported, and neither is fan speed control.
|
||||||
|
|
||||||
|
|
||||||
|
Known Systems With EMC6W201
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The EMC6W201 is a rare device, only found on a few systems, made in
|
||||||
|
2005 and 2006. Known systems with this device:
|
||||||
|
* Dell Precision 670 workstation
|
||||||
|
* Gigabyte 2CEWH mainboard
|
|
@ -6,6 +6,10 @@ Supported chips:
|
||||||
Prefix: 'f71808e'
|
Prefix: 'f71808e'
|
||||||
Addresses scanned: none, address read from Super I/O config space
|
Addresses scanned: none, address read from Super I/O config space
|
||||||
Datasheet: Not public
|
Datasheet: Not public
|
||||||
|
* Fintek F71808A
|
||||||
|
Prefix: 'f71808a'
|
||||||
|
Addresses scanned: none, address read from Super I/O config space
|
||||||
|
Datasheet: Not public
|
||||||
* Fintek F71858FG
|
* Fintek F71858FG
|
||||||
Prefix: 'f71858fg'
|
Prefix: 'f71858fg'
|
||||||
Addresses scanned: none, address read from Super I/O config space
|
Addresses scanned: none, address read from Super I/O config space
|
||||||
|
|
37
Documentation/hwmon/fam15h_power
Normal file
37
Documentation/hwmon/fam15h_power
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
Kernel driver fam15h_power
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* AMD Family 15h Processors
|
||||||
|
|
||||||
|
Prefix: 'fam15h_power'
|
||||||
|
Addresses scanned: PCI space
|
||||||
|
Datasheets:
|
||||||
|
BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors
|
||||||
|
(not yet published)
|
||||||
|
|
||||||
|
Author: Andreas Herrmann <andreas.herrmann3@amd.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver permits reading of registers providing power information
|
||||||
|
of AMD Family 15h processors.
|
||||||
|
|
||||||
|
For AMD Family 15h processors the following power values can be
|
||||||
|
calculated using different processor northbridge function registers:
|
||||||
|
|
||||||
|
* BasePwrWatts: Specifies in watts the maximum amount of power
|
||||||
|
consumed by the processor for NB and logic external to the core.
|
||||||
|
* ProcessorPwrWatts: Specifies in watts the maximum amount of power
|
||||||
|
the processor can support.
|
||||||
|
* CurrPwrWatts: Specifies in watts the current amount of power being
|
||||||
|
consumed by the processor.
|
||||||
|
|
||||||
|
This driver provides ProcessorPwrWatts and CurrPwrWatts:
|
||||||
|
* power1_crit (ProcessorPwrWatts)
|
||||||
|
* power1_input (CurrPwrWatts)
|
||||||
|
|
||||||
|
On multi-node processors the calculated value is for the entire
|
||||||
|
package and not for a single node. Thus the driver creates sysfs
|
||||||
|
attributes only for internal node0 of a multi-node processor.
|
|
@ -11,6 +11,7 @@ Supported chips:
|
||||||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||||
* AMD Family 12h processors: "Llano"
|
* AMD Family 12h processors: "Llano"
|
||||||
* AMD Family 14h processors: "Brazos" (C/E/G-Series)
|
* AMD Family 14h processors: "Brazos" (C/E/G-Series)
|
||||||
|
* AMD Family 15h processors: "Bulldozer"
|
||||||
|
|
||||||
Prefix: 'k10temp'
|
Prefix: 'k10temp'
|
||||||
Addresses scanned: PCI space
|
Addresses scanned: PCI space
|
||||||
|
@ -40,7 +41,7 @@ Description
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This driver permits reading of the internal temperature sensor of AMD
|
This driver permits reading of the internal temperature sensor of AMD
|
||||||
Family 10h/11h/12h/14h processors.
|
Family 10h/11h/12h/14h/15h processors.
|
||||||
|
|
||||||
All these processors have a sensor, but on those for Socket F or AM2+,
|
All these processors have a sensor, but on those for Socket F or AM2+,
|
||||||
the sensor may return inconsistent values (erratum 319). The driver
|
the sensor may return inconsistent values (erratum 319). The driver
|
||||||
|
|
|
@ -32,6 +32,16 @@ Supported chips:
|
||||||
Addresses scanned: I2C 0x4c and 0x4d
|
Addresses scanned: I2C 0x4c and 0x4d
|
||||||
Datasheet: Publicly available at the ON Semiconductor website
|
Datasheet: Publicly available at the ON Semiconductor website
|
||||||
http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461
|
http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461
|
||||||
|
* Analog Devices ADT7461A
|
||||||
|
Prefix: 'adt7461a'
|
||||||
|
Addresses scanned: I2C 0x4c and 0x4d
|
||||||
|
Datasheet: Publicly available at the ON Semiconductor website
|
||||||
|
http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461A
|
||||||
|
* ON Semiconductor NCT1008
|
||||||
|
Prefix: 'nct1008'
|
||||||
|
Addresses scanned: I2C 0x4c and 0x4d
|
||||||
|
Datasheet: Publicly available at the ON Semiconductor website
|
||||||
|
http://www.onsemi.com/PowerSolutions/product.do?id=NCT1008
|
||||||
* Maxim MAX6646
|
* Maxim MAX6646
|
||||||
Prefix: 'max6646'
|
Prefix: 'max6646'
|
||||||
Addresses scanned: I2C 0x4d
|
Addresses scanned: I2C 0x4d
|
||||||
|
@ -149,7 +159,7 @@ ADM1032:
|
||||||
* ALERT is triggered by open remote sensor.
|
* ALERT is triggered by open remote sensor.
|
||||||
* SMBus PEC support for Write Byte and Receive Byte transactions.
|
* SMBus PEC support for Write Byte and Receive Byte transactions.
|
||||||
|
|
||||||
ADT7461:
|
ADT7461, ADT7461A, NCT1008:
|
||||||
* Extended temperature range (breaks compatibility)
|
* Extended temperature range (breaks compatibility)
|
||||||
* Lower resolution for remote temperature
|
* Lower resolution for remote temperature
|
||||||
|
|
||||||
|
@ -195,9 +205,9 @@ are exported, one for each channel, but these values are of course linked.
|
||||||
Only the local hysteresis can be set from user-space, and the same delta
|
Only the local hysteresis can be set from user-space, and the same delta
|
||||||
applies to the remote hysteresis.
|
applies to the remote hysteresis.
|
||||||
|
|
||||||
The lm90 driver will not update its values more frequently than every
|
The lm90 driver will not update its values more frequently than configured with
|
||||||
other second; reading them more often will do no harm, but will return
|
the update_interval attribute; reading them more often will do no harm, but will
|
||||||
'old' values.
|
return 'old' values.
|
||||||
|
|
||||||
SMBus Alert Support
|
SMBus Alert Support
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -205,11 +215,12 @@ SMBus Alert Support
|
||||||
This driver has basic support for SMBus alert. When an alert is received,
|
This driver has basic support for SMBus alert. When an alert is received,
|
||||||
the status register is read and the faulty temperature channel is logged.
|
the status register is read and the faulty temperature channel is logged.
|
||||||
|
|
||||||
The Analog Devices chips (ADM1032 and ADT7461) do not implement the SMBus
|
The Analog Devices chips (ADM1032, ADT7461 and ADT7461A) and ON
|
||||||
alert protocol properly so additional care is needed: the ALERT output is
|
Semiconductor chips (NCT1008) do not implement the SMBus alert protocol
|
||||||
disabled when an alert is received, and is re-enabled only when the alarm
|
properly so additional care is needed: the ALERT output is disabled when
|
||||||
is gone. Otherwise the chip would block alerts from other chips in the bus
|
an alert is received, and is re-enabled only when the alarm is gone.
|
||||||
as long as the alarm is active.
|
Otherwise the chip would block alerts from other chips in the bus as long
|
||||||
|
as the alarm is active.
|
||||||
|
|
||||||
PEC Support
|
PEC Support
|
||||||
-----------
|
-----------
|
||||||
|
|
62
Documentation/hwmon/max16064
Normal file
62
Documentation/hwmon/max16064
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
Kernel driver max16064
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim MAX16064
|
||||||
|
Prefix: 'max16064'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX16064.pdf
|
||||||
|
|
||||||
|
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver supports hardware montoring for Maxim MAX16064 Quad Power-Supply
|
||||||
|
Controller with Active-Voltage Output Control and PMBus Interface.
|
||||||
|
|
||||||
|
The driver is a client driver to the core PMBus driver.
|
||||||
|
Please see Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||||
|
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not auto-detect devices. You will have to instantiate the
|
||||||
|
devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Platform data support
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The driver supports standard PMBus driver platform data.
|
||||||
|
|
||||||
|
|
||||||
|
Sysfs entries
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following attributes are supported. Limits are read-write; all other
|
||||||
|
attributes are read-only.
|
||||||
|
|
||||||
|
in[1-4]_label "vout[1-4]"
|
||||||
|
in[1-4]_input Measured voltage. From READ_VOUT register.
|
||||||
|
in[1-4]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
|
||||||
|
in[1-4]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
|
||||||
|
in[1-4]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register.
|
||||||
|
in[1-4]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register.
|
||||||
|
in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
|
in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
|
in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
||||||
|
in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
||||||
|
|
||||||
|
temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
|
||||||
|
temp1_max Maximum temperature. From OT_WARN_LIMIT register.
|
||||||
|
temp1_crit Critical high temperature. From OT_FAULT_LIMIT register.
|
||||||
|
temp1_max_alarm Chip temperature high alarm. Set by comparing
|
||||||
|
READ_TEMPERATURE_1 with OT_WARN_LIMIT if TEMP_OT_WARNING
|
||||||
|
status is set.
|
||||||
|
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
|
||||||
|
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
|
||||||
|
status is set.
|
98
Documentation/hwmon/max16065
Normal file
98
Documentation/hwmon/max16065
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
Kernel driver max16065
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim MAX16065, MAX16066
|
||||||
|
Prefixes: 'max16065', 'max16066'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://datasheets.maxim-ic.com/en/ds/MAX16065-MAX16066.pdf
|
||||||
|
* Maxim MAX16067
|
||||||
|
Prefix: 'max16067'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://datasheets.maxim-ic.com/en/ds/MAX16067.pdf
|
||||||
|
* Maxim MAX16068
|
||||||
|
Prefix: 'max16068'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://datasheets.maxim-ic.com/en/ds/MAX16068.pdf
|
||||||
|
* Maxim MAX16070/MAX16071
|
||||||
|
Prefixes: 'max16070', 'max16071'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://datasheets.maxim-ic.com/en/ds/MAX16070-MAX16071.pdf
|
||||||
|
|
||||||
|
|
||||||
|
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
[From datasheets] The MAX16065/MAX16066 flash-configurable system managers
|
||||||
|
monitor and sequence multiple system voltages. The MAX16065/MAX16066 can also
|
||||||
|
accurately monitor (+/-2.5%) one current channel using a dedicated high-side
|
||||||
|
current-sense amplifier. The MAX16065 manages up to twelve system voltages
|
||||||
|
simultaneously, and the MAX16066 manages up to eight supply voltages.
|
||||||
|
|
||||||
|
The MAX16067 flash-configurable system manager monitors and sequences multiple
|
||||||
|
system voltages. The MAX16067 manages up to six system voltages simultaneously.
|
||||||
|
|
||||||
|
The MAX16068 flash-configurable system manager monitors and manages up to six
|
||||||
|
system voltages simultaneously.
|
||||||
|
|
||||||
|
The MAX16070/MAX16071 flash-configurable system monitors supervise multiple
|
||||||
|
system voltages. The MAX16070/MAX16071 can also accurately monitor (+/-2.5%)
|
||||||
|
one current channel using a dedicated high-side current-sense amplifier. The
|
||||||
|
MAX16070 monitors up to twelve system voltages simultaneously, and the MAX16071
|
||||||
|
monitors up to eight supply voltages.
|
||||||
|
|
||||||
|
Each monitored channel has its own low and high critical limits. MAX16065,
|
||||||
|
MAX16066, MAX16070, and MAX16071 support an additional limit which is
|
||||||
|
configurable as either low or high secondary limit. MAX16065, MAX16066,
|
||||||
|
MAX16070, and MAX16071 also support supply current monitoring.
|
||||||
|
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not probe for devices, since there is no register which
|
||||||
|
can be safely used to identify the chip. You will have to instantiate
|
||||||
|
the devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Sysfs entries
|
||||||
|
-------------
|
||||||
|
|
||||||
|
in[0-11]_input Input voltage measurements.
|
||||||
|
|
||||||
|
in12_input Voltage on CSP (Current Sense Positive) pin.
|
||||||
|
Only if the chip supports current sensing and if
|
||||||
|
current sensing is enabled.
|
||||||
|
|
||||||
|
in[0-11]_min Low warning limit.
|
||||||
|
Supported on MAX16065, MAX16066, MAX16070, and MAX16071
|
||||||
|
only.
|
||||||
|
|
||||||
|
in[0-11]_max High warning limit.
|
||||||
|
Supported on MAX16065, MAX16066, MAX16070, and MAX16071
|
||||||
|
only.
|
||||||
|
|
||||||
|
Either low or high warning limits are supported
|
||||||
|
(depending on chip configuration), but not both.
|
||||||
|
|
||||||
|
in[0-11]_lcrit Low critical limit.
|
||||||
|
|
||||||
|
in[0-11]_crit High critical limit.
|
||||||
|
|
||||||
|
in[0-11]_alarm Input voltage alarm.
|
||||||
|
|
||||||
|
curr1_input Current sense input; only if the chip supports current
|
||||||
|
sensing and if current sensing is enabled.
|
||||||
|
Displayed current assumes 0.001 Ohm current sense
|
||||||
|
resistor.
|
||||||
|
|
||||||
|
curr1_alarm Overcurrent alarm; only if the chip supports current
|
||||||
|
sensing and if current sensing is enabled.
|
79
Documentation/hwmon/max34440
Normal file
79
Documentation/hwmon/max34440
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
Kernel driver max34440
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim MAX34440
|
||||||
|
Prefixes: 'max34440'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34440.pdf
|
||||||
|
* Maxim MAX34441
|
||||||
|
PMBus 5-Channel Power-Supply Manager and Intelligent Fan Controller
|
||||||
|
Prefixes: 'max34441'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34441.pdf
|
||||||
|
|
||||||
|
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver supports hardware montoring for Maxim MAX34440 PMBus 6-Channel
|
||||||
|
Power-Supply Manager and MAX34441 PMBus 5-Channel Power-Supply Manager
|
||||||
|
and Intelligent Fan Controller.
|
||||||
|
|
||||||
|
The driver is a client driver to the core PMBus driver. Please see
|
||||||
|
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||||
|
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not auto-detect devices. You will have to instantiate the
|
||||||
|
devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Platform data support
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The driver supports standard PMBus driver platform data.
|
||||||
|
|
||||||
|
|
||||||
|
Sysfs entries
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following attributes are supported. Limits are read-write; all other
|
||||||
|
attributes are read-only.
|
||||||
|
|
||||||
|
in[1-6]_label "vout[1-6]".
|
||||||
|
in[1-6]_input Measured voltage. From READ_VOUT register.
|
||||||
|
in[1-6]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
|
||||||
|
in[1-6]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
|
||||||
|
in[1-6]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register.
|
||||||
|
in[1-6]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register.
|
||||||
|
in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
|
in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
|
in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
||||||
|
in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
||||||
|
|
||||||
|
curr[1-6]_label "iout[1-6]".
|
||||||
|
curr[1-6]_input Measured current. From READ_IOUT register.
|
||||||
|
curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
||||||
|
curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
|
||||||
|
curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status.
|
||||||
|
curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
|
||||||
|
|
||||||
|
in6 and curr6 attributes only exist for MAX34440.
|
||||||
|
|
||||||
|
temp[1-8]_input Measured temperatures. From READ_TEMPERATURE_1 register.
|
||||||
|
temp1 is the chip's internal temperature. temp2..temp5
|
||||||
|
are remote I2C temperature sensors. For MAX34441, temp6
|
||||||
|
is a remote thermal-diode sensor. For MAX34440, temp6..8
|
||||||
|
are remote I2C temperature sensors.
|
||||||
|
temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register.
|
||||||
|
temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register.
|
||||||
|
temp[1-8]_max_alarm Temperature high alarm.
|
||||||
|
temp[1-8]_crit_alarm Temperature critical high alarm.
|
||||||
|
|
||||||
|
temp7 and temp8 attributes only exist for MAX34440.
|
21
Documentation/hwmon/max6642
Normal file
21
Documentation/hwmon/max6642
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
Kernel driver max6642
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim MAX6642
|
||||||
|
Prefix: 'max6642'
|
||||||
|
Addresses scanned: I2C 0x48-0x4f
|
||||||
|
Datasheet: Publicly available at the Maxim website
|
||||||
|
http://datasheets.maxim-ic.com/en/ds/MAX6642.pdf
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
Per Dalen <per.dalen@appeartv.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The MAX6642 is a digital temperature sensor. It senses its own temperature as
|
||||||
|
well as the temperature on one external diode.
|
||||||
|
|
||||||
|
All temperature values are given in degrees Celsius. Resolution
|
||||||
|
is 0.25 degree for the local temperature and for the remote temperature.
|
|
@ -2,9 +2,13 @@ Kernel driver max6650
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
Supported chips:
|
Supported chips:
|
||||||
* Maxim 6650 / 6651
|
* Maxim MAX6650
|
||||||
Prefix: 'max6650'
|
Prefix: 'max6650'
|
||||||
Addresses scanned: I2C 0x1b, 0x1f, 0x48, 0x4b
|
Addresses scanned: none
|
||||||
|
Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
|
||||||
|
* Maxim MAX6651
|
||||||
|
Prefix: 'max6651'
|
||||||
|
Addresses scanned: none
|
||||||
Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
|
Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
|
||||||
|
|
||||||
Authors:
|
Authors:
|
||||||
|
@ -15,10 +19,10 @@ Authors:
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This driver implements support for the Maxim 6650/6651
|
This driver implements support for the Maxim MAX6650 and MAX6651.
|
||||||
|
|
||||||
The 2 devices are very similar, but the Maxim 6550 has a reduced feature
|
The 2 devices are very similar, but the MAX6550 has a reduced feature
|
||||||
set, e.g. only one fan-input, instead of 4 for the 6651.
|
set, e.g. only one fan-input, instead of 4 for the MAX6651.
|
||||||
|
|
||||||
The driver is not able to distinguish between the 2 devices.
|
The driver is not able to distinguish between the 2 devices.
|
||||||
|
|
||||||
|
@ -36,6 +40,13 @@ fan1_div rw sets the speed range the inputs can handle. Legal
|
||||||
values are 1, 2, 4, and 8. Use lower values for
|
values are 1, 2, 4, and 8. Use lower values for
|
||||||
faster fans.
|
faster fans.
|
||||||
|
|
||||||
|
Usage notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not auto-detect devices. You will have to instantiate the
|
||||||
|
devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
Module parameters
|
Module parameters
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
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