Merge branch 'next' into for-linus
Merge first round of changes for 3.13 merge window.
This commit is contained in:
@@ -29,6 +29,7 @@ modules.builtin
|
||||
*.bz2
|
||||
*.lzma
|
||||
*.xz
|
||||
*.lz4
|
||||
*.lzo
|
||||
*.patch
|
||||
*.gcno
|
||||
|
||||
@@ -637,14 +637,13 @@ S: 14509 NE 39th Street #1096
|
||||
S: Bellevue, Washington 98007
|
||||
S: USA
|
||||
|
||||
N: Christopher L. Cheney
|
||||
E: ccheney@debian.org
|
||||
E: ccheney@cheney.cx
|
||||
W: http://www.cheney.cx
|
||||
N: Chris Cheney
|
||||
E: chris.cheney@gmail.com
|
||||
E: ccheney@redhat.com
|
||||
P: 1024D/8E384AF2 2D31 1927 87D7 1F24 9FF9 1BC5 D106 5AB3 8E38 4AF2
|
||||
D: Vista Imaging usb webcam driver
|
||||
S: 314 Prince of Wales
|
||||
S: Conroe, TX 77304
|
||||
S: 2308 Therrell Way
|
||||
S: McKinney, TX 75070
|
||||
S: USA
|
||||
|
||||
N: Stuart Cheshire
|
||||
@@ -1120,6 +1119,7 @@ D: author of userfs filesystem
|
||||
D: Improved mmap and munmap handling
|
||||
D: General mm minor tidyups
|
||||
D: autofs v4 maintainer
|
||||
D: Xen subsystem
|
||||
S: 987 Alabama St
|
||||
S: San Francisco
|
||||
S: CA, 94110
|
||||
@@ -2808,8 +2808,7 @@ S: Ottawa, Ontario
|
||||
S: Canada K2P 0X8
|
||||
|
||||
N: Mikael Pettersson
|
||||
E: mikpe@it.uu.se
|
||||
W: http://user.it.uu.se/~mikpe/linux/
|
||||
E: mikpelinux@gmail.com
|
||||
D: Miscellaneous fixes
|
||||
|
||||
N: Reed H. Petty
|
||||
|
||||
@@ -40,7 +40,7 @@ IPMI.txt
|
||||
IRQ-affinity.txt
|
||||
- how to select which CPU(s) handle which interrupt events on SMP.
|
||||
IRQ-domain.txt
|
||||
- info on inerrupt numbering and setting up IRQ domains.
|
||||
- info on interrupt numbering and setting up IRQ domains.
|
||||
IRQ.txt
|
||||
- description of what an IRQ is.
|
||||
Intel-IOMMU.txt
|
||||
@@ -187,6 +187,8 @@ firmware_class/
|
||||
- request_firmware() hotplug interface info.
|
||||
flexible-arrays.txt
|
||||
- how to make use of flexible sized arrays in linux
|
||||
fmc/
|
||||
- information about the FMC bus abstraction
|
||||
frv/
|
||||
- Fujitsu FR-V Linux documentation.
|
||||
futex-requeue-pi.txt
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
What: /sys/bus/usb/devices/.../power/persist
|
||||
Date: May 2007
|
||||
KernelVersion: 2.6.23
|
||||
Contact: Alan Stern <stern@rowland.harvard.edu>
|
||||
Description:
|
||||
If CONFIG_USB_PERSIST is set, then each USB device directory
|
||||
will contain a file named power/persist. The file holds a
|
||||
boolean value (0 or 1) indicating whether or not the
|
||||
"USB-Persist" facility is enabled for the device. Since the
|
||||
facility is inherently dangerous, it is disabled by default
|
||||
for all devices except hubs. For more information, see
|
||||
Documentation/usb/persist.txt.
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/autosuspend
|
||||
Date: March 2007
|
||||
KernelVersion: 2.6.21
|
||||
Contact: Alan Stern <stern@rowland.harvard.edu>
|
||||
Description:
|
||||
Each USB device directory will contain a file named
|
||||
power/autosuspend. This file holds the time (in seconds)
|
||||
the device must be idle before it will be autosuspended.
|
||||
0 means the device will be autosuspended as soon as
|
||||
possible. Negative values will prevent the device from
|
||||
being autosuspended at all, and writing a negative value
|
||||
will resume the device if it is already suspended.
|
||||
|
||||
The autosuspend delay for newly-created devices is set to
|
||||
the value of the usbcore.autosuspend module parameter.
|
||||
|
||||
What: /sys/bus/usb/device/.../power/connected_duration
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.25
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
If CONFIG_PM_RUNTIME is enabled then this file
|
||||
is present. When read, it returns the total time (in msec)
|
||||
that the USB device has been connected to the machine. This
|
||||
file is read-only.
|
||||
Users:
|
||||
PowerTOP <power@bughost.org>
|
||||
http://www.lesswatts.org/projects/powertop/
|
||||
|
||||
What: /sys/bus/usb/device/.../power/active_duration
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.25
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
If CONFIG_PM_RUNTIME is enabled then this file
|
||||
is present. When read, it returns the total time (in msec)
|
||||
that the USB device has been active, i.e. not in a suspended
|
||||
state. This file is read-only.
|
||||
|
||||
Tools can use this file and the connected_duration file to
|
||||
compute the percentage of time that a device has been active.
|
||||
For example,
|
||||
echo $((100 * `cat active_duration` / `cat connected_duration`))
|
||||
will give an integer percentage. Note that this does not
|
||||
account for counter wrap.
|
||||
Users:
|
||||
PowerTOP <power@bughost.org>
|
||||
http://www.lesswatts.org/projects/powertop/
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.27
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
When read, this file returns 1 if the interface driver
|
||||
for this interface supports autosuspend. It also
|
||||
returns 1 if no driver has claimed this interface, as an
|
||||
unclaimed interface will not stop the device from being
|
||||
autosuspended if all other interface drivers are idle.
|
||||
The file returns 0 if autosuspend support has not been
|
||||
added to the driver.
|
||||
Users:
|
||||
USB PM tool
|
||||
git://git.moblin.org/users/sarah/usb-pm-tool/
|
||||
|
||||
What: /sys/bus/usb/device/.../avoid_reset_quirk
|
||||
Date: December 2009
|
||||
Contact: Oliver Neukum <oliver@neukum.org>
|
||||
Description:
|
||||
Writing 1 to this file tells the kernel that this
|
||||
device will morph into another mode when it is reset.
|
||||
Drivers will not use reset for error handling for
|
||||
such devices.
|
||||
Users:
|
||||
usb_modeswitch
|
||||
|
||||
What: /sys/bus/usb/devices/.../devnum
|
||||
KernelVersion: since at least 2.6.18
|
||||
Description:
|
||||
Device address on the USB bus.
|
||||
Users:
|
||||
libusb
|
||||
|
||||
What: /sys/bus/usb/devices/.../bConfigurationValue
|
||||
KernelVersion: since at least 2.6.18
|
||||
Description:
|
||||
bConfigurationValue of the *active* configuration for the
|
||||
device. Writing 0 or -1 to bConfigurationValue will reset the
|
||||
active configuration (unconfigure the device). Writing
|
||||
another value will change the active configuration.
|
||||
|
||||
Note that some devices, in violation of the USB spec, have a
|
||||
configuration with a value equal to 0. Writing 0 to
|
||||
bConfigurationValue for these devices will install that
|
||||
configuration, rather then unconfigure the device.
|
||||
|
||||
Writing -1 will always unconfigure the device.
|
||||
Users:
|
||||
libusb
|
||||
|
||||
What: /sys/bus/usb/devices/.../busnum
|
||||
KernelVersion: 2.6.22
|
||||
Description:
|
||||
Bus-number of the USB-bus the device is connected to.
|
||||
Users:
|
||||
libusb
|
||||
|
||||
What: /sys/bus/usb/devices/.../descriptors
|
||||
KernelVersion: 2.6.26
|
||||
Description:
|
||||
Binary file containing cached descriptors of the device. The
|
||||
binary data consists of the device descriptor followed by the
|
||||
descriptors for each configuration of the device.
|
||||
Note that the wTotalLength of the config descriptors can not
|
||||
be trusted, as the device may have a smaller config descriptor
|
||||
than it advertises. The bLength field of each (sub) descriptor
|
||||
can be trusted, and can be used to seek forward one (sub)
|
||||
descriptor at a time until the next config descriptor is found.
|
||||
All descriptors read from this file are in bus-endian format
|
||||
Users:
|
||||
libusb
|
||||
|
||||
What: /sys/bus/usb/devices/.../speed
|
||||
KernelVersion: since at least 2.6.18
|
||||
Description:
|
||||
Speed the device is connected with to the usb-host in
|
||||
Mbit / second. IE one of 1.5 / 12 / 480 / 5000.
|
||||
Users:
|
||||
libusb
|
||||
@@ -54,6 +54,13 @@ Description: Interface for making ib_srp connect to a new target.
|
||||
ib_srp. Specifying a value that exceeds cmd_sg_entries is
|
||||
only safe with partial memory descriptor list support enabled
|
||||
(allow_ext_sg=1).
|
||||
* comp_vector, a number in the range 0..n-1 specifying the
|
||||
MSI-X completion vector. Some HCA's allocate multiple (n)
|
||||
MSI-X vectors per HCA port. If the IRQ affinity masks of
|
||||
these interrupts have been configured such that each MSI-X
|
||||
interrupt is handled by a different CPU then the comp_vector
|
||||
parameter can be used to spread the SRP completion workload
|
||||
over multiple CPU's.
|
||||
|
||||
What: /sys/class/infiniband_srp/srp-<hca>-<port_number>/ibdev
|
||||
Date: January 2, 2006
|
||||
|
||||
@@ -4,9 +4,13 @@ Description:
|
||||
|
||||
/sys/module/MODULENAME
|
||||
The name of the module that is in the kernel. This
|
||||
module name will show up either if the module is built
|
||||
directly into the kernel, or if it is loaded as a
|
||||
dynamic module.
|
||||
module name will always show up if the module is loaded as a
|
||||
dynamic module. If it is built directly into the kernel, it
|
||||
will only show up if it has a version or at least one
|
||||
parameter.
|
||||
|
||||
Note: The conditions of creation in the built-in case are not
|
||||
by design and may be removed in the future.
|
||||
|
||||
/sys/module/MODULENAME/parameters
|
||||
This directory contains individual files that are each
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
What: /config/usb-gadget
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
This group contains sub-groups corresponding to created
|
||||
USB gadgets.
|
||||
|
||||
What: /config/usb-gadget/gadget
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
|
||||
The attributes of a gadget:
|
||||
|
||||
UDC - bind a gadget to UDC/unbind a gadget;
|
||||
write UDC's name found in /sys/class/udc/*
|
||||
to bind a gadget, empty string "" to unbind.
|
||||
|
||||
bDeviceClass - USB device class code
|
||||
bDeviceSubClass - USB device subclass code
|
||||
bDeviceProtocol - USB device protocol code
|
||||
bMaxPacketSize0 - maximum endpoint 0 packet size
|
||||
bcdDevice - bcd device release number
|
||||
bcdUSB - bcd USB specification version number
|
||||
idProduct - product ID
|
||||
idVendor - vendor ID
|
||||
|
||||
What: /config/usb-gadget/gadget/configs
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
This group contains a USB gadget's configurations
|
||||
|
||||
What: /config/usb-gadget/gadget/configs/config
|
||||
Date: Jun 2013
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes of a configuration:
|
||||
|
||||
bmAttributes - configuration characteristics
|
||||
MaxPower - maximum power consumption from the bus
|
||||
|
||||
What: /config/usb-gadget/gadget/configs/config/strings
|
||||
Date: Jun 2013
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
This group contains subdirectories for language-specific
|
||||
strings for this configuration.
|
||||
|
||||
What: /config/usb-gadget/gadget/configs/config/strings/language
|
||||
Date: Jun 2013
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
configuration - configuration description
|
||||
|
||||
|
||||
What: /config/usb-gadget/gadget/functions
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
This group contains functions available to this USB gadget.
|
||||
|
||||
What: /config/usb-gadget/gadget/strings
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
This group contains subdirectories for language-specific
|
||||
strings for this gadget.
|
||||
|
||||
What: /config/usb-gadget/gadget/strings/language
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
serialnumber - gadget's serial number (string)
|
||||
product - gadget's product description
|
||||
manufacturer - gadget's manufacturer description
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
What: /config/usb-gadget/gadget/functions/acm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
It contains the port number of the /dev/ttyGS<n> device
|
||||
associated with acm function's instance "name".
|
||||
@@ -0,0 +1,16 @@
|
||||
What: /config/usb-gadget/gadget/functions/ecm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
ifname - network device interface name associated with
|
||||
this function instance
|
||||
qmult - queue length multiplier for high and
|
||||
super speed
|
||||
host_addr - MAC address of host's end of this
|
||||
Ethernet over USB link
|
||||
dev_addr - MAC address of device's end of this
|
||||
Ethernet over USB link
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
What: /config/usb-gadget/gadget/functions/eem.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
ifname - network device interface name associated with
|
||||
this function instance
|
||||
qmult - queue length multiplier for high and
|
||||
super speed
|
||||
host_addr - MAC address of host's end of this
|
||||
Ethernet over USB link
|
||||
dev_addr - MAC address of device's end of this
|
||||
Ethernet over USB link
|
||||
@@ -0,0 +1,15 @@
|
||||
What: /config/usb-gadget/gadget/functions/ncm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
ifname - network device interface name associated with
|
||||
this function instance
|
||||
qmult - queue length multiplier for high and
|
||||
super speed
|
||||
host_addr - MAC address of host's end of this
|
||||
Ethernet over USB link
|
||||
dev_addr - MAC address of device's end of this
|
||||
Ethernet over USB link
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
What: /config/usb-gadget/gadget/functions/obex.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
It contains the port number of the /dev/ttyGS<n> device
|
||||
associated with obex function's instance "name".
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
What: /config/usb-gadget/gadget/functions/phonet.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: ifname.
|
||||
It contains the network interface name assigned during
|
||||
network device registration.
|
||||
@@ -0,0 +1,14 @@
|
||||
What: /config/usb-gadget/gadget/functions/rndis.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
ifname - network device interface name associated with
|
||||
this function instance
|
||||
qmult - queue length multiplier for high and
|
||||
super speed
|
||||
host_addr - MAC address of host's end of this
|
||||
Ethernet over USB link
|
||||
dev_addr - MAC address of device's end of this
|
||||
Ethernet over USB link
|
||||
@@ -0,0 +1,9 @@
|
||||
What: /config/usb-gadget/gadget/functions/gser.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
It contains the port number of the /dev/ttyGS<n> device
|
||||
associated with gser function's instance "name".
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
What: /config/usb-gadget/gadget/functions/geth.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
ifname - network device interface name associated with
|
||||
this function instance
|
||||
qmult - queue length multiplier for high and
|
||||
super speed
|
||||
host_addr - MAC address of host's end of this
|
||||
Ethernet over USB link
|
||||
dev_addr - MAC address of device's end of this
|
||||
Ethernet over USB link
|
||||
@@ -5,20 +5,21 @@ Description:
|
||||
The disksize file is read-write and specifies the disk size
|
||||
which represents the limit on the *uncompressed* worth of data
|
||||
that can be stored in this disk.
|
||||
Unit: bytes
|
||||
|
||||
What: /sys/block/zram<id>/initstate
|
||||
Date: August 2010
|
||||
Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
Description:
|
||||
The disksize file is read-only and shows the initialization
|
||||
The initstate file is read-only and shows the initialization
|
||||
state of the device.
|
||||
|
||||
What: /sys/block/zram<id>/reset
|
||||
Date: August 2010
|
||||
Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
Description:
|
||||
The disksize file is write-only and allows resetting the
|
||||
device. The reset operation frees all the memory assocaited
|
||||
The reset file is write-only and allows resetting the
|
||||
device. The reset operation frees all the memory associated
|
||||
with this device.
|
||||
|
||||
What: /sys/block/zram<id>/num_reads
|
||||
@@ -48,7 +49,7 @@ Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
Description:
|
||||
The notify_free file is read-only and specifies the number of
|
||||
swap slot free notifications received by this device. These
|
||||
notifications are send to a swap block device when a swap slot
|
||||
notifications are sent to a swap block device when a swap slot
|
||||
is freed. This statistic is applicable only when this disk is
|
||||
being used as a swap disk.
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
What: /sys/bus/acpi/devices/.../path
|
||||
Date: December 2006
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute indicates the full path of ACPI namespace
|
||||
object associated with the device object. For example,
|
||||
\_SB_.PCI0.
|
||||
This file is not present for device objects representing
|
||||
fixed ACPI hardware features (like power and sleep
|
||||
buttons).
|
||||
|
||||
What: /sys/bus/acpi/devices/.../modalias
|
||||
Date: July 2007
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute indicates the PNP IDs of the device object.
|
||||
That is acpi:HHHHHHHH:[CCCCCCC:]. Where each HHHHHHHH or
|
||||
CCCCCCCC contains device object's PNPID (_HID or _CID).
|
||||
|
||||
What: /sys/bus/acpi/devices/.../hid
|
||||
Date: April 2005
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute indicates the hardware ID (_HID) of the
|
||||
device object. For example, PNP0103.
|
||||
This file is present for device objects having the _HID
|
||||
control method.
|
||||
|
||||
What: /sys/bus/acpi/devices/.../description
|
||||
Date: October 2012
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute contains the output of the device object's
|
||||
_STR control method, if present.
|
||||
|
||||
What: /sys/bus/acpi/devices/.../adr
|
||||
Date: October 2012
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute contains the output of the device object's
|
||||
_ADR control method, which is present for ACPI device
|
||||
objects representing devices having standard enumeration
|
||||
algorithms, such as PCI.
|
||||
|
||||
What: /sys/bus/acpi/devices/.../uid
|
||||
Date: October 2012
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
This attribute contains the output of the device object's
|
||||
_UID control method, if present.
|
||||
|
||||
What: /sys/bus/acpi/devices/.../eject
|
||||
Date: December 2006
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
Writing 1 to this attribute will trigger hot removal of
|
||||
this device object. This file exists for every device
|
||||
object that has _EJ0 method.
|
||||
@@ -27,14 +27,36 @@ Description: Generic performance monitoring events
|
||||
"basename".
|
||||
|
||||
|
||||
What: /sys/devices/cpu/events/PM_LD_MISS_L1
|
||||
/sys/devices/cpu/events/PM_LD_REF_L1
|
||||
/sys/devices/cpu/events/PM_CYC
|
||||
What: /sys/devices/cpu/events/PM_1PLUS_PPC_CMPL
|
||||
/sys/devices/cpu/events/PM_BRU_FIN
|
||||
/sys/devices/cpu/events/PM_GCT_NOSLOT_CYC
|
||||
/sys/devices/cpu/events/PM_BRU_MPRED
|
||||
/sys/devices/cpu/events/PM_INST_CMPL
|
||||
/sys/devices/cpu/events/PM_BR_MPRED
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_BRU
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_DCACHE_MISS
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_DFU
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_DIV
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_ERAT_MISS
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_FXU
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_IFU
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_LSU
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_REJECT
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_SCALAR
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_SCALAR_LONG
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_STORE
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_THRD
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_VECTOR
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_VECTOR_LONG
|
||||
/sys/devices/cpu/events/PM_CYC
|
||||
/sys/devices/cpu/events/PM_GCT_NOSLOT_BR_MPRED
|
||||
/sys/devices/cpu/events/PM_GCT_NOSLOT_BR_MPRED_IC_MISS
|
||||
/sys/devices/cpu/events/PM_GCT_NOSLOT_CYC
|
||||
/sys/devices/cpu/events/PM_GCT_NOSLOT_IC_MISS
|
||||
/sys/devices/cpu/events/PM_GRP_CMPL
|
||||
/sys/devices/cpu/events/PM_INST_CMPL
|
||||
/sys/devices/cpu/events/PM_LD_MISS_L1
|
||||
/sys/devices/cpu/events/PM_LD_REF_L1
|
||||
/sys/devices/cpu/events/PM_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_RUN_INST_CMPL
|
||||
|
||||
Date: 2013/01/08
|
||||
|
||||
|
||||
@@ -9,6 +9,12 @@ Description:
|
||||
we want to export, so that userspace can deal with sane
|
||||
name/value pairs.
|
||||
|
||||
Userspace must be prepared for the possibility that attributes
|
||||
define overlapping bit ranges. For example:
|
||||
attr1 = 'config:0-23'
|
||||
attr2 = 'config:0-7'
|
||||
attr3 = 'config:12-35'
|
||||
|
||||
Example: 'config1:1,6-10,44'
|
||||
Defines contents of attribute that occupies bits 1,6-10,44 of
|
||||
perf_event_attr::config1.
|
||||
|
||||
@@ -351,6 +351,7 @@ Description:
|
||||
6kohm_to_gnd: connected to ground via a 6kOhm resistor,
|
||||
20kohm_to_gnd: connected to ground via a 20kOhm resistor,
|
||||
100kohm_to_gnd: connected to ground via an 100kOhm resistor,
|
||||
500kohm_to_gnd: connected to ground via a 500kOhm resistor,
|
||||
three_state: left floating.
|
||||
For a list of available output power down options read
|
||||
outX_powerdown_mode_available. If Y is not present the
|
||||
@@ -690,45 +691,45 @@ Description:
|
||||
Actually start the buffer capture up. Will start trigger
|
||||
if first device and appropriate.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/buffer/scan_elements
|
||||
What: /sys/bus/iio/devices/iio:deviceX/scan_elements
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Directory containing interfaces for elements that will be
|
||||
captured for a single triggered sample set in the buffer.
|
||||
|
||||
What: /sys/.../buffer/scan_elements/in_accel_x_en
|
||||
What: /sys/.../buffer/scan_elements/in_accel_y_en
|
||||
What: /sys/.../buffer/scan_elements/in_accel_z_en
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_x_en
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_y_en
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_z_en
|
||||
What: /sys/.../buffer/scan_elements/in_magn_x_en
|
||||
What: /sys/.../buffer/scan_elements/in_magn_y_en
|
||||
What: /sys/.../buffer/scan_elements/in_magn_z_en
|
||||
What: /sys/.../buffer/scan_elements/in_timestamp_en
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_supply_en
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_en
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY-voltageZ_en
|
||||
What: /sys/.../buffer/scan_elements/in_incli_x_en
|
||||
What: /sys/.../buffer/scan_elements/in_incli_y_en
|
||||
What: /sys/.../buffer/scan_elements/in_pressureY_en
|
||||
What: /sys/.../buffer/scan_elements/in_pressure_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_x_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_y_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_z_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_x_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_y_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_x_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_y_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_z_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_timestamp_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY-voltageZ_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_incli_x_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_incli_y_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressureY_en
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressure_en
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Scan element control for triggered data capture.
|
||||
|
||||
What: /sys/.../buffer/scan_elements/in_accel_type
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_type
|
||||
What: /sys/.../buffer/scan_elements/in_magn_type
|
||||
What: /sys/.../buffer/scan_elements/in_incli_type
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_type
|
||||
What: /sys/.../buffer/scan_elements/in_voltage_type
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_supply_type
|
||||
What: /sys/.../buffer/scan_elements/in_timestamp_type
|
||||
What: /sys/.../buffer/scan_elements/in_pressureY_type
|
||||
What: /sys/.../buffer/scan_elements/in_pressure_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_incli_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltage_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_timestamp_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressureY_type
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressure_type
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
@@ -752,29 +753,29 @@ Description:
|
||||
For other storage combinations this attribute will be extended
|
||||
appropriately.
|
||||
|
||||
What: /sys/.../buffer/scan_elements/in_accel_type_available
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_type_available
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
If the type parameter can take one of a small set of values,
|
||||
this attribute lists them.
|
||||
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_index
|
||||
What: /sys/.../buffer/scan_elements/in_voltageY_supply_index
|
||||
What: /sys/.../buffer/scan_elements/in_accel_x_index
|
||||
What: /sys/.../buffer/scan_elements/in_accel_y_index
|
||||
What: /sys/.../buffer/scan_elements/in_accel_z_index
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_x_index
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_y_index
|
||||
What: /sys/.../buffer/scan_elements/in_anglvel_z_index
|
||||
What: /sys/.../buffer/scan_elements/in_magn_x_index
|
||||
What: /sys/.../buffer/scan_elements/in_magn_y_index
|
||||
What: /sys/.../buffer/scan_elements/in_magn_z_index
|
||||
What: /sys/.../buffer/scan_elements/in_incli_x_index
|
||||
What: /sys/.../buffer/scan_elements/in_incli_y_index
|
||||
What: /sys/.../buffer/scan_elements/in_timestamp_index
|
||||
What: /sys/.../buffer/scan_elements/in_pressureY_index
|
||||
What: /sys/.../buffer/scan_elements/in_pressure_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_voltageY_supply_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_x_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_y_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_accel_z_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_x_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_y_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_anglvel_z_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_x_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_y_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_magn_z_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_incli_x_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_incli_y_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_timestamp_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressureY_index
|
||||
What: /sys/.../iio:deviceX/scan_elements/in_pressure_index
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
@@ -792,3 +793,21 @@ Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
This attribute is used to read the amount of quadrature error
|
||||
present in the device at a given time.
|
||||
|
||||
What: /sys/.../iio:deviceX/in_accelX_power_mode
|
||||
KernelVersion: 3.11
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Specifies the chip power mode.
|
||||
low_noise: reduce noise level from ADC,
|
||||
low_power: enable low current consumption.
|
||||
For a list of available output power modes read
|
||||
in_accel_power_mode_available.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/store_eeprom
|
||||
KernelVersion: 3.4.0
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Writing '1' stores the current device configuration into
|
||||
on-chip EEPROM. After power-up or chip reset the device will
|
||||
automatically load the saved configuration.
|
||||
|
||||
@@ -18,14 +18,6 @@ Description:
|
||||
Reading returns either '1' or '0'. '1' means that the
|
||||
pllY is locked.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/store_eeprom
|
||||
KernelVersion: 3.4.0
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Writing '1' stores the current device configuration into
|
||||
on-chip EEPROM. After power-up or chip reset the device will
|
||||
automatically load the saved configuration.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/sync_dividers
|
||||
KernelVersion: 3.4.0
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
|
||||
@@ -18,4 +18,4 @@ Description:
|
||||
adjust the reference frequency accordingly.
|
||||
The value written has no effect until out_altvoltageY_frequency
|
||||
is updated. Consider to use out_altvoltageY_powerdown to power
|
||||
down the PLL and it's RFOut buffers during REFin changes.
|
||||
down the PLL and its RFOut buffers during REFin changes.
|
||||
|
||||
@@ -64,7 +64,6 @@ Description:
|
||||
Writing a non-zero value to this attribute will
|
||||
force a rescan of all PCI buses in the system, and
|
||||
re-discover previously removed devices.
|
||||
Depends on CONFIG_HOTPLUG.
|
||||
|
||||
What: /sys/bus/pci/devices/.../msi_irqs/
|
||||
Date: September, 2011
|
||||
@@ -90,7 +89,6 @@ Contact: Linux PCI developers <linux-pci@vger.kernel.org>
|
||||
Description:
|
||||
Writing a non-zero value to this attribute will
|
||||
hot-remove the PCI device and any of its children.
|
||||
Depends on CONFIG_HOTPLUG.
|
||||
|
||||
What: /sys/bus/pci/devices/.../pci_bus/.../rescan
|
||||
Date: May 2011
|
||||
@@ -99,7 +97,7 @@ 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.
|
||||
part of the device tree.
|
||||
|
||||
What: /sys/bus/pci/devices/.../rescan
|
||||
Date: January 2009
|
||||
@@ -109,7 +107,6 @@ Description:
|
||||
force a rescan of the device's parent 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/.../reset
|
||||
Date: July 2009
|
||||
|
||||
@@ -1,81 +1,3 @@
|
||||
What: /sys/bus/usb/devices/.../power/autosuspend
|
||||
Date: March 2007
|
||||
KernelVersion: 2.6.21
|
||||
Contact: Alan Stern <stern@rowland.harvard.edu>
|
||||
Description:
|
||||
Each USB device directory will contain a file named
|
||||
power/autosuspend. This file holds the time (in seconds)
|
||||
the device must be idle before it will be autosuspended.
|
||||
0 means the device will be autosuspended as soon as
|
||||
possible. Negative values will prevent the device from
|
||||
being autosuspended at all, and writing a negative value
|
||||
will resume the device if it is already suspended.
|
||||
|
||||
The autosuspend delay for newly-created devices is set to
|
||||
the value of the usbcore.autosuspend module parameter.
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/persist
|
||||
Date: May 2007
|
||||
KernelVersion: 2.6.23
|
||||
Contact: Alan Stern <stern@rowland.harvard.edu>
|
||||
Description:
|
||||
If CONFIG_USB_PERSIST is set, then each USB device directory
|
||||
will contain a file named power/persist. The file holds a
|
||||
boolean value (0 or 1) indicating whether or not the
|
||||
"USB-Persist" facility is enabled for the device. Since the
|
||||
facility is inherently dangerous, it is disabled by default
|
||||
for all devices except hubs. For more information, see
|
||||
Documentation/usb/persist.txt.
|
||||
|
||||
What: /sys/bus/usb/device/.../power/connected_duration
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.25
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
If CONFIG_PM_RUNTIME is enabled then this file
|
||||
is present. When read, it returns the total time (in msec)
|
||||
that the USB device has been connected to the machine. This
|
||||
file is read-only.
|
||||
Users:
|
||||
PowerTOP <power@bughost.org>
|
||||
http://www.lesswatts.org/projects/powertop/
|
||||
|
||||
What: /sys/bus/usb/device/.../power/active_duration
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.25
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
If CONFIG_PM_RUNTIME is enabled then this file
|
||||
is present. When read, it returns the total time (in msec)
|
||||
that the USB device has been active, i.e. not in a suspended
|
||||
state. This file is read-only.
|
||||
|
||||
Tools can use this file and the connected_duration file to
|
||||
compute the percentage of time that a device has been active.
|
||||
For example,
|
||||
echo $((100 * `cat active_duration` / `cat connected_duration`))
|
||||
will give an integer percentage. Note that this does not
|
||||
account for counter wrap.
|
||||
Users:
|
||||
PowerTOP <power@bughost.org>
|
||||
http://www.lesswatts.org/projects/powertop/
|
||||
|
||||
What: /sys/bus/usb/device/<busnum>-<devnum>...:<config num>-<interface num>/supports_autosuspend
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.27
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
When read, this file returns 1 if the interface driver
|
||||
for this interface supports autosuspend. It also
|
||||
returns 1 if no driver has claimed this interface, as an
|
||||
unclaimed interface will not stop the device from being
|
||||
autosuspended if all other interface drivers are idle.
|
||||
The file returns 0 if autosuspend support has not been
|
||||
added to the driver.
|
||||
Users:
|
||||
USB PM tool
|
||||
git://git.moblin.org/users/sarah/usb-pm-tool/
|
||||
|
||||
What: /sys/bus/usb/device/.../authorized
|
||||
Date: July 2008
|
||||
KernelVersion: 2.6.26
|
||||
@@ -172,17 +94,6 @@ Description:
|
||||
device IDs, exactly like reading from the entry
|
||||
"/sys/bus/usb/drivers/.../new_id"
|
||||
|
||||
What: /sys/bus/usb/device/.../avoid_reset_quirk
|
||||
Date: December 2009
|
||||
Contact: Oliver Neukum <oliver@neukum.org>
|
||||
Description:
|
||||
Writing 1 to this file tells the kernel that this
|
||||
device will morph into another mode when it is reset.
|
||||
Drivers will not use reset for error handling for
|
||||
such devices.
|
||||
Users:
|
||||
usb_modeswitch
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/usb2_hardware_lpm
|
||||
Date: September 2011
|
||||
Contact: Andiry Xu <andiry.xu@amd.com>
|
||||
@@ -236,3 +147,30 @@ Description:
|
||||
This attribute is to expose these information to user space.
|
||||
The file will read "hotplug", "wired" and "not used" if the
|
||||
information is available, and "unknown" otherwise.
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/usb2_lpm_l1_timeout
|
||||
Date: May 2013
|
||||
Contact: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Description:
|
||||
USB 2.0 devices may support hardware link power management (LPM)
|
||||
L1 sleep state. The usb2_lpm_l1_timeout attribute allows
|
||||
tuning the timeout for L1 inactivity timer (LPM timer), e.g.
|
||||
needed inactivity time before host requests the device to go to L1 sleep.
|
||||
Useful for power management tuning.
|
||||
Supported values are 0 - 65535 microseconds.
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/usb2_lpm_besl
|
||||
Date: May 2013
|
||||
Contact: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Description:
|
||||
USB 2.0 devices that support hardware link power management (LPM)
|
||||
L1 sleep state now use a best effort service latency value (BESL) to
|
||||
indicate the best effort to resumption of service to the device after the
|
||||
initiation of the resume event.
|
||||
If the device does not have a preferred besl value then the host can select
|
||||
one instead. This usb2_lpm_besl attribute allows to tune the host selected besl
|
||||
value in order to tune power saving and service latency.
|
||||
|
||||
Supported values are 0 - 15.
|
||||
More information on how besl values map to microseconds can be found in
|
||||
USB 2.0 ECN Errata for Link Power Management, section 4.10)
|
||||
|
||||
@@ -78,3 +78,23 @@ Contact: Nishanth Menon <nm@ti.com>
|
||||
Description:
|
||||
The /sys/class/devfreq/.../available_governors shows
|
||||
currently available governors in the system.
|
||||
|
||||
What: /sys/class/devfreq/.../min_freq
|
||||
Date: January 2013
|
||||
Contact: MyungJoo Ham <myungjoo.ham@samsung.com>
|
||||
Description:
|
||||
The /sys/class/devfreq/.../min_freq shows and stores
|
||||
the minimum frequency requested by users. It is 0 if
|
||||
the user does not care. min_freq overrides the
|
||||
frequency requested by governors.
|
||||
|
||||
What: /sys/class/devfreq/.../max_freq
|
||||
Date: January 2013
|
||||
Contact: MyungJoo Ham <myungjoo.ham@samsung.com>
|
||||
Description:
|
||||
The /sys/class/devfreq/.../max_freq shows and stores
|
||||
the maximum frequency requested by users. It is 0 if
|
||||
the user does not care. max_freq overrides the
|
||||
frequency requested by governors and min_freq.
|
||||
The max_freq overrides min_freq because max_freq may be
|
||||
used to throttle devices to avoid overheating.
|
||||
|
||||
@@ -128,9 +128,8 @@ KernelVersion: 3.4
|
||||
Contact: linux-mtd@lists.infradead.org
|
||||
Description:
|
||||
Maximum number of bit errors that the device is capable of
|
||||
correcting within each region covering an ecc step. This will
|
||||
always be a non-negative integer. Note that some devices will
|
||||
have multiple ecc steps within each writesize region.
|
||||
correcting within each region covering an ECC step (see
|
||||
ecc_step_size). This will always be a non-negative integer.
|
||||
|
||||
In the case of devices lacking any ECC capability, it is 0.
|
||||
|
||||
@@ -173,3 +172,15 @@ Description:
|
||||
This is generally applicable only to NAND flash devices with ECC
|
||||
capability. It is ignored on devices lacking ECC capability;
|
||||
i.e., devices for which ecc_strength is zero.
|
||||
|
||||
What: /sys/class/mtd/mtdX/ecc_step_size
|
||||
Date: May 2013
|
||||
KernelVersion: 3.10
|
||||
Contact: linux-mtd@lists.infradead.org
|
||||
Description:
|
||||
The size of a single region covered by ECC, known as the ECC
|
||||
step. Devices may have several equally sized ECC steps within
|
||||
each writesize region.
|
||||
|
||||
It will always be a non-negative integer. In the case of
|
||||
devices lacking any ECC capability, it is 0.
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
What: /sys/class/pwm/
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
The pwm/ class sub-directory belongs to the Generic PWM
|
||||
Framework and provides a sysfs interface for using PWM
|
||||
channels.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
A /sys/class/pwm/pwmchipN directory is created for each
|
||||
probed PWM controller/chip where N is the base of the
|
||||
PWM chip.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/npwm
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
The number of PWM channels supported by the PWM chip.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/export
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Exports a PWM channel from the PWM chip for sysfs control.
|
||||
Value is between 0 and /sys/class/pwm/pwmchipN/npwm - 1.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/unexport
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Unexports a PWM channel.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
A /sys/class/pwm/pwmchipN/pwmX directory is created for
|
||||
each exported PWM channel where X is the exported PWM
|
||||
channel number.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX/period
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Sets the PWM signal period in nanoseconds.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX/duty_cycle
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Sets the PWM signal duty cycle in nanoseconds.
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX/polarity
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Sets the output polarity of the PWM signal to "normal" or
|
||||
"inversed".
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX/enable
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: H Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
Description:
|
||||
Enable/disable the PWM signal.
|
||||
0 is disabled
|
||||
1 is enabled
|
||||
@@ -36,3 +36,22 @@ Description:
|
||||
|
||||
Refer to [ECMA-368] section 10.3.1.1 for the value to
|
||||
use.
|
||||
|
||||
What: /sys/class/uwb_rc/uwbN/wusbhc/wusb_dnts
|
||||
Date: June 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Thomas Pugliese <thomas.pugliese@gmail.com>
|
||||
Description:
|
||||
The device notification time slot (DNTS) count and inverval in
|
||||
milliseconds that the WUSB host should use. This controls how
|
||||
often the devices will have the opportunity to send
|
||||
notifications to the host.
|
||||
|
||||
What: /sys/class/uwb_rc/uwbN/wusbhc/wusb_retry_count
|
||||
Date: June 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Thomas Pugliese <thomas.pugliese@gmail.com>
|
||||
Description:
|
||||
The number of retries that the WUSB host should attempt
|
||||
before reporting an error for a bus transaction. The range of
|
||||
valid values is [0..15], where 0 indicates infinite retries.
|
||||
|
||||
@@ -77,7 +77,7 @@ Description: Read/Write attribute file that controls memory scrubbing.
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/max_location
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file displays the information about the last
|
||||
available memory slot in this memory controller. It is used by
|
||||
@@ -85,7 +85,7 @@ Description: This attribute file displays the information about the last
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/size
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file will display the size of dimm or rank.
|
||||
For dimm*/size, this is the size, in MB of the DIMM memory
|
||||
@@ -96,14 +96,14 @@ Description: This attribute file will display the size of dimm or rank.
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_dev_type
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file will display what type of DRAM device is
|
||||
being utilized on this DIMM (x1, x2, x4, x8, ...).
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_edac_mode
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file will display what type of Error detection
|
||||
and correction is being utilized. For example: S4ECD4ED would
|
||||
@@ -111,7 +111,7 @@ Description: This attribute file will display what type of Error detection
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_label
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This control file allows this DIMM to have a label assigned
|
||||
to it. With this label in the module, when errors occur
|
||||
@@ -126,14 +126,14 @@ Description: This control file allows this DIMM to have a label assigned
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_location
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file will display the location (csrow/channel,
|
||||
branch/channel/slot or channel/slot) of the dimm or rank.
|
||||
|
||||
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_mem_type
|
||||
Date: April 2012
|
||||
Contact: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
linux-edac@vger.kernel.org
|
||||
Description: This attribute file will display what type of memory is
|
||||
currently on this csrow. Normally, either buffered or
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
What: /sys/devices/.../online
|
||||
Date: April 2013
|
||||
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Description:
|
||||
The /sys/devices/.../online attribute is only present for
|
||||
devices whose bus types provide .online() and .offline()
|
||||
callbacks. The number read from it (0 or 1) reflects the value
|
||||
of the device's 'offline' field. If that number is 1 and '0'
|
||||
(or 'n', or 'N') is written to this file, the device bus type's
|
||||
.offline() callback is executed for the device and (if
|
||||
successful) its 'offline' field is updated accordingly. In
|
||||
turn, if that number is 0 and '1' (or 'y', or 'Y') is written to
|
||||
this file, the device bus type's .online() callback is executed
|
||||
for the device and (if successful) its 'offline' field is
|
||||
updated as appropriate.
|
||||
|
||||
After a successful execution of the bus type's .offline()
|
||||
callback the device cannot be used for any purpose until either
|
||||
it is removed (i.e. device_del() is called for it), or its bus
|
||||
type's .online() is exeucted successfully.
|
||||
@@ -1,4 +1,4 @@
|
||||
Whatt: /sys/devices/.../sun
|
||||
What: /sys/devices/.../sun
|
||||
Date: October 2012
|
||||
Contact: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
|
||||
Description:
|
||||
|
||||
@@ -144,6 +144,21 @@ Description: Discover and change clock speed of CPUs
|
||||
to learn how to control the knobs.
|
||||
|
||||
|
||||
What: /sys/devices/system/cpu/cpu#/cpufreq/freqdomain_cpus
|
||||
Date: June 2013
|
||||
Contact: cpufreq@vger.kernel.org
|
||||
Description: Discover CPUs in the same CPU frequency coordination domain
|
||||
|
||||
freqdomain_cpus is the list of CPUs (online+offline) that share
|
||||
the same clock/freq domain (possibly at the hardware level).
|
||||
That information may be hidden from the cpufreq core and the
|
||||
value of related_cpus may be different from freqdomain_cpus. This
|
||||
attribute is useful for user space DVFS controllers to get better
|
||||
power/performance results for platforms using acpi-cpufreq.
|
||||
|
||||
This file is only present if the acpi-cpufreq driver is in use.
|
||||
|
||||
|
||||
What: /sys/devices/system/cpu/cpu*/cache/index3/cache_disable_{0,1}
|
||||
Date: August 2008
|
||||
KernelVersion: 2.6.27
|
||||
|
||||
@@ -12,7 +12,7 @@ Description: Make it possible to set/get current led state. Reading from it
|
||||
What: /sys/bus/hid/drivers/wiimote/<dev>/extension
|
||||
Date: August 2011
|
||||
KernelVersion: 3.2
|
||||
Contact: David Herrmann <dh.herrmann@googlemail.com>
|
||||
Contact: David Herrmann <dh.herrmann@gmail.com>
|
||||
Description: This file contains the currently connected and initialized
|
||||
extensions. It can be one of: none, motionp, nunchuck, classic,
|
||||
motionp+nunchuck, motionp+classic
|
||||
@@ -20,3 +20,40 @@ Description: This file contains the currently connected and initialized
|
||||
the official Nintendo Nunchuck extension and classic is the
|
||||
Nintendo Classic Controller extension. The motionp extension can
|
||||
be combined with the other two.
|
||||
Starting with kernel-version 3.11 Motion Plus hotplugging is
|
||||
supported and if detected, it's no longer reported as static
|
||||
extension. You will get uevent notifications for the motion-plus
|
||||
device then.
|
||||
|
||||
What: /sys/bus/hid/drivers/wiimote/<dev>/devtype
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: David Herrmann <dh.herrmann@gmail.com>
|
||||
Description: While a device is initialized by the wiimote driver, we perform
|
||||
a device detection and signal a "change" uevent after it is
|
||||
done. This file shows the detected device type. "pending" means
|
||||
that the detection is still ongoing, "unknown" means, that the
|
||||
device couldn't be detected or loaded. "generic" means, that the
|
||||
device couldn't be detected but supports basic Wii Remote
|
||||
features and can be used.
|
||||
Other strings for each device-type are available and may be
|
||||
added if new device-specific detections are added.
|
||||
Currently supported are:
|
||||
gen10: First Wii Remote generation
|
||||
gen20: Second Wii Remote Plus generation (builtin MP)
|
||||
balanceboard: Wii Balance Board
|
||||
|
||||
What: /sys/bus/hid/drivers/wiimote/<dev>/bboard_calib
|
||||
Date: May 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: David Herrmann <dh.herrmann@gmail.com>
|
||||
Description: This attribute is only provided if the device was detected as a
|
||||
balance board. It provides a single line with 3 calibration
|
||||
values for all 4 sensors. The values are separated by colons and
|
||||
are each 2 bytes long (encoded as 4 digit hexadecimal value).
|
||||
First, 0kg values for all 4 sensors are written, followed by the
|
||||
17kg values for all 4 sensors and last the 34kg values for all 4
|
||||
sensors.
|
||||
Calibration data is already applied by the kernel to all input
|
||||
values but may be used by user-space to perform other
|
||||
transformations.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
What: /sys/bus/acpi/intel-rapid-start/wakeup_events
|
||||
Date: July 2, 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
Description: An integer representing a set of wakeup events as follows:
|
||||
1: Wake to enter hibernation when the wakeup timer expires
|
||||
2: Wake to enter hibernation when the battery reaches a
|
||||
critical level
|
||||
|
||||
These values are ORed together. For example, a value of 3
|
||||
indicates that the system will wake to enter hibernation when
|
||||
either the wakeup timer expires or the battery reaches a
|
||||
critical level.
|
||||
|
||||
What: /sys/bus/acpi/intel-rapid-start/wakeup_time
|
||||
Date: July 2, 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
Description: An integer representing the length of time the system will
|
||||
remain asleep before waking up to enter hibernation.
|
||||
This value is in minutes.
|
||||
@@ -0,0 +1,17 @@
|
||||
What: /sys/module/xen_blkback/parameters/max_buffer_pages
|
||||
Date: March 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Roger Pau Monné <roger.pau@citrix.com>
|
||||
Description:
|
||||
Maximum number of free pages to keep in each block
|
||||
backend buffer.
|
||||
|
||||
What: /sys/module/xen_blkback/parameters/max_persistent_grants
|
||||
Date: March 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Roger Pau Monné <roger.pau@citrix.com>
|
||||
Description:
|
||||
Maximum number of grants to map persistently in
|
||||
blkback. If the frontend tries to use more than
|
||||
max_persistent_grants, the LRU kicks in and starts
|
||||
removing 5% of max_persistent_grants every 100ms.
|
||||
@@ -0,0 +1,10 @@
|
||||
What: /sys/module/xen_blkfront/parameters/max
|
||||
Date: June 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Description:
|
||||
Maximum number of segments that the frontend will negotiate
|
||||
with the backend for indirect descriptors. The default value
|
||||
is 32 - higher value means more potential throughput but more
|
||||
memory usage. The backend picks the minimum of the frontend
|
||||
and its default backend value.
|
||||
@@ -44,6 +44,16 @@ Description:
|
||||
or 0 (unset). Attempts to write any other values to it will
|
||||
cause -EINVAL to be returned.
|
||||
|
||||
What: /sys/firmware/acpi/hotplug/force_remove
|
||||
Date: May 2013
|
||||
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Description:
|
||||
The number in this file (0 or 1) determines whether (1) or not
|
||||
(0) the ACPI subsystem will allow devices to be hot-removed even
|
||||
if they cannot be put offline gracefully (from the kernel's
|
||||
viewpoint). That number can be changed by writing a boolean
|
||||
value to this file.
|
||||
|
||||
What: /sys/firmware/acpi/interrupts/
|
||||
Date: February 2008
|
||||
Contact: Len Brown <lenb@kernel.org>
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
What: /sys/fs/f2fs/<disk>/gc_max_sleep_time
|
||||
Date: July 2013
|
||||
Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
|
||||
Description:
|
||||
Controls the maximun sleep time for gc_thread. Time
|
||||
is in milliseconds.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/gc_min_sleep_time
|
||||
Date: July 2013
|
||||
Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
|
||||
Description:
|
||||
Controls the minimum sleep time for gc_thread. Time
|
||||
is in milliseconds.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/gc_no_gc_sleep_time
|
||||
Date: July 2013
|
||||
Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
|
||||
Description:
|
||||
Controls the default sleep time for gc_thread. Time
|
||||
is in milliseconds.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/gc_idle
|
||||
Date: July 2013
|
||||
Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
|
||||
Description:
|
||||
Controls the victim selection policy for garbage collection.
|
||||
@@ -389,7 +389,8 @@ Albeit deprecated by some people, the equivalent of the goto statement is
|
||||
used frequently by compilers in form of the unconditional jump instruction.
|
||||
|
||||
The goto statement comes in handy when a function exits from multiple
|
||||
locations and some common work such as cleanup has to be done.
|
||||
locations and some common work such as cleanup has to be done. If there is no
|
||||
cleanup needed then just return directly.
|
||||
|
||||
The rationale is:
|
||||
|
||||
|
||||
@@ -127,14 +127,11 @@
|
||||
!Finclude/net/cfg80211.h cfg80211_ibss_params
|
||||
!Finclude/net/cfg80211.h cfg80211_connect_params
|
||||
!Finclude/net/cfg80211.h cfg80211_pmksa
|
||||
!Finclude/net/cfg80211.h cfg80211_send_rx_auth
|
||||
!Finclude/net/cfg80211.h cfg80211_send_auth_timeout
|
||||
!Finclude/net/cfg80211.h cfg80211_send_rx_assoc
|
||||
!Finclude/net/cfg80211.h cfg80211_send_assoc_timeout
|
||||
!Finclude/net/cfg80211.h cfg80211_send_deauth
|
||||
!Finclude/net/cfg80211.h __cfg80211_send_deauth
|
||||
!Finclude/net/cfg80211.h cfg80211_send_disassoc
|
||||
!Finclude/net/cfg80211.h __cfg80211_send_disassoc
|
||||
!Finclude/net/cfg80211.h cfg80211_rx_mlme_mgmt
|
||||
!Finclude/net/cfg80211.h cfg80211_auth_timeout
|
||||
!Finclude/net/cfg80211.h cfg80211_rx_assoc_resp
|
||||
!Finclude/net/cfg80211.h cfg80211_assoc_timeout
|
||||
!Finclude/net/cfg80211.h cfg80211_tx_mlme_mgmt
|
||||
!Finclude/net/cfg80211.h cfg80211_ibss_joined
|
||||
!Finclude/net/cfg80211.h cfg80211_connect_result
|
||||
!Finclude/net/cfg80211.h cfg80211_roamed
|
||||
@@ -328,6 +325,7 @@
|
||||
<title>functions/definitions</title>
|
||||
!Finclude/net/mac80211.h ieee80211_rx_status
|
||||
!Finclude/net/mac80211.h mac80211_rx_flags
|
||||
!Finclude/net/mac80211.h mac80211_tx_info_flags
|
||||
!Finclude/net/mac80211.h mac80211_tx_control_flags
|
||||
!Finclude/net/mac80211.h mac80211_rate_control_flags
|
||||
!Finclude/net/mac80211.h ieee80211_tx_rate
|
||||
|
||||
@@ -84,7 +84,7 @@ X!Iinclude/linux/kobject.h
|
||||
|
||||
<sect1><title>Kernel utility functions</title>
|
||||
!Iinclude/linux/kernel.h
|
||||
!Ekernel/printk.c
|
||||
!Ekernel/printk/printk.c
|
||||
!Ekernel/panic.c
|
||||
!Ekernel/sys.c
|
||||
!Ekernel/rcupdate.c
|
||||
@@ -126,6 +126,8 @@ X!Edrivers/base/interface.c
|
||||
</sect1>
|
||||
<sect1><title>Device Drivers DMA Management</title>
|
||||
!Edrivers/base/dma-buf.c
|
||||
!Edrivers/base/reservation.c
|
||||
!Iinclude/linux/reservation.h
|
||||
!Edrivers/base/dma-coherent.c
|
||||
!Edrivers/base/dma-mapping.c
|
||||
</sect1>
|
||||
@@ -297,10 +299,10 @@ KAO -->
|
||||
</sect1>
|
||||
<sect1><title>Frame Buffer Fonts</title>
|
||||
<para>
|
||||
Refer to the file drivers/video/console/fonts.c for more information.
|
||||
Refer to the file lib/fonts/fonts.c for more information.
|
||||
</para>
|
||||
<!-- FIXME: Removed for now since no structured comments in source
|
||||
X!Idrivers/video/console/fonts.c
|
||||
X!Ilib/fonts/fonts.c
|
||||
-->
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
+319
-96
@@ -155,13 +155,6 @@
|
||||
will become a fatal error.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_USE_MTRR</term>
|
||||
<listitem><para>
|
||||
Driver uses MTRR interface for mapping memory, the DRM core will
|
||||
manage MTRR resources. Deprecated.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_PCI_DMA</term>
|
||||
<listitem><para>
|
||||
@@ -186,35 +179,14 @@
|
||||
<varlistentry>
|
||||
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
||||
<listitem><para>
|
||||
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler. The
|
||||
DRM core will automatically register an interrupt handler when the
|
||||
flag is set. DRIVER_IRQ_SHARED indicates whether the device &
|
||||
handler support shared IRQs (note that this is required of PCI
|
||||
drivers).
|
||||
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler
|
||||
managed by the DRM Core. The core will support simple IRQ handler
|
||||
installation when the flag is set. The installation process is
|
||||
described in <xref linkend="drm-irq-registration"/>.</para>
|
||||
<para>DRIVER_IRQ_SHARED indicates whether the device & handler
|
||||
support shared IRQs (note that this is required of PCI drivers).
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_IRQ_VBL</term>
|
||||
<listitem><para>Unused. Deprecated.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_DMA_QUEUE</term>
|
||||
<listitem><para>
|
||||
Should be set if the driver queues DMA requests and completes them
|
||||
asynchronously. Deprecated.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_FB_DMA</term>
|
||||
<listitem><para>
|
||||
Driver supports DMA to/from the framebuffer, mapping of frambuffer
|
||||
DMA buffers to userspace will be supported. Deprecated.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_IRQ_VBL2</term>
|
||||
<listitem><para>Unused. Deprecated.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_GEM</term>
|
||||
<listitem><para>
|
||||
@@ -233,6 +205,12 @@
|
||||
Driver implements DRM PRIME buffer sharing.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRIVER_RENDER</term>
|
||||
<listitem><para>
|
||||
Driver supports dedicated render nodes.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect3>
|
||||
<sect3>
|
||||
@@ -344,50 +322,71 @@ char *date;</synopsis>
|
||||
The DRM core tries to facilitate IRQ handler registration and
|
||||
unregistration by providing <function>drm_irq_install</function> and
|
||||
<function>drm_irq_uninstall</function> functions. Those functions only
|
||||
support a single interrupt per device.
|
||||
</para>
|
||||
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
||||
<para>
|
||||
Both functions get the device IRQ by calling
|
||||
<function>drm_dev_to_irq</function>. This inline function will call a
|
||||
bus-specific operation to retrieve the IRQ number. For platform devices,
|
||||
<function>platform_get_irq</function>(..., 0) is used to retrieve the
|
||||
IRQ number.
|
||||
</para>
|
||||
<para>
|
||||
<function>drm_irq_install</function> starts by calling the
|
||||
<methodname>irq_preinstall</methodname> driver operation. The operation
|
||||
is optional and must make sure that the interrupt will not get fired by
|
||||
clearing all pending interrupt flags or disabling the interrupt.
|
||||
</para>
|
||||
<para>
|
||||
The IRQ will then be requested by a call to
|
||||
<function>request_irq</function>. If the DRIVER_IRQ_SHARED driver
|
||||
feature flag is set, a shared (IRQF_SHARED) IRQ handler will be
|
||||
requested.
|
||||
</para>
|
||||
<para>
|
||||
The IRQ handler function must be provided as the mandatory irq_handler
|
||||
driver operation. It will get passed directly to
|
||||
<function>request_irq</function> and thus has the same prototype as all
|
||||
IRQ handlers. It will get called with a pointer to the DRM device as the
|
||||
second argument.
|
||||
</para>
|
||||
<para>
|
||||
Finally the function calls the optional
|
||||
<methodname>irq_postinstall</methodname> driver operation. The operation
|
||||
usually enables interrupts (excluding the vblank interrupt, which is
|
||||
enabled separately), but drivers may choose to enable/disable interrupts
|
||||
at a different time.
|
||||
</para>
|
||||
<para>
|
||||
<function>drm_irq_uninstall</function> is similarly used to uninstall an
|
||||
IRQ handler. It starts by waking up all processes waiting on a vblank
|
||||
interrupt to make sure they don't hang, and then calls the optional
|
||||
<methodname>irq_uninstall</methodname> driver operation. The operation
|
||||
must disable all hardware interrupts. Finally the function frees the IRQ
|
||||
by calling <function>free_irq</function>.
|
||||
support a single interrupt per device, devices that use more than one
|
||||
IRQs need to be handled manually.
|
||||
</para>
|
||||
<sect4>
|
||||
<title>Managed IRQ Registration</title>
|
||||
<para>
|
||||
Both the <function>drm_irq_install</function> and
|
||||
<function>drm_irq_uninstall</function> functions get the device IRQ by
|
||||
calling <function>drm_dev_to_irq</function>. This inline function will
|
||||
call a bus-specific operation to retrieve the IRQ number. For platform
|
||||
devices, <function>platform_get_irq</function>(..., 0) is used to
|
||||
retrieve the IRQ number.
|
||||
</para>
|
||||
<para>
|
||||
<function>drm_irq_install</function> starts by calling the
|
||||
<methodname>irq_preinstall</methodname> driver operation. The operation
|
||||
is optional and must make sure that the interrupt will not get fired by
|
||||
clearing all pending interrupt flags or disabling the interrupt.
|
||||
</para>
|
||||
<para>
|
||||
The IRQ will then be requested by a call to
|
||||
<function>request_irq</function>. If the DRIVER_IRQ_SHARED driver
|
||||
feature flag is set, a shared (IRQF_SHARED) IRQ handler will be
|
||||
requested.
|
||||
</para>
|
||||
<para>
|
||||
The IRQ handler function must be provided as the mandatory irq_handler
|
||||
driver operation. It will get passed directly to
|
||||
<function>request_irq</function> and thus has the same prototype as all
|
||||
IRQ handlers. It will get called with a pointer to the DRM device as the
|
||||
second argument.
|
||||
</para>
|
||||
<para>
|
||||
Finally the function calls the optional
|
||||
<methodname>irq_postinstall</methodname> driver operation. The operation
|
||||
usually enables interrupts (excluding the vblank interrupt, which is
|
||||
enabled separately), but drivers may choose to enable/disable interrupts
|
||||
at a different time.
|
||||
</para>
|
||||
<para>
|
||||
<function>drm_irq_uninstall</function> is similarly used to uninstall an
|
||||
IRQ handler. It starts by waking up all processes waiting on a vblank
|
||||
interrupt to make sure they don't hang, and then calls the optional
|
||||
<methodname>irq_uninstall</methodname> driver operation. The operation
|
||||
must disable all hardware interrupts. Finally the function frees the IRQ
|
||||
by calling <function>free_irq</function>.
|
||||
</para>
|
||||
</sect4>
|
||||
<sect4>
|
||||
<title>Manual IRQ Registration</title>
|
||||
<para>
|
||||
Drivers that require multiple interrupt handlers can't use the managed
|
||||
IRQ registration functions. In that case IRQs must be registered and
|
||||
unregistered manually (usually with the <function>request_irq</function>
|
||||
and <function>free_irq</function> functions, or their devm_* equivalent).
|
||||
</para>
|
||||
<para>
|
||||
When manually registering IRQs, drivers must not set the DRIVER_HAVE_IRQ
|
||||
driver feature flag, and must not provide the
|
||||
<methodname>irq_handler</methodname> driver operation. They must set the
|
||||
<structname>drm_device</structname> <structfield>irq_enabled</structfield>
|
||||
field to 1 upon registration of the IRQs, and clear it to 0 after
|
||||
unregistering the IRQs.
|
||||
</para>
|
||||
</sect4>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>Memory Manager Initialization</title>
|
||||
@@ -434,7 +433,7 @@ char *date;</synopsis>
|
||||
The DRM core includes two memory managers, namely Translation Table Maps
|
||||
(TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory
|
||||
manager to be developed and tried to be a one-size-fits-them all
|
||||
solution. It provides a single userspace API to accomodate the need of
|
||||
solution. It provides a single userspace API to accommodate the need of
|
||||
all hardware, supporting both Unified Memory Architecture (UMA) devices
|
||||
and devices with dedicated video RAM (i.e. most discrete video cards).
|
||||
This resulted in a large, complex piece of code that turned out to be
|
||||
@@ -701,7 +700,7 @@ char *date;</synopsis>
|
||||
<para>
|
||||
Similar to global names, GEM file descriptors are also used to share GEM
|
||||
objects across processes. They offer additional security: as file
|
||||
descriptors must be explictly sent over UNIX domain sockets to be shared
|
||||
descriptors must be explicitly sent over UNIX domain sockets to be shared
|
||||
between applications, they can't be guessed like the globally unique GEM
|
||||
names.
|
||||
</para>
|
||||
@@ -1154,7 +1153,7 @@ int max_width, max_height;</synopsis>
|
||||
</para>
|
||||
<para>
|
||||
The <methodname>page_flip</methodname> operation schedules a page flip.
|
||||
Once any pending rendering targetting the new frame buffer has
|
||||
Once any pending rendering targeting the new frame buffer has
|
||||
completed, the CRTC will be reprogrammed to display that frame buffer
|
||||
after the next vertical refresh. The operation must return immediately
|
||||
without waiting for rendering or page flip to complete and must block
|
||||
@@ -1213,6 +1212,15 @@ int max_width, max_height;</synopsis>
|
||||
<sect4>
|
||||
<title>Miscellaneous</title>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>void (*set_property)(struct drm_crtc *crtc,
|
||||
struct drm_property *property, uint64_t value);</synopsis>
|
||||
<para>
|
||||
Set the value of the given CRTC property to
|
||||
<parameter>value</parameter>. See <xref linkend="drm-kms-properties"/>
|
||||
for more information about properties.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
|
||||
uint32_t start, uint32_t size);</synopsis>
|
||||
@@ -1363,6 +1371,15 @@ int max_width, max_height;</synopsis>
|
||||
<xref linkend="drm-kms-init"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>void (*set_property)(struct drm_plane *plane,
|
||||
struct drm_property *property, uint64_t value);</synopsis>
|
||||
<para>
|
||||
Set the value of the given plane property to
|
||||
<parameter>value</parameter>. See <xref linkend="drm-kms-properties"/>
|
||||
for more information about properties.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
</sect2>
|
||||
@@ -1571,6 +1588,15 @@ int max_width, max_height;</synopsis>
|
||||
<sect4>
|
||||
<title>Miscellaneous</title>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>void (*set_property)(struct drm_connector *connector,
|
||||
struct drm_property *property, uint64_t value);</synopsis>
|
||||
<para>
|
||||
Set the value of the given connector property to
|
||||
<parameter>value</parameter>. See <xref linkend="drm-kms-properties"/>
|
||||
for more information about properties.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>void (*destroy)(struct drm_connector *connector);</synopsis>
|
||||
<para>
|
||||
@@ -1846,10 +1872,6 @@ void intel_crt_init(struct drm_device *dev)
|
||||
<synopsis>bool (*mode_fixup)(struct drm_encoder *encoder,
|
||||
const struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode);</synopsis>
|
||||
<note><para>
|
||||
FIXME: The mode argument be const, but the i915 driver modifies
|
||||
mode->clock in <function>intel_dp_mode_fixup</function>.
|
||||
</para></note>
|
||||
<para>
|
||||
Let encoders adjust the requested mode or reject it completely. This
|
||||
operation returns true if the mode is accepted (possibly after being
|
||||
@@ -2161,6 +2183,140 @@ void intel_crt_init(struct drm_device *dev)
|
||||
<title>EDID Helper Functions Reference</title>
|
||||
!Edrivers/gpu/drm/drm_edid.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Rectangle Utilities Reference</title>
|
||||
!Pinclude/drm/drm_rect.h rect utils
|
||||
!Iinclude/drm/drm_rect.h
|
||||
!Edrivers/gpu/drm/drm_rect.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Flip-work Helper Reference</title>
|
||||
!Pinclude/drm/drm_flip_work.h flip utils
|
||||
!Iinclude/drm/drm_flip_work.h
|
||||
!Edrivers/gpu/drm/drm_flip_work.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>VMA Offset Manager</title>
|
||||
!Pdrivers/gpu/drm/drm_vma_manager.c vma offset manager
|
||||
!Edrivers/gpu/drm/drm_vma_manager.c
|
||||
!Iinclude/drm/drm_vma_manager.h
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: kms properties -->
|
||||
|
||||
<sect1 id="drm-kms-properties">
|
||||
<title>KMS Properties</title>
|
||||
<para>
|
||||
Drivers may need to expose additional parameters to applications than
|
||||
those described in the previous sections. KMS supports attaching
|
||||
properties to CRTCs, connectors and planes and offers a userspace API to
|
||||
list, get and set the property values.
|
||||
</para>
|
||||
<para>
|
||||
Properties are identified by a name that uniquely defines the property
|
||||
purpose, and store an associated value. For all property types except blob
|
||||
properties the value is a 64-bit unsigned integer.
|
||||
</para>
|
||||
<para>
|
||||
KMS differentiates between properties and property instances. Drivers
|
||||
first create properties and then create and associate individual instances
|
||||
of those properties to objects. A property can be instantiated multiple
|
||||
times and associated with different objects. Values are stored in property
|
||||
instances, and all other property information are stored in the propery
|
||||
and shared between all instances of the property.
|
||||
</para>
|
||||
<para>
|
||||
Every property is created with a type that influences how the KMS core
|
||||
handles the property. Supported property types are
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>DRM_MODE_PROP_RANGE</term>
|
||||
<listitem><para>Range properties report their minimum and maximum
|
||||
admissible values. The KMS core verifies that values set by
|
||||
application fit in that range.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRM_MODE_PROP_ENUM</term>
|
||||
<listitem><para>Enumerated properties take a numerical value that
|
||||
ranges from 0 to the number of enumerated values defined by the
|
||||
property minus one, and associate a free-formed string name to each
|
||||
value. Applications can retrieve the list of defined value-name pairs
|
||||
and use the numerical value to get and set property instance values.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRM_MODE_PROP_BITMASK</term>
|
||||
<listitem><para>Bitmask properties are enumeration properties that
|
||||
additionally restrict all enumerated values to the 0..63 range.
|
||||
Bitmask property instance values combine one or more of the
|
||||
enumerated bits defined by the property.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>DRM_MODE_PROP_BLOB</term>
|
||||
<listitem><para>Blob properties store a binary blob without any format
|
||||
restriction. The binary blobs are created as KMS standalone objects,
|
||||
and blob property instance values store the ID of their associated
|
||||
blob object.</para>
|
||||
<para>Blob properties are only used for the connector EDID property
|
||||
and cannot be created by drivers.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
<para>
|
||||
To create a property drivers call one of the following functions depending
|
||||
on the property type. All property creation functions take property flags
|
||||
and name, as well as type-specific arguments.
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
|
||||
const char *name,
|
||||
uint64_t min, uint64_t max);</synopsis>
|
||||
<para>Create a range property with the given minimum and maximum
|
||||
values.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags,
|
||||
const char *name,
|
||||
const struct drm_prop_enum_list *props,
|
||||
int num_values);</synopsis>
|
||||
<para>Create an enumerated property. The <parameter>props</parameter>
|
||||
argument points to an array of <parameter>num_values</parameter>
|
||||
value-name pairs.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
|
||||
int flags, const char *name,
|
||||
const struct drm_prop_enum_list *props,
|
||||
int num_values);</synopsis>
|
||||
<para>Create a bitmask property. The <parameter>props</parameter>
|
||||
argument points to an array of <parameter>num_values</parameter>
|
||||
value-name pairs.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
Properties can additionally be created as immutable, in which case they
|
||||
will be read-only for applications but can be modified by the driver. To
|
||||
create an immutable property drivers must set the DRM_MODE_PROP_IMMUTABLE
|
||||
flag at property creation time.
|
||||
</para>
|
||||
<para>
|
||||
When no array of value-name pairs is readily available at property
|
||||
creation time for enumerated or range properties, drivers can create
|
||||
the property using the <function>drm_property_create</function> function
|
||||
and manually add enumeration value-name pairs by calling the
|
||||
<function>drm_property_add_enum</function> function. Care must be taken to
|
||||
properly specify the property type through the <parameter>flags</parameter>
|
||||
argument.
|
||||
</para>
|
||||
<para>
|
||||
After creating properties drivers can attach property instances to CRTC,
|
||||
connector and plane objects by calling the
|
||||
<function>drm_object_attach_property</function>. The function takes a
|
||||
pointer to the target object, a pointer to the previously created property
|
||||
and an initial instance value.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: vertical blanking -->
|
||||
@@ -2255,18 +2411,18 @@ void (*postclose) (struct drm_device *, struct drm_file *);</synopsis>
|
||||
</abstract>
|
||||
<para>
|
||||
The <methodname>firstopen</methodname> method is called by the DRM core
|
||||
when an application opens a device that has no other opened file handle.
|
||||
Similarly the <methodname>lastclose</methodname> method is called when
|
||||
the last application holding a file handle opened on the device closes
|
||||
it. Both methods are mostly used for UMS (User Mode Setting) drivers to
|
||||
acquire and release device resources which should be done in the
|
||||
<methodname>load</methodname> and <methodname>unload</methodname>
|
||||
methods for KMS drivers.
|
||||
for legacy UMS (User Mode Setting) drivers only when an application
|
||||
opens a device that has no other opened file handle. UMS drivers can
|
||||
implement it to acquire device resources. KMS drivers can't use the
|
||||
method and must acquire resources in the <methodname>load</methodname>
|
||||
method instead.
|
||||
</para>
|
||||
<para>
|
||||
Note that the <methodname>lastclose</methodname> method is also called
|
||||
at module unload time or, for hot-pluggable devices, when the device is
|
||||
unplugged. The <methodname>firstopen</methodname> and
|
||||
Similarly the <methodname>lastclose</methodname> method is called when
|
||||
the last application holding a file handle opened on the device closes
|
||||
it, for both UMS and KMS drivers. Additionally, the method is also
|
||||
called at module unload time or, for hot-pluggable devices, when the
|
||||
device is unplugged. The <methodname>firstopen</methodname> and
|
||||
<methodname>lastclose</methodname> calls can thus be unbalanced.
|
||||
</para>
|
||||
<para>
|
||||
@@ -2295,7 +2451,12 @@ void (*postclose) (struct drm_device *, struct drm_file *);</synopsis>
|
||||
<para>
|
||||
The <methodname>lastclose</methodname> method should restore CRTC and
|
||||
plane properties to default value, so that a subsequent open of the
|
||||
device will not inherit state from the previous user.
|
||||
device will not inherit state from the previous user. It can also be
|
||||
used to execute delayed power switching state changes, e.g. in
|
||||
conjunction with the vga-switcheroo infrastructure. Beyond that KMS
|
||||
drivers should not do any further cleanup. Only legacy UMS drivers might
|
||||
need to clean up device state so that the vga console or an independent
|
||||
fbdev driver could take over.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
@@ -2331,7 +2492,6 @@ void (*postclose) (struct drm_device *, struct drm_file *);</synopsis>
|
||||
<programlisting>
|
||||
.poll = drm_poll,
|
||||
.read = drm_read,
|
||||
.fasync = drm_fasync,
|
||||
.llseek = no_llseek,
|
||||
</programlisting>
|
||||
</para>
|
||||
@@ -2490,6 +2650,69 @@ int (*resume) (struct drm_device *);</synopsis>
|
||||
info, since man pages should cover the rest.
|
||||
</para>
|
||||
|
||||
<!-- External: render nodes -->
|
||||
|
||||
<sect1>
|
||||
<title>Render nodes</title>
|
||||
<para>
|
||||
DRM core provides multiple character-devices for user-space to use.
|
||||
Depending on which device is opened, user-space can perform a different
|
||||
set of operations (mainly ioctls). The primary node is always created
|
||||
and called <term>card<num></term>. Additionally, a currently
|
||||
unused control node, called <term>controlD<num></term> is also
|
||||
created. The primary node provides all legacy operations and
|
||||
historically was the only interface used by userspace. With KMS, the
|
||||
control node was introduced. However, the planned KMS control interface
|
||||
has never been written and so the control node stays unused to date.
|
||||
</para>
|
||||
<para>
|
||||
With the increased use of offscreen renderers and GPGPU applications,
|
||||
clients no longer require running compositors or graphics servers to
|
||||
make use of a GPU. But the DRM API required unprivileged clients to
|
||||
authenticate to a DRM-Master prior to getting GPU access. To avoid this
|
||||
step and to grant clients GPU access without authenticating, render
|
||||
nodes were introduced. Render nodes solely serve render clients, that
|
||||
is, no modesetting or privileged ioctls can be issued on render nodes.
|
||||
Only non-global rendering commands are allowed. If a driver supports
|
||||
render nodes, it must advertise it via the <term>DRIVER_RENDER</term>
|
||||
DRM driver capability. If not supported, the primary node must be used
|
||||
for render clients together with the legacy drmAuth authentication
|
||||
procedure.
|
||||
</para>
|
||||
<para>
|
||||
If a driver advertises render node support, DRM core will create a
|
||||
separate render node called <term>renderD<num></term>. There will
|
||||
be one render node per device. No ioctls except PRIME-related ioctls
|
||||
will be allowed on this node. Especially <term>GEM_OPEN</term> will be
|
||||
explicitly prohibited. Render nodes are designed to avoid the
|
||||
buffer-leaks, which occur if clients guess the flink names or mmap
|
||||
offsets on the legacy interface. Additionally to this basic interface,
|
||||
drivers must mark their driver-dependent render-only ioctls as
|
||||
<term>DRM_RENDER_ALLOW</term> so render clients can use them. Driver
|
||||
authors must be careful not to allow any privileged ioctls on render
|
||||
nodes.
|
||||
</para>
|
||||
<para>
|
||||
With render nodes, user-space can now control access to the render node
|
||||
via basic file-system access-modes. A running graphics server which
|
||||
authenticates clients on the privileged primary/legacy node is no longer
|
||||
required. Instead, a client can open the render node and is immediately
|
||||
granted GPU access. Communication between clients (or servers) is done
|
||||
via PRIME. FLINK from render node to legacy node is not supported. New
|
||||
clients must not use the insecure FLINK interface.
|
||||
</para>
|
||||
<para>
|
||||
Besides dropping all modeset/global ioctls, render nodes also drop the
|
||||
DRM-Master concept. There is no reason to associate render clients with
|
||||
a DRM-Master as they are independent of any graphics server. Besides,
|
||||
they must work without any running master, anyway.
|
||||
Drivers must be able to run without a master object if they support
|
||||
render nodes. If, on the other hand, a driver requires shared state
|
||||
between clients which is visible to user-space and accessible beyond
|
||||
open-file boundaries, they cannot support render nodes.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<!-- External: vblank handling -->
|
||||
|
||||
<sect1>
|
||||
|
||||
@@ -464,6 +464,19 @@ if (desc->irq_data.chip->irq_eoi)
|
||||
protected via desc->lock, by the generic layer.
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<chapter id="genericchip">
|
||||
<title>Generic interrupt chip</title>
|
||||
<para>
|
||||
To avoid copies of identical implementations of irq chips the
|
||||
core provides a configurable generic interrupt chip
|
||||
implementation. Developers should check carefuly whether the
|
||||
generic chip fits their needs before implementing the same
|
||||
functionality slightly different themself.
|
||||
</para>
|
||||
!Ekernel/irq/generic-chip.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="structs">
|
||||
<title>Structures</title>
|
||||
<para>
|
||||
|
||||
@@ -1955,12 +1955,17 @@ machines due to caching.
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="apiref">
|
||||
<chapter id="apiref-mutex">
|
||||
<title>Mutex API reference</title>
|
||||
!Iinclude/linux/mutex.h
|
||||
!Ekernel/mutex.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="apiref-futex">
|
||||
<title>Futex API reference</title>
|
||||
!Ikernel/futex.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="references">
|
||||
<title>Further reading</title>
|
||||
|
||||
|
||||
@@ -233,7 +233,7 @@ typedef enum fe_status {
|
||||
<entry align="char">The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable</entry>
|
||||
</row><row>
|
||||
<entry align="char">FE_HAS_SYNC</entry>
|
||||
<entry align="char">Syncronization bytes was found</entry>
|
||||
<entry align="char">Synchronization bytes was found</entry>
|
||||
</row><row>
|
||||
<entry align="char">FE_HAS_LOCK</entry>
|
||||
<entry align="char">The DVB were locked and everything is working</entry>
|
||||
|
||||
@@ -2254,7 +2254,7 @@ video encoding.</para>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>The <constant>VIDIOC_G_CHIP_IDENT</constant> ioctl was renamed
|
||||
to <constant>VIDIOC_G_CHIP_IDENT_OLD</constant> and &VIDIOC-DBG-G-CHIP-IDENT;
|
||||
to <constant>VIDIOC_G_CHIP_IDENT_OLD</constant> and <constant>VIDIOC_DBG_G_CHIP_IDENT</constant>
|
||||
was introduced in its place. The old struct <structname>v4l2_chip_ident</structname>
|
||||
was renamed to <structname id="v4l2-chip-ident-old">v4l2_chip_ident_old</structname>.</para>
|
||||
</listitem>
|
||||
@@ -2513,6 +2513,16 @@ that used it. It was originally scheduled for removal in 2.6.35.
|
||||
</orderedlist>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>V4L2 in Linux 3.11</title>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Remove obsolete <constant>VIDIOC_DBG_G_CHIP_IDENT</constant> ioctl.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</section>
|
||||
|
||||
<section id="other">
|
||||
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
||||
|
||||
@@ -2596,7 +2606,7 @@ and may change in the future.</para>
|
||||
ioctls.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>&VIDIOC-DBG-G-CHIP-IDENT; ioctl.</para>
|
||||
<para>&VIDIOC-DBG-G-CHIP-INFO; ioctl.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>&VIDIOC-ENUM-DV-TIMINGS;, &VIDIOC-QUERY-DV-TIMINGS; and
|
||||
|
||||
@@ -722,17 +722,22 @@ for more details.</para>
|
||||
</section>
|
||||
|
||||
<section id="mpeg-controls">
|
||||
<title>MPEG Control Reference</title>
|
||||
<title>Codec Control Reference</title>
|
||||
|
||||
<para>Below all controls within the MPEG control class are
|
||||
<para>Below all controls within the Codec control class are
|
||||
described. First the generic controls, then controls specific for
|
||||
certain hardware.</para>
|
||||
|
||||
<para>Note: These controls are applicable to all codecs and
|
||||
not just MPEG. The defines are prefixed with V4L2_CID_MPEG/V4L2_MPEG
|
||||
as the controls were originally made for MPEG codecs and later
|
||||
extended to cover all encoding formats.</para>
|
||||
|
||||
<section>
|
||||
<title>Generic MPEG Controls</title>
|
||||
<title>Generic Codec Controls</title>
|
||||
|
||||
<table pgwide="1" frame="none" id="mpeg-control-id">
|
||||
<title>MPEG Control IDs</title>
|
||||
<title>Codec Control IDs</title>
|
||||
<tgroup cols="4">
|
||||
<colspec colname="c1" colwidth="1*" />
|
||||
<colspec colname="c2" colwidth="6*" />
|
||||
@@ -752,7 +757,7 @@ certain hardware.</para>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_CLASS</constant> </entry>
|
||||
<entry>class</entry>
|
||||
</row><row><entry spanname="descr">The MPEG class
|
||||
</row><row><entry spanname="descr">The Codec class
|
||||
descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a
|
||||
description of this control class. This description can be used as the
|
||||
caption of a Tab page in a GUI, for example.</entry>
|
||||
@@ -3009,6 +3014,159 @@ in by the application. 0 = do not insert, 1 = insert packets.</entry>
|
||||
</tgroup>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>VPX Control Reference</title>
|
||||
|
||||
<para>The VPX controls include controls for encoding parameters
|
||||
of VPx video codec.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="vpx-control-id">
|
||||
<title>VPX Control IDs</title>
|
||||
|
||||
<tgroup cols="4">
|
||||
<colspec colname="c1" colwidth="1*" />
|
||||
<colspec colname="c2" colwidth="6*" />
|
||||
<colspec colname="c3" colwidth="2*" />
|
||||
<colspec colname="c4" colwidth="6*" />
|
||||
<spanspec namest="c1" nameend="c2" spanname="id" />
|
||||
<spanspec namest="c2" nameend="c4" spanname="descr" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry spanname="id" align="left">ID</entry>
|
||||
<entry align="left">Type</entry>
|
||||
</row><row rowsep="1"><entry spanname="descr" align="left">Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row><entry></entry></row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-vpx-num-partitions">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS</constant></entry>
|
||||
<entry>enum v4l2_vp8_num_partitions</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">The number of token partitions to use in VP8 encoder.
|
||||
Possible values are:</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entrytbl spanname="descr" cols="2">
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION</constant></entry>
|
||||
<entry>1 coefficient partition</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS</constant></entry>
|
||||
<entry>2 coefficient partitions</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS</constant></entry>
|
||||
<entry>4 coefficient partitions</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS</constant></entry>
|
||||
<entry>8 coefficient partitions</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4</constant></entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Setting this prevents intra 4x4 mode in the intra mode decision.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-vpx-num-ref-frames">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES</constant></entry>
|
||||
<entry>enum v4l2_vp8_num_ref_frames</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">The number of reference pictures for encoding P frames.
|
||||
Possible values are:</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entrytbl spanname="descr" cols="2">
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME</constant></entry>
|
||||
<entry>Last encoded frame will be searched</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME</constant></entry>
|
||||
<entry>Two frames will be searched among the last encoded frame, the golden frame
|
||||
and the alternate reference (altref) frame. The encoder implementation will decide which two are chosen.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME</constant></entry>
|
||||
<entry>The last encoded frame, the golden frame and the altref frame will be searched.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL</constant></entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Indicates the loop filter level. The adjustment of the loop
|
||||
filter level is done via a delta value against a baseline loop filter value.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS</constant></entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">This parameter affects the loop filter. Anything above
|
||||
zero weakens the deblocking effect on the loop filter.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD</constant></entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Sets the refresh period for the golden frame. The period is defined
|
||||
in number of frames. For a value of 'n', every nth frame starting from the first key frame will be taken as a golden frame.
|
||||
For eg. for encoding sequence of 0, 1, 2, 3, 4, 5, 6, 7 where the golden frame refresh period is set as 4, the frames
|
||||
0, 4, 8 etc will be taken as the golden frames as frame 0 is always a key frame.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-vpx-golden-frame-sel">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL</constant></entry>
|
||||
<entry>enum v4l2_vp8_golden_frame_sel</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Selects the golden frame for encoding.
|
||||
Possible values are:</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entrytbl spanname="descr" cols="2">
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV</constant></entry>
|
||||
<entry>Use the (n-2)th frame as a golden frame, current frame index being 'n'.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD</constant></entry>
|
||||
<entry>Use the previous specific frame indicated by
|
||||
V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD as a golden frame.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section id="camera-controls">
|
||||
@@ -3147,7 +3305,7 @@ giving priority to the center of the metered area.</entry>
|
||||
<entry>A multi-zone metering. The light intensity is measured
|
||||
in several points of the frame and the the results are combined. The
|
||||
algorithm of the zones selection and their significance in calculating the
|
||||
final value is device dependant.</entry>
|
||||
final value is device dependent.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
|
||||
@@ -1,18 +1,27 @@
|
||||
<title>Codec Interface</title>
|
||||
|
||||
<note>
|
||||
<title>Suspended</title>
|
||||
|
||||
<para>This interface has been be suspended from the V4L2 API
|
||||
implemented in Linux 2.6 until we have more experience with codec
|
||||
device interfaces.</para>
|
||||
</note>
|
||||
|
||||
<para>A V4L2 codec can compress, decompress, transform, or otherwise
|
||||
convert video data from one format into another format, in memory.
|
||||
Applications send data to be converted to the driver through a
|
||||
&func-write; call, and receive the converted data through a
|
||||
&func-read; call. For efficiency a driver may also support streaming
|
||||
I/O.</para>
|
||||
convert video data from one format into another format, in memory. Typically
|
||||
such devices are memory-to-memory devices (i.e. devices with the
|
||||
<constant>V4L2_CAP_VIDEO_M2M</constant> or <constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant>
|
||||
capability set).
|
||||
</para>
|
||||
|
||||
<para>[to do]</para>
|
||||
<para>A memory-to-memory video node acts just like a normal video node, but it
|
||||
supports both output (sending frames from memory to the codec hardware) and
|
||||
capture (receiving the processed frames from the codec hardware into memory)
|
||||
stream I/O. An application will have to setup the stream
|
||||
I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output
|
||||
to start the codec.</para>
|
||||
|
||||
<para>Video compression codecs use the MPEG controls to setup their codec parameters
|
||||
(note that the MPEG controls actually support many more codecs than just MPEG).
|
||||
See <xref linkend="mpeg-controls"></xref>.</para>
|
||||
|
||||
<para>Memory-to-memory devices can often be used as a shared resource: you can
|
||||
open the video node multiple times, each application setting up their own codec properties
|
||||
that are local to the file handle, and each can use it independently from the others.
|
||||
The driver will arbitrate access to the codec and reprogram it whenever another file
|
||||
handler gets access. This is different from the usual video node behavior where the video properties
|
||||
are global to the device (i.e. changing something through one file handle is visible
|
||||
through another file handle).</para>
|
||||
|
||||
@@ -46,7 +46,9 @@ describing an IR signal are read from the chardev.</para>
|
||||
values. Pulses and spaces are only marked implicitly by their position. The
|
||||
data must start and end with a pulse, therefore, the data must always include
|
||||
an uneven number of samples. The write function must block until the data has
|
||||
been transmitted by the hardware.</para>
|
||||
been transmitted by the hardware. If more data is provided than the hardware
|
||||
can send, the driver returns EINVAL.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="lirc_ioctl">
|
||||
|
||||
@@ -24,7 +24,7 @@ into 64x32 macroblocks. The CbCr plane has the same width, in bytes, as the Y
|
||||
plane (and the image), but is half as tall in pixels. The chroma plane is also
|
||||
grouped into 64x32 macroblocks.</para>
|
||||
<para>Width of the buffer has to be aligned to the multiple of 128, and
|
||||
height alignment is 32. Every four adjactent buffers - two horizontally and two
|
||||
height alignment is 32. Every four adjacent buffers - two horizontally and two
|
||||
vertically are grouped together and are located in memory in Z or flipped Z
|
||||
order. </para>
|
||||
<para>Layout of macroblocks in memory is presented in the following
|
||||
|
||||
@@ -0,0 +1,171 @@
|
||||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname id="V4L2-PIX-FMT-NV16M"><constant>V4L2_PIX_FMT_NV16M</constant></refname>
|
||||
<refname id="V4L2-PIX-FMT-NV61M"><constant>V4L2_PIX_FMT_NV61M</constant></refname>
|
||||
<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV16</constant> and <constant>V4L2_PIX_FMT_NV61</constant> with planes
|
||||
non contiguous in memory. </refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format.
|
||||
The three components are separated into two sub-images or planes.
|
||||
<constant>V4L2_PIX_FMT_NV16M</constant> differs from <constant>V4L2_PIX_FMT_NV16
|
||||
</constant> in that the two planes are non-contiguous in memory, i.e. the chroma
|
||||
plane does not necessarily immediately follows the luma plane.
|
||||
The luminance data occupies the first plane. The Y plane has one byte per pixel.
|
||||
In the second plane there is chrominance data with alternating chroma samples.
|
||||
The CbCr plane is the same width and height, in bytes, as the Y plane.
|
||||
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>.
|
||||
<constant>V4L2_PIX_FMT_NV61M</constant> is the same as <constant>V4L2_PIX_FMT_NV16M</constant>
|
||||
except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_NV16M</constant> and
|
||||
<constant>V4L2_PIX_FMT_NV61M</constant> are intended to be used only in drivers
|
||||
and applications that support the multi-planar API, described in
|
||||
<xref linkend="planar-apis"/>. </para>
|
||||
|
||||
<example>
|
||||
<title><constant>V4L2_PIX_FMT_NV16M</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>start0 + 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>start0 + 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>start0 + 8:</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>start0 + 12:</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></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 0:</entry>
|
||||
<entry>Cb<subscript>00</subscript></entry>
|
||||
<entry>Cr<subscript>00</subscript></entry>
|
||||
<entry>Cb<subscript>02</subscript></entry>
|
||||
<entry>Cr<subscript>02</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 4:</entry>
|
||||
<entry>Cb<subscript>10</subscript></entry>
|
||||
<entry>Cr<subscript>10</subscript></entry>
|
||||
<entry>Cb<subscript>12</subscript></entry>
|
||||
<entry>Cr<subscript>12</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 8:</entry>
|
||||
<entry>Cb<subscript>20</subscript></entry>
|
||||
<entry>Cr<subscript>20</subscript></entry>
|
||||
<entry>Cb<subscript>22</subscript></entry>
|
||||
<entry>Cr<subscript>22</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 12:</entry>
|
||||
<entry>Cb<subscript>30</subscript></entry>
|
||||
<entry>Cr<subscript>30</subscript></entry>
|
||||
<entry>Cb<subscript>32</subscript></entry>
|
||||
<entry>Cr<subscript>32</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>
|
||||
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></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>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</formalpara>
|
||||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
@@ -391,9 +391,9 @@ clamp (double x)
|
||||
else return r;
|
||||
}
|
||||
|
||||
y1 = (255 / 219.0) * (Y1 - 16);
|
||||
pb = (255 / 224.0) * (Cb - 128);
|
||||
pr = (255 / 224.0) * (Cr - 128);
|
||||
y1 = (Y1 - 16) / 219.0;
|
||||
pb = (Cb - 128) / 224.0;
|
||||
pr = (Cr - 128) / 224.0;
|
||||
|
||||
r = 1.0 * y1 + 0 * pb + 1.402 * pr;
|
||||
g = 1.0 * y1 - 0.344 * pb - 0.714 * pr;
|
||||
@@ -718,6 +718,7 @@ information.</para>
|
||||
&sub-nv12m;
|
||||
&sub-nv12mt;
|
||||
&sub-nv16;
|
||||
&sub-nv16m;
|
||||
&sub-nv24;
|
||||
&sub-m420;
|
||||
</section>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -140,6 +140,14 @@ structs, ioctls) must be noted in more detail in the history chapter
|
||||
(compat.xml), along with the possible impact on existing drivers and
|
||||
applications. -->
|
||||
|
||||
<revision>
|
||||
<revnumber>3.11</revnumber>
|
||||
<date>2013-05-26</date>
|
||||
<authorinitials>hv</authorinitials>
|
||||
<revremark>Remove obsolete VIDIOC_DBG_G_CHIP_IDENT ioctl.
|
||||
</revremark>
|
||||
</revision>
|
||||
|
||||
<revision>
|
||||
<revnumber>3.10</revnumber>
|
||||
<date>2013-03-25</date>
|
||||
@@ -493,7 +501,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||
</partinfo>
|
||||
|
||||
<title>Video for Linux Two API Specification</title>
|
||||
<subtitle>Revision 3.9</subtitle>
|
||||
<subtitle>Revision 3.11</subtitle>
|
||||
|
||||
<chapter id="common">
|
||||
&sub-common;
|
||||
@@ -547,7 +555,6 @@ and discussions on the V4L mailing list.</revremark>
|
||||
<!-- All ioctls go here. -->
|
||||
&sub-create-bufs;
|
||||
&sub-cropcap;
|
||||
&sub-dbg-g-chip-ident;
|
||||
&sub-dbg-g-chip-info;
|
||||
&sub-dbg-g-register;
|
||||
&sub-decoder-cmd;
|
||||
|
||||
@@ -62,18 +62,29 @@ addition to the <constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter
|
||||
control over buffers is required. This ioctl can be called multiple times to
|
||||
create buffers of different sizes.</para>
|
||||
|
||||
<para>To allocate device buffers applications initialize relevant fields of
|
||||
the <structname>v4l2_create_buffers</structname> structure. They set the
|
||||
<structfield>type</structfield> field in the
|
||||
&v4l2-format; structure, embedded in this
|
||||
structure, to the respective stream or buffer type.
|
||||
<structfield>count</structfield> must be set to the number of required buffers.
|
||||
<structfield>memory</structfield> specifies the required I/O method. The
|
||||
<structfield>format</structfield> field shall typically be filled in using
|
||||
either the <constant>VIDIOC_TRY_FMT</constant> or
|
||||
<constant>VIDIOC_G_FMT</constant> ioctl(). Additionally, applications can adjust
|
||||
<structfield>sizeimage</structfield> fields to fit their specific needs. The
|
||||
<structfield>reserved</structfield> array must be zeroed.</para>
|
||||
<para>To allocate the device buffers applications must initialize the
|
||||
relevant fields of the <structname>v4l2_create_buffers</structname> structure.
|
||||
The <structfield>count</structfield> field must be set to the number of
|
||||
requested buffers, the <structfield>memory</structfield> field specifies the
|
||||
requested I/O method and the <structfield>reserved</structfield> array must be
|
||||
zeroed.</para>
|
||||
|
||||
<para>The <structfield>format</structfield> field specifies the image format
|
||||
that the buffers must be able to handle. The application has to fill in this
|
||||
&v4l2-format;. Usually this will be done using the
|
||||
<constant>VIDIOC_TRY_FMT</constant> or <constant>VIDIOC_G_FMT</constant> ioctl()
|
||||
to ensure that the requested format is supported by the driver. Unsupported
|
||||
formats will result in an error.</para>
|
||||
|
||||
<para>The buffers created by this ioctl will have as minimum size the size
|
||||
defined by the <structfield>format.pix.sizeimage</structfield> field. If the
|
||||
<structfield>format.pix.sizeimage</structfield> field is less than the minimum
|
||||
required for the given format, then <structfield>sizeimage</structfield> will be
|
||||
increased by the driver to that minimum to allocate the buffers. If it is
|
||||
larger, then the value will be used as-is. The same applies to the
|
||||
<structfield>sizeimage</structfield> field of the
|
||||
<structname>v4l2_plane_pix_format</structname> structure in the case of
|
||||
multiplanar formats.</para>
|
||||
|
||||
<para>When the ioctl is called with a pointer to this structure the driver
|
||||
will attempt to allocate up to the requested number of buffers and store the
|
||||
@@ -144,9 +155,9 @@ mapped</link> I/O.</para>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The buffer type (<structfield>type</structfield> field) or the
|
||||
requested I/O method (<structfield>memory</structfield>) is not
|
||||
supported.</para>
|
||||
<para>The buffer type (<structfield>format.type</structfield> field),
|
||||
requested I/O method (<structfield>memory</structfield>) or format
|
||||
(<structfield>format</structfield> field) is not valid.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
@@ -1,271 +0,0 @@
|
||||
<refentry id="vidioc-dbg-g-chip-ident">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl VIDIOC_DBG_G_CHIP_IDENT</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>VIDIOC_DBG_G_CHIP_IDENT</refname>
|
||||
<refpurpose>Identify the chips on a TV card</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct v4l2_dbg_chip_ident
|
||||
*<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>VIDIOC_DBG_G_CHIP_IDENT</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<note>
|
||||
<title>Experimental</title>
|
||||
|
||||
<para>This is an <link
|
||||
linkend="experimental">experimental</link> interface and may change in
|
||||
the future.</para>
|
||||
</note>
|
||||
|
||||
<para>For driver debugging purposes this ioctl allows test
|
||||
applications to query the driver about the chips present on the TV
|
||||
card. Regular applications must not use it. When you found a chip
|
||||
specific bug, please contact the linux-media mailing list (&v4l-ml;)
|
||||
so it can be fixed.</para>
|
||||
|
||||
<para>To query the driver applications must initialize the
|
||||
<structfield>match.type</structfield> and
|
||||
<structfield>match.addr</structfield> or <structfield>match.name</structfield>
|
||||
fields of a &v4l2-dbg-chip-ident;
|
||||
and call <constant>VIDIOC_DBG_G_CHIP_IDENT</constant> with a pointer to
|
||||
this structure. On success the driver stores information about the
|
||||
selected chip in the <structfield>ident</structfield> and
|
||||
<structfield>revision</structfield> fields. On failure the structure
|
||||
remains unchanged.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_HOST</constant>,
|
||||
<structfield>match.addr</structfield> selects the nth non-&i2c; chip
|
||||
on the TV card. You can enumerate all chips by starting at zero and
|
||||
incrementing <structfield>match.addr</structfield> by one until
|
||||
<constant>VIDIOC_DBG_G_CHIP_IDENT</constant> fails with an &EINVAL;.
|
||||
The number zero always selects the host chip, ⪚ the chip connected
|
||||
to the PCI or USB bus.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant>,
|
||||
<structfield>match.name</structfield> contains the I2C driver name.
|
||||
For instance
|
||||
<constant>"saa7127"</constant> will match any chip
|
||||
supported by the saa7127 driver, regardless of its &i2c; bus address.
|
||||
When multiple chips supported by the same driver are present, the
|
||||
ioctl will return <constant>V4L2_IDENT_AMBIGUOUS</constant> in the
|
||||
<structfield>ident</structfield> field.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_I2C_ADDR</constant>,
|
||||
<structfield>match.addr</structfield> selects a chip by its 7 bit
|
||||
&i2c; bus address.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_AC97</constant>,
|
||||
<structfield>match.addr</structfield> selects the nth AC97 chip
|
||||
on the TV card. You can enumerate all chips by starting at zero and
|
||||
incrementing <structfield>match.addr</structfield> by one until
|
||||
<constant>VIDIOC_DBG_G_CHIP_IDENT</constant> fails with an &EINVAL;.</para>
|
||||
|
||||
<para>On success, the <structfield>ident</structfield> field will
|
||||
contain a chip ID from the Linux
|
||||
<filename>media/v4l2-chip-ident.h</filename> header file, and the
|
||||
<structfield>revision</structfield> field will contain a driver
|
||||
specific value, or zero if no particular revision is associated with
|
||||
this chip.</para>
|
||||
|
||||
<para>When the driver could not identify the selected chip,
|
||||
<structfield>ident</structfield> will contain
|
||||
<constant>V4L2_IDENT_UNKNOWN</constant>. When no chip matched
|
||||
the ioctl will succeed but the
|
||||
<structfield>ident</structfield> field will contain
|
||||
<constant>V4L2_IDENT_NONE</constant>. If multiple chips matched,
|
||||
<structfield>ident</structfield> will contain
|
||||
<constant>V4L2_IDENT_AMBIGUOUS</constant>. In all these cases the
|
||||
<structfield>revision</structfield> field remains unchanged.</para>
|
||||
|
||||
<para>This ioctl is optional, not all drivers may support it. It
|
||||
was introduced in Linux 2.6.21, but the API was changed to the
|
||||
one described here in 2.6.29.</para>
|
||||
|
||||
<para>We recommended the <application>v4l2-dbg</application>
|
||||
utility over calling this ioctl directly. It is available from the
|
||||
LinuxTV v4l-dvb repository; see <ulink
|
||||
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for
|
||||
access instructions.</para>
|
||||
|
||||
<!-- Note for convenience vidioc-dbg-g-register.sgml
|
||||
contains a duplicate of this table. -->
|
||||
<table pgwide="1" frame="none" id="ident-v4l2-dbg-match">
|
||||
<title>struct <structname>v4l2_dbg_match</structname></title>
|
||||
<tgroup cols="4">
|
||||
&cs-ustr;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>type</structfield></entry>
|
||||
<entry>See <xref linkend="ident-chip-match-types" /> for a list of
|
||||
possible types.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>union</entry>
|
||||
<entry>(anonymous)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>addr</structfield></entry>
|
||||
<entry>Match a chip by this number, interpreted according
|
||||
to the <structfield>type</structfield> field.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>name[32]</structfield></entry>
|
||||
<entry>Match a chip by this name, interpreted according
|
||||
to the <structfield>type</structfield> field.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-dbg-chip-ident">
|
||||
<title>struct <structname>v4l2_dbg_chip_ident</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>struct v4l2_dbg_match</entry>
|
||||
<entry><structfield>match</structfield></entry>
|
||||
<entry>How to match the chip, see <xref linkend="ident-v4l2-dbg-match" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>ident</structfield></entry>
|
||||
<entry>A chip identifier as defined in the Linux
|
||||
<filename>media/v4l2-chip-ident.h</filename> header file, or one of
|
||||
the values from <xref linkend="chip-ids" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>revision</structfield></entry>
|
||||
<entry>A chip revision, chip and driver specific.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<!-- Note for convenience vidioc-dbg-g-register.sgml
|
||||
contains a duplicate of this table. -->
|
||||
<table pgwide="1" frame="none" id="ident-chip-match-types">
|
||||
<title>Chip Match Types</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_BRIDGE</constant></entry>
|
||||
<entry>0</entry>
|
||||
<entry>Match the nth chip on the card, zero for the
|
||||
bridge chip. Does not match sub-devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Match an &i2c; chip by its driver name.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_ADDR</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>Match a chip by its 7 bit &i2c; bus address.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_AC97</constant></entry>
|
||||
<entry>3</entry>
|
||||
<entry>Match the nth anciliary AC97 chip.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
|
||||
<entry>4</entry>
|
||||
<entry>Match the nth sub-device. Can't be used with this ioctl.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<!-- This is an anonymous enum in media/v4l2-chip-ident.h. -->
|
||||
<table pgwide="1" frame="none" id="chip-ids">
|
||||
<title>Chip Identifiers</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_IDENT_NONE</constant></entry>
|
||||
<entry>0</entry>
|
||||
<entry>No chip matched.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_IDENT_AMBIGUOUS</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Multiple chips matched.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_IDENT_UNKNOWN</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>A chip is present at this address, but the driver
|
||||
could not identify it.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <structfield>match_type</structfield> is invalid.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
@@ -73,8 +73,7 @@ fields of a &v4l2-dbg-chip-info;
|
||||
and call <constant>VIDIOC_DBG_G_CHIP_INFO</constant> with a pointer to
|
||||
this structure. On success the driver stores information about the
|
||||
selected chip in the <structfield>name</structfield> and
|
||||
<structfield>flags</structfield> fields. On failure the structure
|
||||
remains unchanged.</para>
|
||||
<structfield>flags</structfield> fields.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_BRIDGE</constant>,
|
||||
@@ -132,7 +131,7 @@ to the <structfield>type</structfield> field.</entry>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>name[32]</structfield></entry>
|
||||
<entry>Match a chip by this name, interpreted according
|
||||
to the <structfield>type</structfield> field.</entry>
|
||||
to the <structfield>type</structfield> field. Currently unused.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@@ -182,21 +181,6 @@ is set, then the driver supports reading registers from the device. If
|
||||
<entry>Match the nth chip on the card, zero for the
|
||||
bridge chip. Does not match sub-devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Match an &i2c; chip by its driver name. Can't be used with this ioctl.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_ADDR</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>Match a chip by its 7 bit &i2c; bus address. Can't be used with this ioctl.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_AC97</constant></entry>
|
||||
<entry>3</entry>
|
||||
<entry>Match the nth anciliary AC97 chip. Can't be used with this ioctl.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
|
||||
<entry>4</entry>
|
||||
|
||||
@@ -76,7 +76,7 @@ compiled with the <constant>CONFIG_VIDEO_ADV_DEBUG</constant> option
|
||||
to enable these ioctls.</para>
|
||||
|
||||
<para>To write a register applications must initialize all fields
|
||||
of a &v4l2-dbg-register; and call
|
||||
of a &v4l2-dbg-register; except for <structfield>size</structfield> and call
|
||||
<constant>VIDIOC_DBG_S_REGISTER</constant> with a pointer to this
|
||||
structure. The <structfield>match.type</structfield> and
|
||||
<structfield>match.addr</structfield> or <structfield>match.name</structfield>
|
||||
@@ -91,8 +91,8 @@ written into the register.</para>
|
||||
<structfield>reg</structfield> fields, and call
|
||||
<constant>VIDIOC_DBG_G_REGISTER</constant> with a pointer to this
|
||||
structure. On success the driver stores the register value in the
|
||||
<structfield>val</structfield> field. On failure the structure remains
|
||||
unchanged.</para>
|
||||
<structfield>val</structfield> field and the size (in bytes) of the
|
||||
value in <structfield>size</structfield>.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_BRIDGE</constant>,
|
||||
@@ -101,40 +101,10 @@ on the TV card. The number zero always selects the host chip, ⪚ the
|
||||
chip connected to the PCI or USB bus. You can find out which chips are
|
||||
present with the &VIDIOC-DBG-G-CHIP-INFO; ioctl.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant>,
|
||||
<structfield>match.name</structfield> contains the I2C driver name.
|
||||
For instance
|
||||
<constant>"saa7127"</constant> will match any chip
|
||||
supported by the saa7127 driver, regardless of its &i2c; bus address.
|
||||
When multiple chips supported by the same driver are present, the
|
||||
effect of these ioctls is undefined. Again with the
|
||||
&VIDIOC-DBG-G-CHIP-INFO; ioctl you can find out which &i2c; chips are
|
||||
present.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_I2C_ADDR</constant>,
|
||||
<structfield>match.addr</structfield> selects a chip by its 7 bit &i2c;
|
||||
bus address.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_AC97</constant>,
|
||||
<structfield>match.addr</structfield> selects the nth AC97 chip
|
||||
on the TV card.</para>
|
||||
|
||||
<para>When <structfield>match.type</structfield> is
|
||||
<constant>V4L2_CHIP_MATCH_SUBDEV</constant>,
|
||||
<structfield>match.addr</structfield> selects the nth sub-device.</para>
|
||||
|
||||
<note>
|
||||
<title>Success not guaranteed</title>
|
||||
|
||||
<para>Due to a flaw in the Linux &i2c; bus driver these ioctls may
|
||||
return successfully without actually reading or writing a register. To
|
||||
catch the most likely failure we recommend a &VIDIOC-DBG-G-CHIP-INFO;
|
||||
call confirming the presence of the selected &i2c; chip.</para>
|
||||
</note>
|
||||
|
||||
<para>These ioctls are optional, not all drivers may support them.
|
||||
However when a driver supports these ioctls it must also support
|
||||
&VIDIOC-DBG-G-CHIP-INFO;. Conversely it may support
|
||||
@@ -150,7 +120,7 @@ LinuxTV v4l-dvb repository; see <ulink
|
||||
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for
|
||||
access instructions.</para>
|
||||
|
||||
<!-- Note for convenience vidioc-dbg-g-chip-ident.sgml
|
||||
<!-- Note for convenience vidioc-dbg-g-chip-info.sgml
|
||||
contains a duplicate of this table. -->
|
||||
<table pgwide="1" frame="none" id="v4l2-dbg-match">
|
||||
<title>struct <structname>v4l2_dbg_match</structname></title>
|
||||
@@ -160,7 +130,7 @@ access instructions.</para>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>type</structfield></entry>
|
||||
<entry>See <xref linkend="ident-chip-match-types" /> for a list of
|
||||
<entry>See <xref linkend="chip-match-types" /> for a list of
|
||||
possible types.</entry>
|
||||
</row>
|
||||
<row>
|
||||
@@ -179,7 +149,7 @@ to the <structfield>type</structfield> field.</entry>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>name[32]</structfield></entry>
|
||||
<entry>Match a chip by this name, interpreted according
|
||||
to the <structfield>type</structfield> field.</entry>
|
||||
to the <structfield>type</structfield> field. Currently unused.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@@ -198,6 +168,11 @@ to the <structfield>type</structfield> field.</entry>
|
||||
<entry><structfield>match</structfield></entry>
|
||||
<entry>How to match the chip, see <xref linkend="v4l2-dbg-match" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>size</structfield></entry>
|
||||
<entry>The register size in bytes.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u64</entry>
|
||||
<entry><structfield>reg</structfield></entry>
|
||||
@@ -213,7 +188,7 @@ register.</entry>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<!-- Note for convenience vidioc-dbg-g-chip-ident.sgml
|
||||
<!-- Note for convenience vidioc-dbg-g-chip-info.sgml
|
||||
contains a duplicate of this table. -->
|
||||
<table pgwide="1" frame="none" id="chip-match-types">
|
||||
<title>Chip Match Types</title>
|
||||
@@ -226,21 +201,6 @@ register.</entry>
|
||||
<entry>Match the nth chip on the card, zero for the
|
||||
bridge chip. Does not match sub-devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_DRIVER</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Match an &i2c; chip by its driver name.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_I2C_ADDR</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>Match a chip by its 7 bit &i2c; bus address.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_AC97</constant></entry>
|
||||
<entry>3</entry>
|
||||
<entry>Match the nth anciliary AC97 chip.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
|
||||
<entry>4</entry>
|
||||
|
||||
@@ -156,19 +156,19 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>il_vfrontporch</structfield></entry>
|
||||
<entry>Vertical front porch in lines for the even field (aka field 2) of
|
||||
interlaced field formats.</entry>
|
||||
interlaced field formats. Must be 0 for progressive formats.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>il_vsync</structfield></entry>
|
||||
<entry>Vertical sync length in lines for the even field (aka field 2) of
|
||||
interlaced field formats.</entry>
|
||||
interlaced field formats. Must be 0 for progressive formats.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>il_vbackporch</structfield></entry>
|
||||
<entry>Vertical back porch in lines for the even field (aka field 2) of
|
||||
interlaced field formats.</entry>
|
||||
interlaced field formats. Must be 0 for progressive formats.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
||||
@@ -92,8 +92,8 @@ to add them.</para>
|
||||
<entry>int</entry>
|
||||
<entry><structfield>quality</structfield></entry>
|
||||
<entry>Deprecated. If <link linkend="jpeg-quality-control"><constant>
|
||||
V4L2_CID_JPEG_IMAGE_QUALITY</constant></link> control is exposed by
|
||||
a driver applications should use it instead and ignore this field.
|
||||
V4L2_CID_JPEG_COMPRESSION_QUALITY</constant></link> control is exposed
|
||||
by a driver applications should use it instead and ignore this field.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
||||
@@ -132,7 +132,7 @@ devices.</para>
|
||||
<row>
|
||||
<entry>&v4l2-fract;</entry>
|
||||
<entry><structfield>timeperframe</structfield></entry>
|
||||
<entry><para>This is is the desired period between
|
||||
<entry><para>This is the desired period between
|
||||
successive frames captured by the driver, in seconds. The
|
||||
field is intended to skip frames on the driver side, saving I/O
|
||||
bandwidth.</para><para>Applications store here the desired frame
|
||||
@@ -193,7 +193,7 @@ applications must set the array to zero.</entry>
|
||||
<row>
|
||||
<entry>&v4l2-fract;</entry>
|
||||
<entry><structfield>timeperframe</structfield></entry>
|
||||
<entry>This is is the desired period between
|
||||
<entry>This is the desired period between
|
||||
successive frames output by the driver, in seconds.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
||||
@@ -54,7 +54,8 @@ standard automatically. To do so, applications call <constant>
|
||||
VIDIOC_QUERYSTD</constant> with a pointer to a &v4l2-std-id; type. The
|
||||
driver stores here a set of candidates, this can be a single flag or a
|
||||
set of supported standards if for example the hardware can only
|
||||
distinguish between 50 and 60 Hz systems. When detection is not
|
||||
distinguish between 50 and 60 Hz systems. If no signal was detected,
|
||||
then the driver will return V4L2_STD_UNKNOWN. When detection is not
|
||||
possible or fails, the set must contain all standards supported by the
|
||||
current video input or output.</para>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||
<!ENTITY % media-entities SYSTEM "./media-entities.tmpl"> %media-entities;
|
||||
<!ENTITY media-indices SYSTEM "./media-indices.tmpl">
|
||||
|
||||
@@ -22,8 +22,14 @@
|
||||
|
||||
<!-- LinuxTV v4l-dvb repository. -->
|
||||
<!ENTITY v4l-dvb "<ulink url='http://linuxtv.org/repo/'>http://linuxtv.org/repo/</ulink>">
|
||||
<!ENTITY dash-ent-8 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-10 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-12 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-14 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-16 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-20 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-22 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
<!ENTITY dash-ent-24 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
|
||||
]>
|
||||
|
||||
<book id="media_api">
|
||||
|
||||
@@ -1224,8 +1224,6 @@ in this page</entry>
|
||||
#define NAND_BBT_CREATE 0x00000200
|
||||
/* Search good / bad pattern through all pages of a block */
|
||||
#define NAND_BBT_SCANALLPAGES 0x00000400
|
||||
/* Scan block empty during good / bad block scan */
|
||||
#define NAND_BBT_SCANEMPTY 0x00000800
|
||||
/* Write bbt if neccecary */
|
||||
#define NAND_BBT_WRITE 0x00001000
|
||||
/* Read and write back block contents when writing bbt */
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
</para>
|
||||
<para>
|
||||
Because each different protocol causes a new driver to be created, I have
|
||||
written a generic USB driver skeleton, modeled after the pci-skeleton.c
|
||||
written a generic USB driver skeleton, modelled after the pci-skeleton.c
|
||||
file in the kernel source tree upon which many PCI network drivers have
|
||||
been based. This USB skeleton can be found at drivers/usb/usb-skeleton.c
|
||||
in the kernel source tree. In this article I will walk through the basics
|
||||
|
||||
+1
-1
@@ -112,7 +112,7 @@ required reading:
|
||||
|
||||
Other excellent descriptions of how to create patches properly are:
|
||||
"The Perfect Patch"
|
||||
http://userweb.kernel.org/~akpm/stuff/tpp.txt
|
||||
http://kerneltrap.org/node/3737
|
||||
"Linux kernel patch submission format"
|
||||
http://linux.yyz.us/patch-format.html
|
||||
|
||||
|
||||
@@ -57,8 +57,8 @@ 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
|
||||
[root@moon 44]# echo 1024-1031 > smp_affinity_list
|
||||
[root@moon 44]# cat smp_affinity_list
|
||||
1024-1031
|
||||
|
||||
Note that to do this with a bitmask would require 32 bitmasks of zero
|
||||
|
||||
+551
-303
File diff suppressed because it is too large
Load Diff
@@ -354,12 +354,6 @@ over a rather long period of time, but improvements are always welcome!
|
||||
using RCU rather than SRCU, because RCU is almost always faster
|
||||
and easier to use than is SRCU.
|
||||
|
||||
If you need to enter your read-side critical section in a
|
||||
hardirq or exception handler, and then exit that same read-side
|
||||
critical section in the task that was interrupted, then you need
|
||||
to srcu_read_lock_raw() and srcu_read_unlock_raw(), which avoid
|
||||
the lockdep checking that would otherwise this practice illegal.
|
||||
|
||||
Also unlike other forms of RCU, explicit initialization
|
||||
and cleanup is required via init_srcu_struct() and
|
||||
cleanup_srcu_struct(). These are passed a "struct srcu_struct"
|
||||
|
||||
@@ -70,10 +70,14 @@ in realtime kernels in order to avoid excessive scheduling latencies.
|
||||
|
||||
rcu_barrier()
|
||||
|
||||
We instead need the rcu_barrier() primitive. This primitive is similar
|
||||
to synchronize_rcu(), but instead of waiting solely for a grace
|
||||
period to elapse, it also waits for all outstanding RCU callbacks to
|
||||
complete. Pseudo-code using rcu_barrier() is as follows:
|
||||
We instead need the rcu_barrier() primitive. Rather than waiting for
|
||||
a grace period to elapse, rcu_barrier() waits for all outstanding RCU
|
||||
callbacks to complete. Please note that rcu_barrier() does -not- imply
|
||||
synchronize_rcu(), in particular, if there are no RCU callbacks queued
|
||||
anywhere, rcu_barrier() is within its rights to return immediately,
|
||||
without waiting for a grace period to elapse.
|
||||
|
||||
Pseudo-code using rcu_barrier() is as follows:
|
||||
|
||||
1. Prevent any new RCU callbacks from being posted.
|
||||
2. Execute rcu_barrier().
|
||||
|
||||
@@ -42,6 +42,16 @@ fqs_holdoff Holdoff time (in microseconds) between consecutive calls
|
||||
fqs_stutter Wait time (in seconds) between consecutive bursts
|
||||
of calls to force_quiescent_state().
|
||||
|
||||
gp_normal Make the fake writers use normal synchronous grace-period
|
||||
primitives.
|
||||
|
||||
gp_exp Make the fake writers use expedited synchronous grace-period
|
||||
primitives. If both gp_normal and gp_exp are set, or
|
||||
if neither gp_normal nor gp_exp are set, then randomly
|
||||
choose the primitive so that about 50% are normal and
|
||||
50% expedited. By default, neither are set, which
|
||||
gives best overall test coverage.
|
||||
|
||||
irqreader Says to invoke RCU readers from irq level. This is currently
|
||||
done via timers. Defaults to "1" for variants of RCU that
|
||||
permit this. (Or, more accurately, variants of RCU that do
|
||||
@@ -182,12 +192,6 @@ torture_type The type of RCU to test, with string values as follows:
|
||||
"srcu_expedited": srcu_read_lock(), srcu_read_unlock() and
|
||||
synchronize_srcu_expedited().
|
||||
|
||||
"srcu_raw": srcu_read_lock_raw(), srcu_read_unlock_raw(),
|
||||
and call_srcu().
|
||||
|
||||
"srcu_raw_sync": srcu_read_lock_raw(), srcu_read_unlock_raw(),
|
||||
and synchronize_srcu().
|
||||
|
||||
"sched": preempt_disable(), preempt_enable(), and
|
||||
call_rcu_sched().
|
||||
|
||||
|
||||
@@ -530,113 +530,21 @@ 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 debugfs Files and Formats
|
||||
|
||||
These implementations of RCU provides a single debugfs file under the
|
||||
top-level directory RCU, namely rcu/rcudata, which displays fields in
|
||||
rcu_bh_ctrlblk, rcu_sched_ctrlblk and, for CONFIG_TINY_PREEMPT_RCU,
|
||||
rcu_preempt_ctrlblk.
|
||||
rcu_bh_ctrlblk and rcu_sched_ctrlblk.
|
||||
|
||||
The output of "cat rcu/rcudata" is as follows:
|
||||
|
||||
rcu_preempt: qlen=24 gp=1097669 g197/p197/c197 tasks=...
|
||||
ttb=. btg=no ntb=184 neb=0 nnb=183 j=01f7 bt=0274
|
||||
normal balk: nt=1097669 gt=0 bt=371 b=0 ny=25073378 nos=0
|
||||
exp balk: bt=0 nos=0
|
||||
rcu_sched: qlen: 0
|
||||
rcu_bh: qlen: 0
|
||||
|
||||
This is split into rcu_preempt, rcu_sched, and rcu_bh sections, with the
|
||||
rcu_preempt section appearing only in CONFIG_TINY_PREEMPT_RCU builds.
|
||||
The last three lines of the rcu_preempt section appear only in
|
||||
CONFIG_RCU_BOOST kernel builds. The fields are as follows:
|
||||
This is split into rcu_sched and rcu_bh sections. The field is as
|
||||
follows:
|
||||
|
||||
o "qlen" is the number of RCU callbacks currently waiting either
|
||||
for an RCU grace period or waiting to be invoked. This is the
|
||||
only field present for rcu_sched and rcu_bh, due to the
|
||||
short-circuiting of grace period in those two cases.
|
||||
|
||||
o "gp" is the number of grace periods that have completed.
|
||||
|
||||
o "g197/p197/c197" displays the grace-period state, with the
|
||||
"g" number being the number of grace periods that have started
|
||||
(mod 256), the "p" number being the number of grace periods
|
||||
that the CPU has responded to (also mod 256), and the "c"
|
||||
number being the number of grace periods that have completed
|
||||
(once again mode 256).
|
||||
|
||||
Why have both "gp" and "g"? Because the data flowing into
|
||||
"gp" is only present in a CONFIG_RCU_TRACE kernel.
|
||||
|
||||
o "tasks" is a set of bits. The first bit is "T" if there are
|
||||
currently tasks that have recently blocked within an RCU
|
||||
read-side critical section, the second bit is "N" if any of the
|
||||
aforementioned tasks are blocking the current RCU grace period,
|
||||
and the third bit is "E" if any of the aforementioned tasks are
|
||||
blocking the current expedited grace period. Each bit is "."
|
||||
if the corresponding condition does not hold.
|
||||
|
||||
o "ttb" is a single bit. It is "B" if any of the blocked tasks
|
||||
need to be priority boosted and "." otherwise.
|
||||
|
||||
o "btg" indicates whether boosting has been carried out during
|
||||
the current grace period, with "exp" indicating that boosting
|
||||
is in progress for an expedited grace period, "no" indicating
|
||||
that boosting has not yet started for a normal grace period,
|
||||
"begun" indicating that boosting has bebug for a normal grace
|
||||
period, and "done" indicating that boosting has completed for
|
||||
a normal grace period.
|
||||
|
||||
o "ntb" is the total number of tasks subjected to RCU priority boosting
|
||||
periods since boot.
|
||||
|
||||
o "neb" is the number of expedited grace periods that have had
|
||||
to resort to RCU priority boosting since boot.
|
||||
|
||||
o "nnb" is the number of normal grace periods that have had
|
||||
to resort to RCU priority boosting since boot.
|
||||
|
||||
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 at the next time that boosting is scheduled to begin.
|
||||
|
||||
o In the line beginning with "normal balk", the fields are as follows:
|
||||
|
||||
o "nt" is the number of times that the system balked from
|
||||
boosting because there were no blocked tasks to boost.
|
||||
Note that the system will balk from boosting even if the
|
||||
grace period is overdue when the currently running task
|
||||
is looping within an RCU read-side critical section.
|
||||
There is no point in boosting in this case, because
|
||||
boosting a running task won't make it run any faster.
|
||||
|
||||
o "gt" is the number of times that the system balked
|
||||
from boosting because, although there were blocked tasks,
|
||||
none of them were preventing the current grace period
|
||||
from completing.
|
||||
|
||||
o "bt" is the number of times that the system balked
|
||||
from boosting because boosting was already in progress.
|
||||
|
||||
o "b" is the number of times that the system balked from
|
||||
boosting because boosting had already completed for
|
||||
the grace period in question.
|
||||
|
||||
o "ny" is the number of times that the system balked from
|
||||
boosting because it was not yet time to start boosting
|
||||
the grace period in question.
|
||||
|
||||
o "nos" is the number of times that the system balked from
|
||||
boosting for inexplicable ("not otherwise specified")
|
||||
reasons. This can actually happen due to races involving
|
||||
increments of the jiffies counter.
|
||||
|
||||
o In the line beginning with "exp balk", the fields are as follows:
|
||||
|
||||
o "bt" is the number of times that the system balked from
|
||||
boosting because there were no blocked tasks to boost.
|
||||
|
||||
o "nos" is the number of times that the system balked from
|
||||
boosting for inexplicable ("not otherwise specified")
|
||||
reasons.
|
||||
|
||||
@@ -842,9 +842,7 @@ SRCU: Critical sections Grace period Barrier
|
||||
|
||||
srcu_read_lock synchronize_srcu srcu_barrier
|
||||
srcu_read_unlock call_srcu
|
||||
srcu_read_lock_raw synchronize_srcu_expedited
|
||||
srcu_read_unlock_raw
|
||||
srcu_dereference
|
||||
srcu_dereference synchronize_srcu_expedited
|
||||
|
||||
SRCU: Initialization/cleanup
|
||||
init_srcu_struct
|
||||
@@ -865,38 +863,32 @@ list can be helpful:
|
||||
|
||||
a. Will readers need to block? If so, you need SRCU.
|
||||
|
||||
b. Is it necessary to start a read-side critical section in a
|
||||
hardirq handler or exception handler, and then to complete
|
||||
this read-side critical section in the task that was
|
||||
interrupted? If so, you need SRCU's srcu_read_lock_raw() and
|
||||
srcu_read_unlock_raw() primitives.
|
||||
|
||||
c. What about the -rt patchset? If readers would need to block
|
||||
b. What about the -rt patchset? If readers would need to block
|
||||
in an non-rt kernel, you need SRCU. If readers would block
|
||||
in a -rt kernel, but not in a non-rt kernel, SRCU is not
|
||||
necessary.
|
||||
|
||||
d. Do you need to treat NMI handlers, hardirq handlers,
|
||||
c. Do you need to treat NMI handlers, hardirq handlers,
|
||||
and code segments with preemption disabled (whether
|
||||
via preempt_disable(), local_irq_save(), local_bh_disable(),
|
||||
or some other mechanism) as if they were explicit RCU readers?
|
||||
If so, RCU-sched is the only choice that will work for you.
|
||||
|
||||
e. Do you need RCU grace periods to complete even in the face
|
||||
d. Do you need RCU grace periods to complete even in the face
|
||||
of softirq monopolization of one or more of the CPUs? For
|
||||
example, is your code subject to network-based denial-of-service
|
||||
attacks? If so, you need RCU-bh.
|
||||
|
||||
f. Is your workload too update-intensive for normal use of
|
||||
e. Is your workload too update-intensive for normal use of
|
||||
RCU, but inappropriate for other synchronization mechanisms?
|
||||
If so, consider SLAB_DESTROY_BY_RCU. But please be careful!
|
||||
|
||||
g. Do you need read-side critical sections that are respected
|
||||
f. Do you need read-side critical sections that are respected
|
||||
even though they are in the middle of the idle loop, during
|
||||
user-mode execution, or on an offlined CPU? If so, SRCU is the
|
||||
only choice that will work for you.
|
||||
|
||||
h. Otherwise, use RCU.
|
||||
g. Otherwise, use RCU.
|
||||
|
||||
Of course, this all assumes that you have determined that RCU is in fact
|
||||
the right tool for your job.
|
||||
|
||||
@@ -105,5 +105,5 @@ kernel patches.
|
||||
same time, just various/random combinations of them]:
|
||||
|
||||
CONFIG_SMP, CONFIG_SYSFS, CONFIG_PROC_FS, CONFIG_INPUT, CONFIG_PCI,
|
||||
CONFIG_BLOCK, CONFIG_PM, CONFIG_HOTPLUG, CONFIG_MAGIC_SYSRQ,
|
||||
CONFIG_BLOCK, CONFIG_PM, CONFIG_MAGIC_SYSRQ,
|
||||
CONFIG_NET, CONFIG_INET=n (but latter with CONFIG_NET=y)
|
||||
|
||||
@@ -109,6 +109,16 @@ probably didn't even receive earlier versions of the patch.
|
||||
If the patch fixes a logged bug entry, refer to that bug entry by
|
||||
number and URL.
|
||||
|
||||
If you want to refer to a specific commit, don't just refer to the
|
||||
SHA-1 ID of the commit. Please also include the oneline summary of
|
||||
the commit, to make it easier for reviewers to know what it is about.
|
||||
Example:
|
||||
|
||||
Commit e21d2170f36602ae2708 ("video: remove unnecessary
|
||||
platform_set_drvdata()") removed the unnecessary
|
||||
platform_set_drvdata(), but left the variable "dev" unused,
|
||||
delete it.
|
||||
|
||||
|
||||
3) Separate your changes.
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ int main(int argc, char *argv[])
|
||||
char *logfile = NULL;
|
||||
int loop = 0;
|
||||
int containerset = 0;
|
||||
char containerpath[1024];
|
||||
char *containerpath = NULL;
|
||||
int cfd = 0;
|
||||
int forking = 0;
|
||||
sigset_t sigset;
|
||||
@@ -299,7 +299,7 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
case 'C':
|
||||
containerset = 1;
|
||||
strncpy(containerpath, optarg, strlen(optarg) + 1);
|
||||
containerpath = optarg;
|
||||
break;
|
||||
case 'w':
|
||||
logfile = strdup(optarg);
|
||||
|
||||
@@ -47,11 +47,16 @@ directory apei/einj. The following files are provided.
|
||||
|
||||
- param1
|
||||
This file is used to set the first error parameter value. Effect of
|
||||
parameter depends on error_type specified.
|
||||
parameter depends on error_type specified. For example, if error
|
||||
type is memory related type, the param1 should be a valid physical
|
||||
memory address.
|
||||
|
||||
- param2
|
||||
This file is used to set the second error parameter value. Effect of
|
||||
parameter depends on error_type specified.
|
||||
parameter depends on error_type specified. For example, if error
|
||||
type is memory related type, the param2 should be a physical memory
|
||||
address mask. Linux requires page or narrower granularity, say,
|
||||
0xfffffffffffff000.
|
||||
|
||||
- notrigger
|
||||
The EINJ mechanism is a two step process. First inject the error, then
|
||||
|
||||
@@ -207,7 +207,7 @@ passing those. One idea is to return this in _DSM method like:
|
||||
Return (Local0)
|
||||
}
|
||||
|
||||
Then the at25 SPI driver can get this configation by calling _DSM on its
|
||||
Then the at25 SPI driver can get this configuration by calling _DSM on its
|
||||
ACPI handle like:
|
||||
|
||||
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
@@ -228,19 +228,9 @@ ACPI handle like:
|
||||
I2C serial bus support
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
The slaves behind I2C bus controller only need to add the ACPI IDs like
|
||||
with the platform and SPI drivers. However the I2C bus controller driver
|
||||
needs to call acpi_i2c_register_devices() after it has added the adapter.
|
||||
|
||||
An I2C bus (controller) driver does:
|
||||
|
||||
...
|
||||
ret = i2c_add_numbered_adapter(adapter);
|
||||
if (ret)
|
||||
/* handle error */
|
||||
|
||||
of_i2c_register_devices(adapter);
|
||||
/* Enumerate the slave devices behind this bus via ACPI */
|
||||
acpi_i2c_register_devices(adapter);
|
||||
with the platform and SPI drivers. The I2C core automatically enumerates
|
||||
any slave devices behind the controller device once the adapter is
|
||||
registered.
|
||||
|
||||
Below is an example of how to add ACPI support to the existing mpu3050
|
||||
input driver:
|
||||
|
||||
@@ -0,0 +1,395 @@
|
||||
ACPI Device Tree - Representation of ACPI Namespace
|
||||
|
||||
Copyright (C) 2013, Intel Corporation
|
||||
Author: Lv Zheng <lv.zheng@intel.com>
|
||||
|
||||
|
||||
Abstract:
|
||||
|
||||
The Linux ACPI subsystem converts ACPI namespace objects into a Linux
|
||||
device tree under the /sys/devices/LNXSYSTEM:00 and updates it upon
|
||||
receiving ACPI hotplug notification events. For each device object in this
|
||||
hierarchy there is a corresponding symbolic link in the
|
||||
/sys/bus/acpi/devices.
|
||||
This document illustrates the structure of the ACPI device tree.
|
||||
|
||||
|
||||
Credit:
|
||||
|
||||
Thanks for the help from Zhang Rui <rui.zhang@intel.com> and Rafael J.
|
||||
Wysocki <rafael.j.wysocki@intel.com>.
|
||||
|
||||
|
||||
1. ACPI Definition Blocks
|
||||
|
||||
The ACPI firmware sets up RSDP (Root System Description Pointer) in the
|
||||
system memory address space pointing to the XSDT (Extended System
|
||||
Description Table). The XSDT always points to the FADT (Fixed ACPI
|
||||
Description Table) using its first entry, the data within the FADT
|
||||
includes various fixed-length entries that describe fixed ACPI features
|
||||
of the hardware. The FADT contains a pointer to the DSDT
|
||||
(Differentiated System Descripition Table). The XSDT also contains
|
||||
entries pointing to possibly multiple SSDTs (Secondary System
|
||||
Description Table).
|
||||
|
||||
The DSDT and SSDT data is organized in data structures called definition
|
||||
blocks that contain definitions of various objects, including ACPI
|
||||
control methods, encoded in AML (ACPI Machine Language). The data block
|
||||
of the DSDT along with the contents of SSDTs represents a hierarchical
|
||||
data structure called the ACPI namespace whose topology reflects the
|
||||
structure of the underlying hardware platform.
|
||||
|
||||
The relationships between ACPI System Definition Tables described above
|
||||
are illustrated in the following diagram.
|
||||
|
||||
+---------+ +-------+ +--------+ +------------------------+
|
||||
| RSDP | +->| XSDT | +->| FADT | | +-------------------+ |
|
||||
+---------+ | +-------+ | +--------+ +-|->| DSDT | |
|
||||
| Pointer | | | Entry |-+ | ...... | | | +-------------------+ |
|
||||
+---------+ | +-------+ | X_DSDT |--+ | | Definition Blocks | |
|
||||
| Pointer |-+ | ..... | | ...... | | +-------------------+ |
|
||||
+---------+ +-------+ +--------+ | +-------------------+ |
|
||||
| Entry |------------------|->| SSDT | |
|
||||
+- - - -+ | +-------------------| |
|
||||
| Entry | - - - - - - - -+ | | Definition Blocks | |
|
||||
+- - - -+ | | +-------------------+ |
|
||||
| | +- - - - - - - - - -+ |
|
||||
+-|->| SSDT | |
|
||||
| +-------------------+ |
|
||||
| | Definition Blocks | |
|
||||
| +- - - - - - - - - -+ |
|
||||
+------------------------+
|
||||
|
|
||||
OSPM Loading |
|
||||
\|/
|
||||
+----------------+
|
||||
| ACPI Namespace |
|
||||
+----------------+
|
||||
|
||||
Figure 1. ACPI Definition Blocks
|
||||
|
||||
NOTE: RSDP can also contain a pointer to the RSDT (Root System
|
||||
Description Table). Platforms provide RSDT to enable
|
||||
compatibility with ACPI 1.0 operating systems. The OS is expected
|
||||
to use XSDT, if present.
|
||||
|
||||
|
||||
2. Example ACPI Namespace
|
||||
|
||||
All definition blocks are loaded into a single namespace. The namespace
|
||||
is a hierarchy of objects identified by names and paths.
|
||||
The following naming conventions apply to object names in the ACPI
|
||||
namespace:
|
||||
1. All names are 32 bits long.
|
||||
2. The first byte of a name must be one of 'A' - 'Z', '_'.
|
||||
3. Each of the remaining bytes of a name must be one of 'A' - 'Z', '0'
|
||||
- '9', '_'.
|
||||
4. Names starting with '_' are reserved by the ACPI specification.
|
||||
5. The '\' symbol represents the root of the namespace (i.e. names
|
||||
prepended with '\' are relative to the namespace root).
|
||||
6. The '^' symbol represents the parent of the current namespace node
|
||||
(i.e. names prepended with '^' are relative to the parent of the
|
||||
current namespace node).
|
||||
|
||||
The figure below shows an example ACPI namespace.
|
||||
|
||||
+------+
|
||||
| \ | Root
|
||||
+------+
|
||||
|
|
||||
| +------+
|
||||
+-| _PR | Scope(_PR): the processor namespace
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| CPU0 | Processor(CPU0): the first processor
|
||||
| +------+
|
||||
|
|
||||
| +------+
|
||||
+-| _SB | Scope(_SB): the system bus namespace
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| LID0 | Device(LID0); the lid device
|
||||
| | +------+
|
||||
| | |
|
||||
| | | +------+
|
||||
| | +-| _HID | Name(_HID, "PNP0C0D"): the hardware ID
|
||||
| | | +------+
|
||||
| | |
|
||||
| | | +------+
|
||||
| | +-| _STA | Method(_STA): the status control method
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| PCI0 | Device(PCI0); the PCI root bridge
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| _HID | Name(_HID, "PNP0A08"): the hardware ID
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| _CID | Name(_CID, "PNP0A03"): the compatible ID
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| RP03 | Scope(RP03): the PCI0 power scope
|
||||
| | +------+
|
||||
| | |
|
||||
| | | +------+
|
||||
| | +-| PXP3 | PowerResource(PXP3): the PCI0 power resource
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| GFX0 | Device(GFX0): the graphics adapter
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| _ADR | Name(_ADR, 0x00020000): the PCI bus address
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| DD01 | Device(DD01): the LCD output device
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| _BCL | Method(_BCL): the backlight control method
|
||||
| +------+
|
||||
|
|
||||
| +------+
|
||||
+-| _TZ | Scope(_TZ): the thermal zone namespace
|
||||
| +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| FN00 | PowerResource(FN00): the FAN0 power resource
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| FAN0 | Device(FAN0): the FAN0 cooling device
|
||||
| | +------+
|
||||
| | |
|
||||
| | | +------+
|
||||
| | +-| _HID | Name(_HID, "PNP0A0B"): the hardware ID
|
||||
| | +------+
|
||||
| |
|
||||
| | +------+
|
||||
| +-| TZ00 | ThermalZone(TZ00); the FAN thermal zone
|
||||
| +------+
|
||||
|
|
||||
| +------+
|
||||
+-| _GPE | Scope(_GPE): the GPE namespace
|
||||
+------+
|
||||
|
||||
Figure 2. Example ACPI Namespace
|
||||
|
||||
|
||||
3. Linux ACPI Device Objects
|
||||
|
||||
The Linux kernel's core ACPI subsystem creates struct acpi_device
|
||||
objects for ACPI namespace objects representing devices, power resources
|
||||
processors, thermal zones. Those objects are exported to user space via
|
||||
sysfs as directories in the subtree under /sys/devices/LNXSYSTM:00. The
|
||||
format of their names is <bus_id:instance>, where 'bus_id' refers to the
|
||||
ACPI namespace representation of the given object and 'instance' is used
|
||||
for distinguishing different object of the same 'bus_id' (it is
|
||||
two-digit decimal representation of an unsigned integer).
|
||||
|
||||
The value of 'bus_id' depends on the type of the object whose name it is
|
||||
part of as listed in the table below.
|
||||
|
||||
+---+-----------------+-------+----------+
|
||||
| | Object/Feature | Table | bus_id |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | Root | xSDT | LNXSYSTM |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | Device | xSDT | _HID |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | Processor | xSDT | LNXCPU |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | ThermalZone | xSDT | LNXTHERM |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | PowerResource | xSDT | LNXPOWER |
|
||||
+---+-----------------+-------+----------+
|
||||
| N | Other Devices | xSDT | device |
|
||||
+---+-----------------+-------+----------+
|
||||
| F | PWR_BUTTON | FADT | LNXPWRBN |
|
||||
+---+-----------------+-------+----------+
|
||||
| F | SLP_BUTTON | FADT | LNXSLPBN |
|
||||
+---+-----------------+-------+----------+
|
||||
| M | Video Extension | xSDT | LNXVIDEO |
|
||||
+---+-----------------+-------+----------+
|
||||
| M | ATA Controller | xSDT | LNXIOBAY |
|
||||
+---+-----------------+-------+----------+
|
||||
| M | Docking Station | xSDT | LNXDOCK |
|
||||
+---+-----------------+-------+----------+
|
||||
|
||||
Table 1. ACPI Namespace Objects Mapping
|
||||
|
||||
The following rules apply when creating struct acpi_device objects on
|
||||
the basis of the contents of ACPI System Description Tables (as
|
||||
indicated by the letter in the first column and the notation in the
|
||||
second column of the table above):
|
||||
N:
|
||||
The object's source is an ACPI namespace node (as indicated by the
|
||||
named object's type in the second column). In that case the object's
|
||||
directory in sysfs will contain the 'path' attribute whose value is
|
||||
the full path to the node from the namespace root.
|
||||
struct acpi_device objects are created for the ACPI namespace nodes
|
||||
whose _STA control methods return PRESENT or FUNCTIONING. The power
|
||||
resource nodes or nodes without _STA are assumed to be both PRESENT
|
||||
and FUNCTIONING.
|
||||
F:
|
||||
The struct acpi_device object is created for a fixed hardware
|
||||
feature (as indicated by the fixed feature flag's name in the second
|
||||
column), so its sysfs directory will not contain the 'path'
|
||||
attribute.
|
||||
M:
|
||||
The struct acpi_device object is created for an ACPI namespace node
|
||||
with specific control methods (as indicated by the ACPI defined
|
||||
device's type in the second column). The 'path' attribute containing
|
||||
its namespace path will be present in its sysfs directory. For
|
||||
example, if the _BCL method is present for an ACPI namespace node, a
|
||||
struct acpi_device object with LNXVIDEO 'bus_id' will be created for
|
||||
it.
|
||||
|
||||
The third column of the above table indicates which ACPI System
|
||||
Description Tables contain information used for the creation of the
|
||||
struct acpi_device objects represented by the given row (xSDT means DSDT
|
||||
or SSDT).
|
||||
|
||||
The forth column of the above table indicates the 'bus_id' generation
|
||||
rule of the struct acpi_device object:
|
||||
_HID:
|
||||
_HID in the last column of the table means that the object's bus_id
|
||||
is derived from the _HID/_CID identification objects present under
|
||||
the corresponding ACPI namespace node. The object's sysfs directory
|
||||
will then contain the 'hid' and 'modalias' attributes that can be
|
||||
used to retrieve the _HID and _CIDs of that object.
|
||||
LNXxxxxx:
|
||||
The 'modalias' attribute is also present for struct acpi_device
|
||||
objects having bus_id of the "LNXxxxxx" form (pseudo devices), in
|
||||
which cases it contains the bus_id string itself.
|
||||
device:
|
||||
'device' in the last column of the table indicates that the object's
|
||||
bus_id cannot be determined from _HID/_CID of the corresponding
|
||||
ACPI namespace node, although that object represents a device (for
|
||||
example, it may be a PCI device with _ADR defined and without _HID
|
||||
or _CID). In that case the string 'device' will be used as the
|
||||
object's bus_id.
|
||||
|
||||
|
||||
4. Linux ACPI Physical Device Glue
|
||||
|
||||
ACPI device (i.e. struct acpi_device) objects may be linked to other
|
||||
objects in the Linux' device hierarchy that represent "physical" devices
|
||||
(for example, devices on the PCI bus). If that happens, it means that
|
||||
the ACPI device object is a "companion" of a device otherwise
|
||||
represented in a different way and is used (1) to provide configuration
|
||||
information on that device which cannot be obtained by other means and
|
||||
(2) to do specific things to the device with the help of its ACPI
|
||||
control methods. One ACPI device object may be linked this way to
|
||||
multiple "physical" devices.
|
||||
|
||||
If an ACPI device object is linked to a "physical" device, its sysfs
|
||||
directory contains the "physical_node" symbolic link to the sysfs
|
||||
directory of the target device object. In turn, the target device's
|
||||
sysfs directory will then contain the "firmware_node" symbolic link to
|
||||
the sysfs directory of the companion ACPI device object.
|
||||
The linking mechanism relies on device identification provided by the
|
||||
ACPI namespace. For example, if there's an ACPI namespace object
|
||||
representing a PCI device (i.e. a device object under an ACPI namespace
|
||||
object representing a PCI bridge) whose _ADR returns 0x00020000 and the
|
||||
bus number of the parent PCI bridge is 0, the sysfs directory
|
||||
representing the struct acpi_device object created for that ACPI
|
||||
namespace object will contain the 'physical_node' symbolic link to the
|
||||
/sys/devices/pci0000:00/0000:00:02:0/ sysfs directory of the
|
||||
corresponding PCI device.
|
||||
|
||||
The linking mechanism is generally bus-specific. The core of its
|
||||
implementation is located in the drivers/acpi/glue.c file, but there are
|
||||
complementary parts depending on the bus types in question located
|
||||
elsewhere. For example, the PCI-specific part of it is located in
|
||||
drivers/pci/pci-acpi.c.
|
||||
|
||||
|
||||
5. Example Linux ACPI Device Tree
|
||||
|
||||
The sysfs hierarchy of struct acpi_device objects corresponding to the
|
||||
example ACPI namespace illustrated in Figure 2 with the addition of
|
||||
fixed PWR_BUTTON/SLP_BUTTON devices is shown below.
|
||||
|
||||
+--------------+---+-----------------+
|
||||
| LNXSYSTEM:00 | \ | acpi:LNXSYSTEM: |
|
||||
+--------------+---+-----------------+
|
||||
|
|
||||
| +-------------+-----+----------------+
|
||||
+-| LNXPWRBN:00 | N/A | acpi:LNXPWRBN: |
|
||||
| +-------------+-----+----------------+
|
||||
|
|
||||
| +-------------+-----+----------------+
|
||||
+-| LNXSLPBN:00 | N/A | acpi:LNXSLPBN: |
|
||||
| +-------------+-----+----------------+
|
||||
|
|
||||
| +-----------+------------+--------------+
|
||||
+-| LNXCPU:00 | \_PR_.CPU0 | acpi:LNXCPU: |
|
||||
| +-----------+------------+--------------+
|
||||
|
|
||||
| +-------------+-------+----------------+
|
||||
+-| LNXSYBUS:00 | \_SB_ | acpi:LNXSYBUS: |
|
||||
| +-------------+-------+----------------+
|
||||
| |
|
||||
| | +- - - - - - - +- - - - - - +- - - - - - - -+
|
||||
| +-| * PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: |
|
||||
| | +- - - - - - - +- - - - - - +- - - - - - - -+
|
||||
| |
|
||||
| | +------------+------------+-----------------------+
|
||||
| +-| PNP0A08:00 | \_SB_.PCI0 | acpi:PNP0A08:PNP0A03: |
|
||||
| +------------+------------+-----------------------+
|
||||
| |
|
||||
| | +-----------+-----------------+-----+
|
||||
| +-| device:00 | \_SB_.PCI0.RP03 | N/A |
|
||||
| | +-----------+-----------------+-----+
|
||||
| | |
|
||||
| | | +-------------+----------------------+----------------+
|
||||
| | +-| LNXPOWER:00 | \_SB_.PCI0.RP03.PXP3 | acpi:LNXPOWER: |
|
||||
| | +-------------+----------------------+----------------+
|
||||
| |
|
||||
| | +-------------+-----------------+----------------+
|
||||
| +-| LNXVIDEO:00 | \_SB_.PCI0.GFX0 | acpi:LNXVIDEO: |
|
||||
| +-------------+-----------------+----------------+
|
||||
| |
|
||||
| | +-----------+-----------------+-----+
|
||||
| +-| device:01 | \_SB_.PCI0.DD01 | N/A |
|
||||
| +-----------+-----------------+-----+
|
||||
|
|
||||
| +-------------+-------+----------------+
|
||||
+-| LNXSYBUS:01 | \_TZ_ | acpi:LNXSYBUS: |
|
||||
+-------------+-------+----------------+
|
||||
|
|
||||
| +-------------+------------+----------------+
|
||||
+-| LNXPOWER:0a | \_TZ_.FN00 | acpi:LNXPOWER: |
|
||||
| +-------------+------------+----------------+
|
||||
|
|
||||
| +------------+------------+---------------+
|
||||
+-| PNP0C0B:00 | \_TZ_.FAN0 | acpi:PNP0C0B: |
|
||||
| +------------+------------+---------------+
|
||||
|
|
||||
| +-------------+------------+----------------+
|
||||
+-| LNXTHERM:00 | \_TZ_.TZ00 | acpi:LNXTHERM: |
|
||||
+-------------+------------+----------------+
|
||||
|
||||
Figure 3. Example Linux ACPI Device Tree
|
||||
|
||||
NOTE: Each node is represented as "object/path/modalias", where:
|
||||
1. 'object' is the name of the object's directory in sysfs.
|
||||
2. 'path' is the ACPI namespace path of the corresponding
|
||||
ACPI namespace object, as returned by the object's 'path'
|
||||
sysfs attribute.
|
||||
3. 'modalias' is the value of the object's 'modalias' sysfs
|
||||
attribute (as described earlier in this document).
|
||||
NOTE: N/A indicates the device object does not have the 'path' or the
|
||||
'modalias' attribute.
|
||||
NOTE: The PNP0C0D device listed above is highlighted (marked by "*")
|
||||
to indicate it will be created only when its _STA methods return
|
||||
PRESENT or FUNCTIONING.
|
||||
@@ -0,0 +1,106 @@
|
||||
ACPI video extensions
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This driver implement the ACPI Extensions For Display Adapters for
|
||||
integrated graphics devices on motherboard, as specified in ACPI 2.0
|
||||
Specification, Appendix B, allowing to perform some basic control like
|
||||
defining the video POST device, retrieving EDID information or to
|
||||
setup a video output, etc. Note that this is an ref. implementation
|
||||
only. It may or may not work for your integrated video device.
|
||||
|
||||
The ACPI video driver does 3 things regarding backlight control:
|
||||
|
||||
1 Export a sysfs interface for user space to control backlight level
|
||||
|
||||
If the ACPI table has a video device, and acpi_backlight=vendor kernel
|
||||
command line is not present, the driver will register a backlight device
|
||||
and set the required backlight operation structure for it for the sysfs
|
||||
interface control. For every registered class device, there will be a
|
||||
directory named acpi_videoX under /sys/class/backlight.
|
||||
|
||||
The backlight sysfs interface has a standard definition here:
|
||||
Documentation/ABI/stable/sysfs-class-backlight.
|
||||
|
||||
And what ACPI video driver does is:
|
||||
actual_brightness: on read, control method _BQC will be evaluated to
|
||||
get the brightness level the firmware thinks it is at;
|
||||
bl_power: not implemented, will set the current brightness instead;
|
||||
brightness: on write, control method _BCM will run to set the requested
|
||||
brightness level;
|
||||
max_brightness: Derived from the _BCL package(see below);
|
||||
type: firmware
|
||||
|
||||
Note that ACPI video backlight driver will always use index for
|
||||
brightness, actual_brightness and max_brightness. So if we have
|
||||
the following _BCL package:
|
||||
|
||||
Method (_BCL, 0, NotSerialized)
|
||||
{
|
||||
Return (Package (0x0C)
|
||||
{
|
||||
0x64,
|
||||
0x32,
|
||||
0x0A,
|
||||
0x14,
|
||||
0x1E,
|
||||
0x28,
|
||||
0x32,
|
||||
0x3C,
|
||||
0x46,
|
||||
0x50,
|
||||
0x5A,
|
||||
0x64
|
||||
})
|
||||
}
|
||||
|
||||
The first two levels are for when laptop are on AC or on battery and are
|
||||
not used by Linux currently. The remaining 10 levels are supported levels
|
||||
that we can choose from. The applicable index values are from 0 (that
|
||||
corresponds to the 0x0A brightness value) to 9 (that corresponds to the
|
||||
0x64 brightness value) inclusive. Each of those index values is regarded
|
||||
as a "brightness level" indicator. Thus from the user space perspective
|
||||
the range of available brightness levels is from 0 to 9 (max_brightness)
|
||||
inclusive.
|
||||
|
||||
2 Notify user space about hotkey event
|
||||
|
||||
There are generally two cases for hotkey event reporting:
|
||||
i) For some laptops, when user presses the hotkey, a scancode will be
|
||||
generated and sent to user space through the input device created by
|
||||
the keyboard driver as a key type input event, with proper remap, the
|
||||
following key code will appear to user space:
|
||||
|
||||
EV_KEY, KEY_BRIGHTNESSUP
|
||||
EV_KEY, KEY_BRIGHTNESSDOWN
|
||||
etc.
|
||||
|
||||
For this case, ACPI video driver does not need to do anything(actually,
|
||||
it doesn't even know this happened).
|
||||
|
||||
ii) For some laptops, the press of the hotkey will not generate the
|
||||
scancode, instead, firmware will notify the video device ACPI node
|
||||
about the event. The event value is defined in the ACPI spec. ACPI
|
||||
video driver will generate an key type input event according to the
|
||||
notify value it received and send the event to user space through the
|
||||
input device it created:
|
||||
|
||||
event keycode
|
||||
0x86 KEY_BRIGHTNESSUP
|
||||
0x87 KEY_BRIGHTNESSDOWN
|
||||
etc.
|
||||
|
||||
so this would lead to the same effect as case i) now.
|
||||
|
||||
Once user space tool receives this event, it can modify the backlight
|
||||
level through the sysfs interface.
|
||||
|
||||
3 Change backlight level in the kernel
|
||||
|
||||
This works for machines covered by case ii) in Section 2. Once the driver
|
||||
received a notification, it will set the backlight level accordingly. This does
|
||||
not affect the sending of event to user space, they are always sent to user
|
||||
space regardless of whether or not the video module controls the backlight level
|
||||
directly. This behaviour can be controlled through the brightness_switch_enabled
|
||||
module parameter as documented in kernel-parameters.txt. It is recommended to
|
||||
disable this behaviour once a GUI environment starts up and wants to have full
|
||||
control of the backlight level.
|
||||
@@ -23,4 +23,4 @@ SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k", GROUP="disk", MODE="02
|
||||
SUBSYSTEM=="aoe", KERNEL=="flush", NAME="etherd/%k", GROUP="disk", MODE="0220"
|
||||
|
||||
# aoe block devices
|
||||
KERNEL=="etherd*", NAME="%k", GROUP="disk"
|
||||
KERNEL=="etherd*", GROUP="disk"
|
||||
|
||||
+32
-10
@@ -18,7 +18,8 @@ following:
|
||||
2. Initialise one serial port.
|
||||
3. Detect the machine type.
|
||||
4. Setup the kernel tagged list.
|
||||
5. Call the kernel image.
|
||||
5. Load initramfs.
|
||||
6. Call the kernel image.
|
||||
|
||||
|
||||
1. Setup and initialise RAM
|
||||
@@ -120,12 +121,27 @@ 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.
|
||||
overwrite it, whilst remaining within the region which will be covered
|
||||
by the kernel's low-memory mapping.
|
||||
|
||||
5. Calling the kernel image
|
||||
A safe location is just above the 128MiB boundary from start of RAM.
|
||||
|
||||
5. Load initramfs.
|
||||
------------------
|
||||
|
||||
Existing boot loaders: OPTIONAL
|
||||
New boot loaders: OPTIONAL
|
||||
|
||||
If an initramfs is in use then, as with the dtb, it must be placed in
|
||||
a region of memory where the kernel decompressor will not overwrite it
|
||||
while also with the region which will be covered by the kernel's
|
||||
low-memory mapping.
|
||||
|
||||
A safe location is just above the device tree blob which itself will
|
||||
be loaded just above the 128MiB boundary from the start of RAM as
|
||||
recommended above.
|
||||
|
||||
6. Calling the kernel image
|
||||
---------------------------
|
||||
|
||||
Existing boot loaders: MANDATORY
|
||||
@@ -136,11 +152,17 @@ is stored in flash, and is linked correctly to be run from flash,
|
||||
then it is legal for the boot loader to call the zImage in flash
|
||||
directly.
|
||||
|
||||
The zImage may also be placed in system RAM (at any location) and
|
||||
called there. Note that the kernel uses 16K of RAM below the image
|
||||
to store page tables. The recommended placement is 32KiB into RAM.
|
||||
The zImage may also be placed in system RAM and called there. The
|
||||
kernel should be placed in the first 128MiB of RAM. It is recommended
|
||||
that it is loaded above 32MiB in order to avoid the need to relocate
|
||||
prior to decompression, which will make the boot process slightly
|
||||
faster.
|
||||
|
||||
In either case, the following conditions must be met:
|
||||
When booting a raw (non-zImage) kernel the constraints are tighter.
|
||||
In this case the kernel must be loaded at an offset into system equal
|
||||
to TEXT_OFFSET - PAGE_OFFSET.
|
||||
|
||||
In any case, the following conditions must be met:
|
||||
|
||||
- Quiesce all DMA capable devices so that memory does not get
|
||||
corrupted by bogus network packets or disk data. This will save
|
||||
|
||||
@@ -36,7 +36,7 @@ Linux currently supports the following features on the IXP4xx chips:
|
||||
- Timers (watchdog, OS)
|
||||
|
||||
The following components of the chips are not supported by Linux and
|
||||
require the use of Intel's proprietary CSR softare:
|
||||
require the use of Intel's proprietary CSR software:
|
||||
|
||||
- USB device interface
|
||||
- Network interfaces (HSS, Utopia, NPEs, etc)
|
||||
|
||||
@@ -78,7 +78,7 @@ to NULL. Drivers should use the following idiom:
|
||||
The most common usage of these functions will probably be to specify
|
||||
the maximum time from when an interrupt occurs, to when the device
|
||||
becomes accessible. To accomplish this, driver writers should use the
|
||||
set_max_mpu_wakeup_lat() function to to constrain the MPU wakeup
|
||||
set_max_mpu_wakeup_lat() function to constrain the MPU wakeup
|
||||
latency, and the set_max_dev_wakeup_lat() function to constrain the
|
||||
device wakeup latency (from clk_enable() to accessibility). For
|
||||
example,
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
Kernel mode NEON
|
||||
================
|
||||
|
||||
TL;DR summary
|
||||
-------------
|
||||
* Use only NEON instructions, or VFP instructions that don't rely on support
|
||||
code
|
||||
* Isolate your NEON code in a separate compilation unit, and compile it with
|
||||
'-mfpu=neon -mfloat-abi=softfp'
|
||||
* Put kernel_neon_begin() and kernel_neon_end() calls around the calls into your
|
||||
NEON code
|
||||
* Don't sleep in your NEON code, and be aware that it will be executed with
|
||||
preemption disabled
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
It is possible to use NEON instructions (and in some cases, VFP instructions) in
|
||||
code that runs in kernel mode. However, for performance reasons, the NEON/VFP
|
||||
register file is not preserved and restored at every context switch or taken
|
||||
exception like the normal register file is, so some manual intervention is
|
||||
required. Furthermore, special care is required for code that may sleep [i.e.,
|
||||
may call schedule()], as NEON or VFP instructions will be executed in a
|
||||
non-preemptible section for reasons outlined below.
|
||||
|
||||
|
||||
Lazy preserve and restore
|
||||
-------------------------
|
||||
The NEON/VFP register file is managed using lazy preserve (on UP systems) and
|
||||
lazy restore (on both SMP and UP systems). This means that the register file is
|
||||
kept 'live', and is only preserved and restored when multiple tasks are
|
||||
contending for the NEON/VFP unit (or, in the SMP case, when a task migrates to
|
||||
another core). Lazy restore is implemented by disabling the NEON/VFP unit after
|
||||
every context switch, resulting in a trap when subsequently a NEON/VFP
|
||||
instruction is issued, allowing the kernel to step in and perform the restore if
|
||||
necessary.
|
||||
|
||||
Any use of the NEON/VFP unit in kernel mode should not interfere with this, so
|
||||
it is required to do an 'eager' preserve of the NEON/VFP register file, and
|
||||
enable the NEON/VFP unit explicitly so no exceptions are generated on first
|
||||
subsequent use. This is handled by the function kernel_neon_begin(), which
|
||||
should be called before any kernel mode NEON or VFP instructions are issued.
|
||||
Likewise, the NEON/VFP unit should be disabled again after use to make sure user
|
||||
mode will hit the lazy restore trap upon next use. This is handled by the
|
||||
function kernel_neon_end().
|
||||
|
||||
|
||||
Interruptions in kernel mode
|
||||
----------------------------
|
||||
For reasons of performance and simplicity, it was decided that there shall be no
|
||||
preserve/restore mechanism for the kernel mode NEON/VFP register contents. This
|
||||
implies that interruptions of a kernel mode NEON section can only be allowed if
|
||||
they are guaranteed not to touch the NEON/VFP registers. For this reason, the
|
||||
following rules and restrictions apply in the kernel:
|
||||
* NEON/VFP code is not allowed in interrupt context;
|
||||
* NEON/VFP code is not allowed to sleep;
|
||||
* NEON/VFP code is executed with preemption disabled.
|
||||
|
||||
If latency is a concern, it is possible to put back to back calls to
|
||||
kernel_neon_end() and kernel_neon_begin() in places in your code where none of
|
||||
the NEON registers are live. (Additional calls to kernel_neon_begin() should be
|
||||
reasonably cheap if no context switch occurred in the meantime)
|
||||
|
||||
|
||||
VFP and support code
|
||||
--------------------
|
||||
Earlier versions of VFP (prior to version 3) rely on software support for things
|
||||
like IEEE-754 compliant underflow handling etc. When the VFP unit needs such
|
||||
software assistance, it signals the kernel by raising an undefined instruction
|
||||
exception. The kernel responds by inspecting the VFP control registers and the
|
||||
current instruction and arguments, and emulates the instruction in software.
|
||||
|
||||
Such software assistance is currently not implemented for VFP instructions
|
||||
executed in kernel mode. If such a condition is encountered, the kernel will
|
||||
fail and generate an OOPS.
|
||||
|
||||
|
||||
Separating NEON code from ordinary code
|
||||
---------------------------------------
|
||||
The compiler is not aware of the special significance of kernel_neon_begin() and
|
||||
kernel_neon_end(), i.e., that it is only allowed to issue NEON/VFP instructions
|
||||
between calls to these respective functions. Furthermore, GCC may generate NEON
|
||||
instructions of its own at -O3 level if -mfpu=neon is selected, and even if the
|
||||
kernel is currently compiled at -O2, future changes may result in NEON/VFP
|
||||
instructions appearing in unexpected places if no special care is taken.
|
||||
|
||||
Therefore, the recommended and only supported way of using NEON/VFP in the
|
||||
kernel is by adhering to the following rules:
|
||||
* isolate the NEON code in a separate compilation unit and compile it with
|
||||
'-mfpu=neon -mfloat-abi=softfp';
|
||||
* issue the calls to kernel_neon_begin(), kernel_neon_end() as well as the calls
|
||||
into the unit containing the NEON code from a compilation unit which is *not*
|
||||
built with the GCC flag '-mfpu=neon' set.
|
||||
|
||||
As the kernel is compiled with '-msoft-float', the above will guarantee that
|
||||
both NEON and VFP instructions will only ever appear in designated compilation
|
||||
units at any optimization level.
|
||||
|
||||
|
||||
NEON assembler
|
||||
--------------
|
||||
NEON assembler is supported with no additional caveats as long as the rules
|
||||
above are followed.
|
||||
|
||||
|
||||
NEON code generated by GCC
|
||||
--------------------------
|
||||
The GCC option -ftree-vectorize (implied by -O3) tries to exploit implicit
|
||||
parallelism, and generates NEON code from ordinary C source code. This is fully
|
||||
supported as long as the rules above are followed.
|
||||
|
||||
|
||||
NEON intrinsics
|
||||
---------------
|
||||
NEON intrinsics are also supported. However, as code using NEON intrinsics
|
||||
relies on the GCC header <arm_neon.h>, (which #includes <stdint.h>), you should
|
||||
observe the following in addition to the rules above:
|
||||
* Compile the unit containing the NEON intrinsics with '-ffreestanding' so GCC
|
||||
uses its builtin version of <stdint.h> (this is a C99 header which the kernel
|
||||
does not supply);
|
||||
* Include <arm_neon.h> last, or at least after <linux/types.h>
|
||||
@@ -0,0 +1,33 @@
|
||||
STi ARM Linux Overview
|
||||
==========================
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
The ST Microelectronics Multimedia and Application Processors range of
|
||||
CortexA9 System-on-Chip are supported by the 'STi' platform of
|
||||
ARM Linux. Currently STiH415, STiH416 SOCs are supported with both
|
||||
B2000 and B2020 Reference boards.
|
||||
|
||||
|
||||
configuration
|
||||
-------------
|
||||
|
||||
A generic configuration is provided for both STiH415/416, and can be used as the
|
||||
default by
|
||||
make stih41x_defconfig
|
||||
|
||||
Layout
|
||||
------
|
||||
All the files for multiple machine families (STiH415, STiH416, and STiG125)
|
||||
are located in the platform code contained in arch/arm/mach-sti
|
||||
|
||||
There is a generic board board-dt.c in the mach folder which support
|
||||
Flattened Device Tree, which means, It works with any compatible board with
|
||||
Device Trees.
|
||||
|
||||
|
||||
Document Author
|
||||
---------------
|
||||
|
||||
Srinivas Kandagatla <srinivas.kandagatla@st.com>, (c) 2013 ST Microelectronics
|
||||
@@ -0,0 +1,12 @@
|
||||
STiH415 Overview
|
||||
================
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
The STiH415 is the next generation of HD, AVC set-top box processors
|
||||
for satellite, cable, terrestrial and IP-STB markets.
|
||||
|
||||
Features
|
||||
- ARM Cortex-A9 1.0 GHz, dual-core CPU
|
||||
- SATA2x2,USB 2.0x3, PCIe, Gbit Ethernet MACx2
|
||||
@@ -0,0 +1,12 @@
|
||||
STiH416 Overview
|
||||
================
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
The STiH416 is the next generation of HD, AVC set-top box processors
|
||||
for satellite, cable, terrestrial and IP-STB markets.
|
||||
|
||||
Features
|
||||
- ARM Cortex-A9 1.2 GHz dual core CPU
|
||||
- SATA2x2,USB 2.0x3, PCIe, Gbit Ethernet MACx2
|
||||
@@ -3,17 +3,26 @@ ARM Allwinner SoCs
|
||||
|
||||
This document lists all the ARM Allwinner SoCs that are currently
|
||||
supported in mainline by the Linux kernel. This document will also
|
||||
provide links to documentation and or datasheet for these SoCs.
|
||||
provide links to documentation and/or datasheet for these SoCs.
|
||||
|
||||
SunXi family
|
||||
------------
|
||||
Linux kernel mach directory: arch/arm/mach-sunxi
|
||||
|
||||
Flavors:
|
||||
Allwinner A10 (sun4i)
|
||||
Datasheet : http://dl.linux-sunxi.org/A10/A10%20Datasheet%20-%20v1.21%20%282012-04-06%29.pdf
|
||||
* ARM Cortex-A8 based SoCs
|
||||
- Allwinner A10 (sun4i)
|
||||
+ Datasheet
|
||||
http://dl.linux-sunxi.org/A10/A10%20Datasheet%20-%20v1.21%20%282012-04-06%29.pdf
|
||||
+ User Manual
|
||||
http://dl.linux-sunxi.org/A10/A10%20User%20Manual%20-%20v1.20%20%282012-04-09%2c%20DECRYPTED%29.pdf
|
||||
|
||||
Allwinner A13 (sun5i)
|
||||
Datasheet : http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
|
||||
- Allwinner A10s (sun5i)
|
||||
+ Datasheet
|
||||
http://dl.linux-sunxi.org/A10s/A10s%20Datasheet%20-%20v1.20%20%282012-03-27%29.pdf
|
||||
|
||||
Core: Cortex A8
|
||||
Linux kernel mach directory: arch/arm/mach-sunxi
|
||||
- Allwinner A13 (sun5i)
|
||||
+ Datasheet
|
||||
http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
|
||||
+ User Manual
|
||||
http://dl.linux-sunxi.org/A13/A13%20User%20Manual%20-%20v1.2%20%282013-08-08%29.pdf
|
||||
|
||||
@@ -45,9 +45,9 @@ sees fit.)
|
||||
|
||||
Requirement: MANDATORY
|
||||
|
||||
The device tree blob (dtb) must be no bigger than 2 megabytes in size
|
||||
and placed at a 2-megabyte boundary within the first 512 megabytes from
|
||||
the start of the kernel image. This is to allow the kernel to map the
|
||||
The device tree blob (dtb) must be placed on an 8-byte boundary within
|
||||
the first 512 megabytes from the start of the kernel image and must not
|
||||
cross a 2-megabyte boundary. This is to allow the kernel to map the
|
||||
blob using a single section mapping in the initial page tables.
|
||||
|
||||
|
||||
@@ -68,13 +68,23 @@ Image target is available instead.
|
||||
|
||||
Requirement: MANDATORY
|
||||
|
||||
The decompressed kernel image contains a 32-byte header as follows:
|
||||
The decompressed kernel image contains a 64-byte header as follows:
|
||||
|
||||
u32 magic = 0x14000008; /* branch to stext, little-endian */
|
||||
u32 res0 = 0; /* reserved */
|
||||
u32 code0; /* Executable code */
|
||||
u32 code1; /* Executable code */
|
||||
u64 text_offset; /* Image load offset */
|
||||
u64 res0 = 0; /* reserved */
|
||||
u64 res1 = 0; /* reserved */
|
||||
u64 res2 = 0; /* reserved */
|
||||
u64 res3 = 0; /* reserved */
|
||||
u64 res4 = 0; /* reserved */
|
||||
u32 magic = 0x644d5241; /* Magic number, little endian, "ARM\x64" */
|
||||
u32 res5 = 0; /* reserved */
|
||||
|
||||
|
||||
Header notes:
|
||||
|
||||
- code0/code1 are responsible for branching to stext.
|
||||
|
||||
The image must be placed at the specified offset (currently 0x80000)
|
||||
from the start of the system RAM and called there. The start of the
|
||||
|
||||
@@ -73,3 +73,10 @@ Translation table lookup with 64KB pages:
|
||||
| | +--------------------------> [41:29] L2 index (only 38:29 used)
|
||||
| +-------------------------------> [47:42] L1 index (not used)
|
||||
+-------------------------------------------------> [63] TTBR0/1
|
||||
|
||||
When using KVM, the hypervisor maps kernel pages in EL2, at a fixed
|
||||
offset from the kernel VA (top 24bits of the kernel VA set to zero):
|
||||
|
||||
Start End Size Use
|
||||
-----------------------------------------------------------------------
|
||||
0000004000000000 0000007fffffffff 256GB kernel objects mapped in HYP
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
Tagged virtual addresses in AArch64 Linux
|
||||
=========================================
|
||||
|
||||
Author: Will Deacon <will.deacon@arm.com>
|
||||
Date : 12 June 2013
|
||||
|
||||
This document briefly describes the provision of tagged virtual
|
||||
addresses in the AArch64 translation system and their potential uses
|
||||
in AArch64 Linux.
|
||||
|
||||
The kernel configures the translation tables so that translations made
|
||||
via TTBR0 (i.e. userspace mappings) have the top byte (bits 63:56) of
|
||||
the virtual address ignored by the translation hardware. This frees up
|
||||
this byte for application use, with the following caveats:
|
||||
|
||||
(1) The kernel requires that all user addresses passed to EL1
|
||||
are tagged with tag 0x00. This means that any syscall
|
||||
parameters containing user virtual addresses *must* have
|
||||
their top byte cleared before trapping to the kernel.
|
||||
|
||||
(2) Non-zero tags are not preserved when delivering signals.
|
||||
This means that signal handlers in applications making use
|
||||
of tags cannot rely on the tag information for user virtual
|
||||
addresses being maintained for fields inside siginfo_t.
|
||||
One exception to this rule is for signals raised in response
|
||||
to watchpoint debug exceptions, where the tag information
|
||||
will be preserved.
|
||||
|
||||
(3) Special care should be taken when using tagged pointers,
|
||||
since it is likely that C compilers will not hazard two
|
||||
virtual addresses differing only in the upper byte.
|
||||
|
||||
The architecture prevents the use of a tagged PC, so the upper byte will
|
||||
be set to a sign-extension of bit 55 on exception return.
|
||||
+38
-21
@@ -46,29 +46,33 @@ you format your backing devices and cache device at the same time, you won't
|
||||
have to manually attach:
|
||||
make-bcache -B /dev/sda /dev/sdb -C /dev/sdc
|
||||
|
||||
To make bcache devices known to the kernel, echo them to /sys/fs/bcache/register:
|
||||
bcache-tools now ships udev rules, and bcache devices are known to the kernel
|
||||
immediately. Without udev, you can manually register devices like this:
|
||||
|
||||
echo /dev/sdb > /sys/fs/bcache/register
|
||||
echo /dev/sdc > /sys/fs/bcache/register
|
||||
|
||||
To register your bcache devices automatically, you could add something like
|
||||
this to an init script:
|
||||
Registering the backing device makes the bcache device show up in /dev; you can
|
||||
now format it and use it as normal. But the first time using a new bcache
|
||||
device, it'll be running in passthrough mode until you attach it to a cache.
|
||||
See the section on attaching.
|
||||
|
||||
echo /dev/sd* > /sys/fs/bcache/register_quiet
|
||||
The devices show up as:
|
||||
|
||||
It'll look for bcache superblocks and ignore everything that doesn't have one.
|
||||
/dev/bcache<N>
|
||||
|
||||
Registering the backing device makes the bcache show up in /dev; you can now
|
||||
format it and use it as normal. But the first time using a new bcache device,
|
||||
it'll be running in passthrough mode until you attach it to a cache. See the
|
||||
section on attaching.
|
||||
As well as (with udev):
|
||||
|
||||
The devices show up at /dev/bcacheN, and can be controlled via sysfs from
|
||||
/sys/block/bcacheN/bcache:
|
||||
/dev/bcache/by-uuid/<uuid>
|
||||
/dev/bcache/by-label/<label>
|
||||
|
||||
To get started:
|
||||
|
||||
mkfs.ext4 /dev/bcache0
|
||||
mount /dev/bcache0 /mnt
|
||||
|
||||
You can control bcache devices through sysfs at /sys/block/bcache<N>/bcache .
|
||||
|
||||
Cache devices are managed as sets; multiple caches per set isn't supported yet
|
||||
but will allow for mirroring of metadata and dirty data in the future. Your new
|
||||
cache set shows up as /sys/fs/bcache/<UUID>
|
||||
@@ -80,11 +84,11 @@ must be attached to your cache set to enable caching. Attaching a backing
|
||||
device to a cache set is done thusly, with the UUID of the cache set in
|
||||
/sys/fs/bcache:
|
||||
|
||||
echo <UUID> > /sys/block/bcache0/bcache/attach
|
||||
echo <CSET-UUID> > /sys/block/bcache0/bcache/attach
|
||||
|
||||
This only has to be done once. The next time you reboot, just reregister all
|
||||
your bcache devices. If a backing device has data in a cache somewhere, the
|
||||
/dev/bcache# device won't be created until the cache shows up - particularly
|
||||
/dev/bcache<N> device won't be created until the cache shows up - particularly
|
||||
important if you have writeback caching turned on.
|
||||
|
||||
If you're booting up and your cache device is gone and never coming back, you
|
||||
@@ -181,7 +185,7 @@ want for getting the best possible numbers when benchmarking.
|
||||
|
||||
In practice this isn't an issue because as soon as a write comes along it'll
|
||||
cause the btree node to be split, and you need almost no write traffic for
|
||||
this to not show up enough to be noticable (especially since bcache's btree
|
||||
this to not show up enough to be noticeable (especially since bcache's btree
|
||||
nodes are huge and index large regions of the device). But when you're
|
||||
benchmarking, if you're trying to warm the cache by reading a bunch of data
|
||||
and there's no other traffic - that can be a problem.
|
||||
@@ -191,6 +195,9 @@ want for getting the best possible numbers when benchmarking.
|
||||
|
||||
SYSFS - BACKING DEVICE:
|
||||
|
||||
Available at /sys/block/<bdev>/bcache, /sys/block/bcache*/bcache and
|
||||
(if attached) /sys/fs/bcache/<cset-uuid>/bdev*
|
||||
|
||||
attach
|
||||
Echo the UUID of a cache set to this file to enable caching.
|
||||
|
||||
@@ -222,7 +229,7 @@ running
|
||||
it's in passthrough mode or caching).
|
||||
|
||||
sequential_cutoff
|
||||
A sequential IO will bypass the cache once it passes this threshhold; the
|
||||
A sequential IO will bypass the cache once it passes this threshold; the
|
||||
most recent 128 IOs are tracked so sequential IO can be detected even when
|
||||
it isn't all done at once.
|
||||
|
||||
@@ -296,10 +303,12 @@ cache_miss_collisions
|
||||
since the synchronization for cache misses was rewritten)
|
||||
|
||||
cache_readaheads
|
||||
Count of times readahead occured.
|
||||
Count of times readahead occurred.
|
||||
|
||||
SYSFS - CACHE SET:
|
||||
|
||||
Available at /sys/fs/bcache/<cset-uuid>
|
||||
|
||||
average_key_size
|
||||
Average data per key in the btree.
|
||||
|
||||
@@ -319,7 +328,10 @@ cache<0..n>
|
||||
Symlink to each of the cache devices comprising this cache set.
|
||||
|
||||
cache_available_percent
|
||||
Percentage of cache device free.
|
||||
Percentage of cache device which doesn't contain dirty data, and could
|
||||
potentially be used for writeback. This doesn't mean this space isn't used
|
||||
for clean cached data; the unused statistic (in priority_stats) is typically
|
||||
much lower.
|
||||
|
||||
clear_stats
|
||||
Clears the statistics associated with this cache
|
||||
@@ -359,7 +371,7 @@ unregister
|
||||
SYSFS - CACHE SET INTERNAL:
|
||||
|
||||
This directory also exposes timings for a number of internal operations, with
|
||||
separate files for average duration, average frequency, last occurence and max
|
||||
separate files for average duration, average frequency, last occurrence and max
|
||||
duration: garbage collection, btree read, btree node sorts and btree splits.
|
||||
|
||||
active_journal_entries
|
||||
@@ -387,6 +399,8 @@ trigger_gc
|
||||
|
||||
SYSFS - CACHE DEVICE:
|
||||
|
||||
Available at /sys/block/<cdev>/bcache
|
||||
|
||||
block_size
|
||||
Minimum granularity of writes - should match hardware sector size.
|
||||
|
||||
@@ -414,7 +428,7 @@ freelist_percent
|
||||
space.
|
||||
|
||||
io_errors
|
||||
Number of errors that have occured, decayed by io_error_halflife.
|
||||
Number of errors that have occurred, decayed by io_error_halflife.
|
||||
|
||||
metadata_written
|
||||
Sum of all non data writes (btree writes and all other metadata).
|
||||
@@ -423,8 +437,11 @@ nbuckets
|
||||
Total buckets in this cache
|
||||
|
||||
priority_stats
|
||||
Statistics about how recently data in the cache has been accessed. This can
|
||||
reveal your working set size.
|
||||
Statistics about how recently data in the cache has been accessed.
|
||||
This can reveal your working set size. Unused is the percentage of
|
||||
the cache that doesn't contain any data. Metadata is bcache's
|
||||
metadata overhead. Average is the average priority of cache buckets.
|
||||
Next is a list of quantiles with the priority threshold of each.
|
||||
|
||||
written
|
||||
Sum of all data that has been written to the cache; comparison with
|
||||
|
||||
@@ -6,6 +6,8 @@ capability.txt
|
||||
- Generic Block Device Capability (/sys/block/<device>/capability)
|
||||
cfq-iosched.txt
|
||||
- CFQ IO scheduler tunables
|
||||
cmdline-partition.txt
|
||||
- how to specify block device partitions on kernel command line
|
||||
data-integrity.txt
|
||||
- Block data integrity
|
||||
deadline-iosched.txt
|
||||
|
||||
@@ -69,7 +69,7 @@ one, this value should be decreased relative to fifo_expire_async.
|
||||
group_idle
|
||||
-----------
|
||||
This parameter forces idling at the CFQ group level instead of CFQ
|
||||
queue level. This was introduced after after a bottleneck was observed
|
||||
queue level. This was introduced after a bottleneck was observed
|
||||
in higher end storage due to idle on sequential queue and allow dispatch
|
||||
from a single queue. The idea with this parameter is that it can be run with
|
||||
slice_idle=0 and group_idle=8, so that idling does not happen on individual
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
Embedded device command line partition parsing
|
||||
=====================================================================
|
||||
|
||||
Support for reading the block device partition table from the command line.
|
||||
It is typically used for fixed block (eMMC) embedded devices.
|
||||
It has no MBR, so saves storage space. Bootloader can be easily accessed
|
||||
by absolute address of data on the block device.
|
||||
Users can easily change the partition.
|
||||
|
||||
The format for the command line is just like mtdparts:
|
||||
|
||||
blkdevparts=<blkdev-def>[;<blkdev-def>]
|
||||
<blkdev-def> := <blkdev-id>:<partdef>[,<partdef>]
|
||||
<partdef> := <size>[@<offset>](part-name)
|
||||
|
||||
<blkdev-id>
|
||||
block device disk name, embedded device used fixed block device,
|
||||
it's disk name also fixed. such as: mmcblk0, mmcblk1, mmcblk0boot0.
|
||||
|
||||
<size>
|
||||
partition size, in bytes, such as: 512, 1m, 1G.
|
||||
|
||||
<offset>
|
||||
partition start address, in bytes.
|
||||
|
||||
(part-name)
|
||||
partition name, kernel send uevent with "PARTNAME". application can create
|
||||
a link to block device partition with the name "PARTNAME".
|
||||
user space application can access partition by partition name.
|
||||
|
||||
Example:
|
||||
eMMC disk name is "mmcblk0" and "mmcblk0boot0"
|
||||
|
||||
bootargs:
|
||||
'blkdevparts=mmcblk0:1G(data0),1G(data1),-;mmcblk0boot0:1m(boot),-(kernel)'
|
||||
|
||||
dmesg:
|
||||
mmcblk0: p1(data0) p2(data1) p3()
|
||||
mmcblk0boot0: p1(boot) p2(kernel)
|
||||
@@ -93,7 +93,7 @@ To avoid priority inversion through request starvation, a request
|
||||
queue maintains a separate request pool per each cgroup when
|
||||
CONFIG_BLK_CGROUP is enabled, and this parameter applies to each such
|
||||
per-block-cgroup request pool. IOW, if there are N block cgroups,
|
||||
each request queue may have upto N request pools, each independently
|
||||
each request queue may have up to N request pools, each independently
|
||||
regulated by nr_requests.
|
||||
|
||||
optimal_io_size (RO)
|
||||
|
||||
@@ -57,7 +57,7 @@ changes occur:
|
||||
interface must make sure that any previous page table
|
||||
modifications for the address space 'vma->vm_mm' in the range
|
||||
'start' to 'end-1' will be visible to the cpu. That is, after
|
||||
running, here will be no entries in the TLB for 'mm' for
|
||||
running, there will be no entries in the TLB for 'mm' for
|
||||
virtual addresses in the range 'start' to 'end-1'.
|
||||
|
||||
The "vma" is the backing store being used for the region.
|
||||
@@ -375,8 +375,8 @@ maps this page at its virtual address.
|
||||
|
||||
void flush_icache_page(struct vm_area_struct *vma, struct page *page)
|
||||
All the functionality of flush_icache_page can be implemented in
|
||||
flush_dcache_page and update_mmu_cache. In 2.7 the hope is to
|
||||
remove this interface completely.
|
||||
flush_dcache_page and update_mmu_cache. In the future, the hope
|
||||
is to remove this interface completely.
|
||||
|
||||
The final category of APIs is for I/O to deliberately aliased address
|
||||
ranges inside the kernel. Such aliases are set up by use of the
|
||||
|
||||
@@ -94,11 +94,13 @@ Throttling/Upper Limit policy
|
||||
|
||||
Hierarchical Cgroups
|
||||
====================
|
||||
- Currently only CFQ supports hierarchical groups. For throttling,
|
||||
cgroup interface does allow creation of hierarchical cgroups and
|
||||
internally it treats them as flat hierarchy.
|
||||
|
||||
If somebody created a hierarchy like as follows.
|
||||
Both CFQ and throttling implement hierarchy support; however,
|
||||
throttling's hierarchy support is enabled iff "sane_behavior" is
|
||||
enabled from cgroup side, which currently is a development option and
|
||||
not publicly available.
|
||||
|
||||
If somebody created a hierarchy like as follows.
|
||||
|
||||
root
|
||||
/ \
|
||||
@@ -106,21 +108,20 @@ Hierarchical Cgroups
|
||||
|
|
||||
test3
|
||||
|
||||
CFQ will handle the hierarchy correctly but and throttling will
|
||||
practically treat all groups at same level. For details on CFQ
|
||||
hierarchy support, refer to Documentation/block/cfq-iosched.txt.
|
||||
Throttling will treat the hierarchy as if it looks like the
|
||||
following.
|
||||
CFQ by default and throttling with "sane_behavior" will handle the
|
||||
hierarchy correctly. For details on CFQ hierarchy support, refer to
|
||||
Documentation/block/cfq-iosched.txt. For throttling, all limits apply
|
||||
to the whole subtree while all statistics are local to the IOs
|
||||
directly generated by tasks in that cgroup.
|
||||
|
||||
Throttling without "sane_behavior" enabled from cgroup side will
|
||||
practically treat all groups at same level as if it looks like the
|
||||
following.
|
||||
|
||||
pivot
|
||||
/ / \ \
|
||||
root test1 test2 test3
|
||||
|
||||
Nesting cgroups, while allowed, isn't officially supported and blkio
|
||||
genereates warning when cgroups nest. Once throttling implements
|
||||
hierarchy support, hierarchy will be supported and the warning will
|
||||
be removed.
|
||||
|
||||
Various user visible config options
|
||||
===================================
|
||||
CONFIG_BLK_CGROUP
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user