Merge branch 'next' into for-linus
Prepare input updates for 3.16.
This commit is contained in:
Коммит
a292241ccc
1
.mailmap
1
.mailmap
|
@ -99,6 +99,7 @@ Sachin P Sant <ssant@in.ibm.com>
|
|||
Sam Ravnborg <sam@mars.ravnborg.org>
|
||||
Sascha Hauer <s.hauer@pengutronix.de>
|
||||
S.Çağlar Onur <caglar@pardus.org.tr>
|
||||
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
|
||||
Simon Kelley <simon@thekelleys.org.uk>
|
||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||
Stephen Hemminger <shemminger@osdl.org>
|
||||
|
|
18
CREDITS
18
CREDITS
|
@ -630,6 +630,13 @@ N: Michael Elizabeth Chastain
|
|||
E: mec@shout.net
|
||||
D: Configure, Menuconfig, xconfig
|
||||
|
||||
N: Mauro Carvalho Chehab
|
||||
E: m.chehab@samsung.org
|
||||
E: mchehab@infradead.org
|
||||
D: Media subsystem (V4L/DVB) drivers and core
|
||||
D: EDAC drivers and EDAC 3.0 core rework
|
||||
S: Brazil
|
||||
|
||||
N: Raymond Chen
|
||||
E: raymondc@microsoft.com
|
||||
D: Author of Configure script
|
||||
|
@ -1229,7 +1236,7 @@ E: philip@gladstonefamily.net
|
|||
D: Kernel / timekeeping stuff
|
||||
S: Carlisle, MA 01741
|
||||
S: USA
|
||||
|
||||
|
||||
N: Jan-Benedict Glaw
|
||||
E: jbglaw@lug-owl.de
|
||||
D: SRM environment driver (for Alpha systems)
|
||||
|
@ -2560,10 +2567,14 @@ S: 22 Seaview St
|
|||
S: Fullarton 5063
|
||||
S: South Australia
|
||||
|
||||
N. Wolfgang Muees
|
||||
N: Wolfgang Muees
|
||||
E: wolfgang@iksw-muees.de
|
||||
D: Auerswald USB driver
|
||||
|
||||
N: Paul Mundt
|
||||
E: paul.mundt@gmail.com
|
||||
D: SuperH maintainer
|
||||
|
||||
N: Ian A. Murdock
|
||||
E: imurdock@gnu.ai.mit.edu
|
||||
D: Creator of Debian distribution
|
||||
|
@ -2707,6 +2718,9 @@ N: Greg Page
|
|||
E: gpage@sovereign.org
|
||||
D: IPX development and support
|
||||
|
||||
N: Venkatesh Pallipadi (Venki)
|
||||
D: x86/HPET
|
||||
|
||||
N: David Parsons
|
||||
E: orc@pell.chi.il.us
|
||||
D: improved memory detection code.
|
||||
|
|
|
@ -413,8 +413,6 @@ serial-console.txt
|
|||
- how to set up Linux with a serial line console as the default.
|
||||
sgi-ioc4.txt
|
||||
- description of the SGI IOC4 PCI (multi function) device.
|
||||
sgi-visws.txt
|
||||
- short blurb on the SGI Visual Workstations.
|
||||
sh/
|
||||
- directory with info on porting Linux to a new architecture.
|
||||
smsc_ece1099.txt
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
What: /sys/firmware/opal/dump
|
||||
Date: Feb 2014
|
||||
Contact: Stewart Smith <stewart@linux.vnet.ibm.com>
|
||||
Description:
|
||||
This directory exposes interfaces for interacting with
|
||||
the FSP and platform dumps through OPAL firmware interface.
|
||||
|
||||
This is only for the powerpc/powernv platform.
|
||||
|
||||
initiate_dump: When '1' is written to it,
|
||||
we will initiate a dump.
|
||||
Read this file for supported commands.
|
||||
|
||||
0xXX-0xYYYY: A directory for dump of type 0xXX and
|
||||
id 0xYYYY (in hex). The name of this
|
||||
directory should not be relied upon to
|
||||
be in this format, only that it's unique
|
||||
among all dumps. For determining the type
|
||||
and ID of the dump, use the id and type files.
|
||||
Do not rely on any particular size of dump
|
||||
type or dump id.
|
||||
|
||||
Each dump has the following files:
|
||||
id: An ASCII representation of the dump ID
|
||||
in hex (e.g. '0x01')
|
||||
type: An ASCII representation of the type of
|
||||
dump in the format "0x%x %s" with the ID
|
||||
in hex and a description of the dump type
|
||||
(or 'unknown').
|
||||
Type '0xffffffff unknown' is used when
|
||||
we could not get the type from firmware.
|
||||
e.g. '0x02 System/Platform Dump'
|
||||
dump: A binary file containing the dump.
|
||||
The size of the dump is the size of this file.
|
||||
acknowledge: When 'ack' is written to this, we will
|
||||
acknowledge that we've retrieved the
|
||||
dump to the service processor. It will
|
||||
then remove it, making the dump
|
||||
inaccessible.
|
||||
Reading this file will get a list of
|
||||
supported actions.
|
|
@ -0,0 +1,60 @@
|
|||
What: /sys/firmware/opal/elog
|
||||
Date: Feb 2014
|
||||
Contact: Stewart Smith <stewart@linux.vnet.ibm.com>
|
||||
Description:
|
||||
This directory exposes error log entries retrieved
|
||||
through the OPAL firmware interface.
|
||||
|
||||
Each error log is identified by a unique ID and will
|
||||
exist until explicitly acknowledged to firmware.
|
||||
|
||||
Each log entry has a directory in /sys/firmware/opal/elog.
|
||||
|
||||
Log entries may be purged by the service processor
|
||||
before retrieved by firmware or retrieved/acknowledged by
|
||||
Linux if there is no room for more log entries.
|
||||
|
||||
In the event that Linux has retrieved the log entries
|
||||
but not explicitly acknowledged them to firmware and
|
||||
the service processor needs more room for log entries,
|
||||
the only remaining copy of a log message may be in
|
||||
Linux.
|
||||
|
||||
Typically, a user space daemon will monitor for new
|
||||
entries, read them out and acknowledge them.
|
||||
|
||||
The service processor may be able to store more log
|
||||
entries than firmware can, so after you acknowledge
|
||||
an event from Linux you may instantly get another one
|
||||
from the queue that was generated some time in the past.
|
||||
|
||||
The raw log format is a binary format. We currently
|
||||
do not parse this at all in kernel, leaving it up to
|
||||
user space to solve the problem. In future, we may
|
||||
do more parsing in kernel and add more files to make
|
||||
it easier for simple user space processes to extract
|
||||
more information.
|
||||
|
||||
For each log entry (directory), there are the following
|
||||
files:
|
||||
|
||||
id: An ASCII representation of the ID of the
|
||||
error log, in hex - e.g. "0x01".
|
||||
|
||||
type: An ASCII representation of the type id and
|
||||
description of the type of error log.
|
||||
Currently just "0x00 PEL" - platform error log.
|
||||
In the future there may be additional types.
|
||||
|
||||
raw: A read-only binary file that can be read
|
||||
to get the raw log entry. These are
|
||||
<16kb, often just hundreds of bytes and
|
||||
"average" 2kb.
|
||||
|
||||
acknowledge: Writing 'ack' to this file will acknowledge
|
||||
the error log to firmware (and in turn
|
||||
the service processor, if applicable).
|
||||
Shortly after acknowledging it, the log
|
||||
entry will be removed from sysfs.
|
||||
Reading this file will list the supported
|
||||
operations (curently just acknowledge).
|
|
@ -43,6 +43,36 @@ Description:
|
|||
The invalid_io file is read-only and specifies the number of
|
||||
non-page-size-aligned I/O requests issued to this device.
|
||||
|
||||
What: /sys/block/zram<id>/failed_reads
|
||||
Date: February 2014
|
||||
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
|
||||
Description:
|
||||
The failed_reads file is read-only and specifies the number of
|
||||
failed reads happened on this device.
|
||||
|
||||
What: /sys/block/zram<id>/failed_writes
|
||||
Date: February 2014
|
||||
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
|
||||
Description:
|
||||
The failed_writes file is read-only and specifies the number of
|
||||
failed writes happened on this device.
|
||||
|
||||
What: /sys/block/zram<id>/max_comp_streams
|
||||
Date: February 2014
|
||||
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
|
||||
Description:
|
||||
The max_comp_streams file is read-write and specifies the
|
||||
number of backend's zcomp_strm compression streams (number of
|
||||
concurrent compress operations).
|
||||
|
||||
What: /sys/block/zram<id>/comp_algorithm
|
||||
Date: February 2014
|
||||
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
|
||||
Description:
|
||||
The comp_algorithm file is read-write and lets to show
|
||||
available and selected compression algorithms, change
|
||||
compression algorithm selection.
|
||||
|
||||
What: /sys/block/zram<id>/notify_free
|
||||
Date: August 2010
|
||||
Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
|
@ -53,15 +83,6 @@ Description:
|
|||
is freed. This statistic is applicable only when this disk is
|
||||
being used as a swap disk.
|
||||
|
||||
What: /sys/block/zram<id>/discard
|
||||
Date: August 2010
|
||||
Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
Description:
|
||||
The discard file is read-only and specifies the number of
|
||||
discard requests received by this device. These requests
|
||||
provide information to block device regarding blocks which are
|
||||
no longer used by filesystem.
|
||||
|
||||
What: /sys/block/zram<id>/zero_pages
|
||||
Date: August 2010
|
||||
Contact: Nitin Gupta <ngupta@vflare.org>
|
||||
|
|
|
@ -57,6 +57,523 @@ What: /sys/devices/cpu/events/PM_1PLUS_PPC_CMPL
|
|||
/sys/devices/cpu/events/PM_LD_REF_L1
|
||||
/sys/devices/cpu/events/PM_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_RUN_INST_CMPL
|
||||
/sys/devices/cpu/events/PM_IC_DEMAND_L2_BR_ALL
|
||||
/sys/devices/cpu/events/PM_GCT_UTIL_7_TO_10_SLOTS
|
||||
/sys/devices/cpu/events/PM_PMC2_SAVED
|
||||
/sys/devices/cpu/events/PM_VSU0_16FLOP
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_DERAT_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_ST_CMPL
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR3_ADD
|
||||
/sys/devices/cpu/events/PM_L2_ST_DISP
|
||||
/sys/devices/cpu/events/PM_L2_CASTOUT_MOD
|
||||
/sys/devices/cpu/events/PM_ISEG
|
||||
/sys/devices/cpu/events/PM_MRK_INST_TIMEO
|
||||
/sys/devices/cpu/events/PM_L2_RCST_DISP_FAIL_ADDR
|
||||
/sys/devices/cpu/events/PM_LSU1_DC_PREF_STREAM_CONFIRM
|
||||
/sys/devices/cpu/events/PM_IERAT_WR_64K
|
||||
/sys/devices/cpu/events/PM_MRK_DTLB_MISS_16M
|
||||
/sys/devices/cpu/events/PM_IERAT_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_FLOP
|
||||
/sys/devices/cpu/events/PM_THRD_PRIO_4_5_CYC
|
||||
/sys/devices/cpu/events/PM_BR_PRED_TA
|
||||
/sys/devices/cpu/events/PM_EXT_INT
|
||||
/sys/devices/cpu/events/PM_VSU_FSQRT_FDIV
|
||||
/sys/devices/cpu/events/PM_MRK_LD_MISS_EXPOSED_CYC
|
||||
/sys/devices/cpu/events/PM_LSU1_LDF
|
||||
/sys/devices/cpu/events/PM_IC_WRITE_ALL
|
||||
/sys/devices/cpu/events/PM_LSU0_SRQ_STFWD
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_VSU1_SCAL_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_VSU0_8FLOP
|
||||
/sys/devices/cpu/events/PM_POWER_EVENT1
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD_BAL
|
||||
/sys/devices/cpu/events/PM_VSU1_2FLOP
|
||||
/sys/devices/cpu/events/PM_LWSYNC_HELD
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_IERAT_XLATE_WR_16MPLUS
|
||||
/sys/devices/cpu/events/PM_IC_REQ_ALL
|
||||
/sys/devices/cpu/events/PM_DSLB_MISS
|
||||
/sys/devices/cpu/events/PM_L3_MISS
|
||||
/sys/devices/cpu/events/PM_LSU0_L1_PREF
|
||||
/sys/devices/cpu/events/PM_VSU_SCALAR_SINGLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_LSU1_DC_PREF_STREAM_CONFIRM_STRIDE
|
||||
/sys/devices/cpu/events/PM_L2_INST
|
||||
/sys/devices/cpu/events/PM_VSU0_FRSP
|
||||
/sys/devices/cpu/events/PM_FLUSH_DISP
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_VSU1_DQ_ISSUED
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_LSU_FLUSH_ULD
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_MRK_DERAT_MISS_16M
|
||||
/sys/devices/cpu/events/PM_THRD_ALL_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_MEM0_PREFETCH_DISP
|
||||
/sys/devices/cpu/events/PM_MRK_STALL_CMPLU_CYC_COUNT
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_VSU_FRSP
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_PMC1_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_VSU0_SINGLE
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_VSU0_VECTOR_SP_ISSUED
|
||||
/sys/devices/cpu/events/PM_VSU1_FEST
|
||||
/sys/devices/cpu/events/PM_MRK_INST_DISP
|
||||
/sys/devices/cpu/events/PM_VSU0_COMPLEX_ISSUED
|
||||
/sys/devices/cpu/events/PM_LSU1_FLUSH_UST
|
||||
/sys/devices/cpu/events/PM_FXU_IDLE
|
||||
/sys/devices/cpu/events/PM_LSU0_FLUSH_ULD
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_LSU_LMQ_SRQ_EMPTY_ALL_CYC
|
||||
/sys/devices/cpu/events/PM_LSU1_REJECT_LMQ_FULL
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_INST_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_SHL_CREATED
|
||||
/sys/devices/cpu/events/PM_L2_ST_HIT
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_L3_LD_MISS
|
||||
/sys/devices/cpu/events/PM_FXU1_BUSY_FXU0_IDLE
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD_RES
|
||||
/sys/devices/cpu/events/PM_L2_SN_SX_I_DONE
|
||||
/sys/devices/cpu/events/PM_STCX_CMPL
|
||||
/sys/devices/cpu/events/PM_VSU0_2FLOP
|
||||
/sys/devices/cpu/events/PM_L3_PREF_MISS
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_SYNC_CYC
|
||||
/sys/devices/cpu/events/PM_LSU_REJECT_ERAT_MISS
|
||||
/sys/devices/cpu/events/PM_L1_ICACHE_MISS
|
||||
/sys/devices/cpu/events/PM_LSU1_FLUSH_SRQ
|
||||
/sys/devices/cpu/events/PM_LD_REF_L1_LSU0
|
||||
/sys/devices/cpu/events/PM_VSU0_FEST
|
||||
/sys/devices/cpu/events/PM_VSU_VECTOR_SINGLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_FREQ_UP
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_LSU1_LDX
|
||||
/sys/devices/cpu/events/PM_PMC3_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_MRK_BR_MPRED
|
||||
/sys/devices/cpu/events/PM_SHL_MATCH
|
||||
/sys/devices/cpu/events/PM_MRK_BR_TAKEN
|
||||
/sys/devices/cpu/events/PM_ISLB_MISS
|
||||
/sys/devices/cpu/events/PM_DISP_HELD_THERMAL
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_LSU1_SRQ_STFWD
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_VSU_2FLOP
|
||||
/sys/devices/cpu/events/PM_GCT_FULL_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L3_CYC
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_S0_ALLOC
|
||||
/sys/devices/cpu/events/PM_MRK_DERAT_MISS_4K
|
||||
/sys/devices/cpu/events/PM_BR_MPRED_TA
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_DPU_HELD_POWER
|
||||
/sys/devices/cpu/events/PM_MRK_VSU_FIN
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_S0_VALID
|
||||
/sys/devices/cpu/events/PM_GCT_EMPTY_CYC
|
||||
/sys/devices/cpu/events/PM_IOPS_DISP
|
||||
/sys/devices/cpu/events/PM_RUN_SPURR
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_VSU0_1FLOP
|
||||
/sys/devices/cpu/events/PM_SNOOP_TLBIE
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_VSU_SINGLE
|
||||
/sys/devices/cpu/events/PM_DTLB_MISS_16G
|
||||
/sys/devices/cpu/events/PM_FLUSH
|
||||
/sys/devices/cpu/events/PM_L2_LD_HIT
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR2_AND
|
||||
/sys/devices/cpu/events/PM_VSU1_1FLOP
|
||||
/sys/devices/cpu/events/PM_IC_PREF_REQ
|
||||
/sys/devices/cpu/events/PM_L3_LD_HIT
|
||||
/sys/devices/cpu/events/PM_DISP_HELD
|
||||
/sys/devices/cpu/events/PM_L2_LD
|
||||
/sys/devices/cpu/events/PM_LSU_FLUSH_SRQ
|
||||
/sys/devices/cpu/events/PM_BC_PLUS_8_CONV
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L31_MOD_CYC
|
||||
/sys/devices/cpu/events/PM_L2_RCST_BUSY_RC_FULL
|
||||
/sys/devices/cpu/events/PM_TB_BIT_TRANS
|
||||
/sys/devices/cpu/events/PM_THERMAL_MAX
|
||||
/sys/devices/cpu/events/PM_LSU1_FLUSH_ULD
|
||||
/sys/devices/cpu/events/PM_LSU1_REJECT_LHS
|
||||
/sys/devices/cpu/events/PM_LSU_LRQ_S0_ALLOC
|
||||
/sys/devices/cpu/events/PM_L3_CO_L31
|
||||
/sys/devices/cpu/events/PM_POWER_EVENT4
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_BR_UNCOND
|
||||
/sys/devices/cpu/events/PM_LSU1_DC_PREF_STREAM_ALLOC
|
||||
/sys/devices/cpu/events/PM_PMC4_REWIND
|
||||
/sys/devices/cpu/events/PM_L2_RCLD_DISP
|
||||
/sys/devices/cpu/events/PM_THRD_PRIO_2_3_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_IC_DEMAND_L2_BHT_REDIRECT
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_IC_PREF_CANCEL_L2
|
||||
/sys/devices/cpu/events/PM_MRK_FIN_STALL_CYC_COUNT
|
||||
/sys/devices/cpu/events/PM_BR_PRED_CCACHE
|
||||
/sys/devices/cpu/events/PM_GCT_UTIL_1_TO_2_SLOTS
|
||||
/sys/devices/cpu/events/PM_MRK_ST_CMPL_INT
|
||||
/sys/devices/cpu/events/PM_LSU_TWO_TABLEWALK_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_LSU_SET_MPRED
|
||||
/sys/devices/cpu/events/PM_FLUSH_DISP_TLBIE
|
||||
/sys/devices/cpu/events/PM_VSU1_FCONV
|
||||
/sys/devices/cpu/events/PM_DERAT_MISS_16G
|
||||
/sys/devices/cpu/events/PM_INST_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_IC_DEMAND_L2_BR_REDIRECT
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L2
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L2
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L21_SHR_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DTLB_MISS_4K
|
||||
/sys/devices/cpu/events/PM_VSU0_FPSCR
|
||||
/sys/devices/cpu/events/PM_VSU1_VECT_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_MEM0_RQ_DISP
|
||||
/sys/devices/cpu/events/PM_L2_LD_MISS
|
||||
/sys/devices/cpu/events/PM_VMX_RESULT_SAT_1
|
||||
/sys/devices/cpu/events/PM_L1_PREF
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_LMEM_CYC
|
||||
/sys/devices/cpu/events/PM_GRP_IC_MISS_NONSPEC
|
||||
/sys/devices/cpu/events/PM_PB_NODE_PUMP
|
||||
/sys/devices/cpu/events/PM_SHL_MERGED
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR1_ADD
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L3
|
||||
/sys/devices/cpu/events/PM_LSU_FLUSH
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_SYNC_COUNT
|
||||
/sys/devices/cpu/events/PM_PMC2_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_LSU_LDF
|
||||
/sys/devices/cpu/events/PM_POWER_EVENT3
|
||||
/sys/devices/cpu/events/PM_DISP_WT
|
||||
/sys/devices/cpu/events/PM_IC_BANK_CONFLICT
|
||||
/sys/devices/cpu/events/PM_BR_MPRED_CR_TA
|
||||
/sys/devices/cpu/events/PM_L2_INST_MISS
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR2_ADD
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FLUSH
|
||||
/sys/devices/cpu/events/PM_L2_LDST
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_VSU0_FIN
|
||||
/sys/devices/cpu/events/PM_VSU1_FCONV
|
||||
/sys/devices/cpu/events/PM_INST_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD_TLBIE
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DMEM_CYC
|
||||
/sys/devices/cpu/events/PM_BR_PRED_CR
|
||||
/sys/devices/cpu/events/PM_LSU_REJECT
|
||||
/sys/devices/cpu/events/PM_GCT_UTIL_3_TO_6_SLOTS
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_END_GCT_NOSLOT
|
||||
/sys/devices/cpu/events/PM_LSU0_REJECT_LMQ_FULL
|
||||
/sys/devices/cpu/events/PM_VSU_FEST
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR0_AND
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L3
|
||||
/sys/devices/cpu/events/PM_POWER_EVENT2
|
||||
/sys/devices/cpu/events/PM_IC_PREF_CANCEL_PAGE
|
||||
/sys/devices/cpu/events/PM_VSU0_FSQRT_FDIV
|
||||
/sys/devices/cpu/events/PM_MRK_GRP_CMPL
|
||||
/sys/devices/cpu/events/PM_VSU0_SCAL_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_GRP_DISP
|
||||
/sys/devices/cpu/events/PM_LSU0_LDX
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L2
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_VSU0_VECT_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_VSU1_2FLOP_DOUBLE
|
||||
/sys/devices/cpu/events/PM_THRD_PRIO_6_7_CYC
|
||||
/sys/devices/cpu/events/PM_BC_PLUS_8_RSLV_TAKEN
|
||||
/sys/devices/cpu/events/PM_BR_MPRED_CR
|
||||
/sys/devices/cpu/events/PM_L3_CO_MEM
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_FULL_CYC
|
||||
/sys/devices/cpu/events/PM_TABLEWALK_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_STFWD
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_FXU0_FIN
|
||||
/sys/devices/cpu/events/PM_LSU1_L1_SW_PREF
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_PMC5_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_LD_REF_L1_LSU1
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_VSU0_SCAL_SINGLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_BR_MPRED_LSTACK
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RL2L3_MOD_CYC
|
||||
/sys/devices/cpu/events/PM_LSU0_FLUSH_UST
|
||||
/sys/devices/cpu/events/PM_LSU_NCST
|
||||
/sys/devices/cpu/events/PM_BR_TAKEN
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_DTLB_MISS_4K
|
||||
/sys/devices/cpu/events/PM_PMC4_SAVED
|
||||
/sys/devices/cpu/events/PM_VSU1_PERMUTE_ISSUED
|
||||
/sys/devices/cpu/events/PM_SLB_MISS
|
||||
/sys/devices/cpu/events/PM_LSU1_FLUSH_LRQ
|
||||
/sys/devices/cpu/events/PM_DTLB_MISS
|
||||
/sys/devices/cpu/events/PM_VSU1_FRSP
|
||||
/sys/devices/cpu/events/PM_VSU_VECTOR_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_L2_CASTOUT_SHR
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_VSU1_STF
|
||||
/sys/devices/cpu/events/PM_ST_FIN
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_L2_LOC_GUESS_WRONG
|
||||
/sys/devices/cpu/events/PM_MRK_STCX_FAIL
|
||||
/sys/devices/cpu/events/PM_LSU0_REJECT_LHS
|
||||
/sys/devices/cpu/events/PM_IC_PREF_CANCEL_HIT
|
||||
/sys/devices/cpu/events/PM_L3_PREF_BUSY
|
||||
/sys/devices/cpu/events/PM_MRK_BRU_FIN
|
||||
/sys/devices/cpu/events/PM_LSU1_NCLD
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_LSU_NCLD
|
||||
/sys/devices/cpu/events/PM_LSU_LDX
|
||||
/sys/devices/cpu/events/PM_L2_LOC_GUESS_CORRECT
|
||||
/sys/devices/cpu/events/PM_THRESH_TIMEO
|
||||
/sys/devices/cpu/events/PM_L3_PREF_ST
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD_SYNC
|
||||
/sys/devices/cpu/events/PM_VSU_SIMPLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_VSU1_SINGLE
|
||||
/sys/devices/cpu/events/PM_DATA_TABLEWALK_CYC
|
||||
/sys/devices/cpu/events/PM_L2_RC_ST_DONE
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L21_MOD
|
||||
/sys/devices/cpu/events/PM_LARX_LSU1
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD
|
||||
/sys/devices/cpu/events/PM_DERAT_MISS_4K
|
||||
/sys/devices/cpu/events/PM_L2_RCLD_DISP_FAIL_ADDR
|
||||
/sys/devices/cpu/events/PM_SEG_EXCEPTION
|
||||
/sys/devices/cpu/events/PM_FLUSH_DISP_SB
|
||||
/sys/devices/cpu/events/PM_L2_DC_INV
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_DSEG
|
||||
/sys/devices/cpu/events/PM_BR_PRED_LSTACK
|
||||
/sys/devices/cpu/events/PM_VSU0_STF
|
||||
/sys/devices/cpu/events/PM_LSU_FX_FIN
|
||||
/sys/devices/cpu/events/PM_DERAT_MISS_16M
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_GCT_UTIL_11_PLUS_SLOTS
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L3
|
||||
/sys/devices/cpu/events/PM_MRK_IFU_FIN
|
||||
/sys/devices/cpu/events/PM_ITLB_MISS
|
||||
/sys/devices/cpu/events/PM_VSU_STF
|
||||
/sys/devices/cpu/events/PM_LSU_FLUSH_UST
|
||||
/sys/devices/cpu/events/PM_L2_LDST_MISS
|
||||
/sys/devices/cpu/events/PM_FXU1_FIN
|
||||
/sys/devices/cpu/events/PM_SHL_DEALLOCATED
|
||||
/sys/devices/cpu/events/PM_L2_SN_M_WR_DONE
|
||||
/sys/devices/cpu/events/PM_LSU_REJECT_SET_MPRED
|
||||
/sys/devices/cpu/events/PM_L3_PREF_LD
|
||||
/sys/devices/cpu/events/PM_L2_SN_M_RD_DONE
|
||||
/sys/devices/cpu/events/PM_MRK_DERAT_MISS_16G
|
||||
/sys/devices/cpu/events/PM_VSU_FCONV
|
||||
/sys/devices/cpu/events/PM_ANY_THRD_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_LSU_LMQ_FULL_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_REJECT_LHS
|
||||
/sys/devices/cpu/events/PM_MRK_LD_MISS_L1_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L2_CYC
|
||||
/sys/devices/cpu/events/PM_INST_IMC_MATCH_DISP
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RMEM_CYC
|
||||
/sys/devices/cpu/events/PM_VSU0_SIMPLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_VSU_FMA_DOUBLE
|
||||
/sys/devices/cpu/events/PM_VSU_4FLOP
|
||||
/sys/devices/cpu/events/PM_VSU1_FIN
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR1_AND
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_RL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_RMEM
|
||||
/sys/devices/cpu/events/PM_LSU_LRQ_S0_VALID
|
||||
/sys/devices/cpu/events/PM_LSU0_LDF
|
||||
/sys/devices/cpu/events/PM_FLUSH_COMPLETION
|
||||
/sys/devices/cpu/events/PM_ST_MISS_L1
|
||||
/sys/devices/cpu/events/PM_L2_NODE_PUMP
|
||||
/sys/devices/cpu/events/PM_INST_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_MRK_STALL_CMPLU_CYC
|
||||
/sys/devices/cpu/events/PM_VSU1_DENORM
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L31_SHR_CYC
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR0_ADD
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_EE_OFF_EXT_INT
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_INST_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_PMC6_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_VSU_2FLOP_DOUBLE
|
||||
/sys/devices/cpu/events/PM_TLB_MISS
|
||||
/sys/devices/cpu/events/PM_FXU_BUSY
|
||||
/sys/devices/cpu/events/PM_L2_RCLD_DISP_FAIL_OTHER
|
||||
/sys/devices/cpu/events/PM_LSU_REJECT_LMQ_FULL
|
||||
/sys/devices/cpu/events/PM_IC_RELOAD_SHR
|
||||
/sys/devices/cpu/events/PM_GRP_MRK
|
||||
/sys/devices/cpu/events/PM_MRK_ST_NEST
|
||||
/sys/devices/cpu/events/PM_VSU1_FSQRT_FDIV
|
||||
/sys/devices/cpu/events/PM_LSU0_FLUSH_LRQ
|
||||
/sys/devices/cpu/events/PM_LARX_LSU0
|
||||
/sys/devices/cpu/events/PM_IBUF_FULL_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DL2L3_SHR_CYC
|
||||
/sys/devices/cpu/events/PM_LSU_DC_PREF_STREAM_ALLOC
|
||||
/sys/devices/cpu/events/PM_GRP_MRK_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RL2L3_SHR_CYC
|
||||
/sys/devices/cpu/events/PM_L2_GLOB_GUESS_CORRECT
|
||||
/sys/devices/cpu/events/PM_LSU_REJECT_LHS
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_LMEM
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L3
|
||||
/sys/devices/cpu/events/PM_FREQ_DOWN
|
||||
/sys/devices/cpu/events/PM_PB_RETRY_NODE_PUMP
|
||||
/sys/devices/cpu/events/PM_INST_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_MRK_INST_ISSUED
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_RUN_PURR
|
||||
/sys/devices/cpu/events/PM_MRK_GRP_IC_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L3
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_LSU_FLUSH_LRQ
|
||||
/sys/devices/cpu/events/PM_MRK_DERAT_MISS_64K
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_DL2L3_MOD
|
||||
/sys/devices/cpu/events/PM_L2_ST_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_LWSYNC
|
||||
/sys/devices/cpu/events/PM_LSU0_DC_PREF_STREAM_CONFIRM_STRIDE
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FLUSH_LRQ
|
||||
/sys/devices/cpu/events/PM_INST_IMC_MATCH_CMPL
|
||||
/sys/devices/cpu/events/PM_NEST_PAIR3_AND
|
||||
/sys/devices/cpu/events/PM_PB_RETRY_SYS_PUMP
|
||||
/sys/devices/cpu/events/PM_MRK_INST_FIN
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_MRK_DTLB_MISS_64K
|
||||
/sys/devices/cpu/events/PM_LSU_FIN
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_REJECT
|
||||
/sys/devices/cpu/events/PM_L2_CO_FAIL_BUSY
|
||||
/sys/devices/cpu/events/PM_MEM0_WQ_DISP
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_THERMAL_WARN
|
||||
/sys/devices/cpu/events/PM_VSU0_4FLOP
|
||||
/sys/devices/cpu/events/PM_BR_MPRED_CCACHE
|
||||
/sys/devices/cpu/events/PM_L1_DEMAND_WRITE
|
||||
/sys/devices/cpu/events/PM_FLUSH_BR_MPRED
|
||||
/sys/devices/cpu/events/PM_MRK_DTLB_MISS_16G
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_L2_RCST_DISP
|
||||
/sys/devices/cpu/events/PM_LSU_PARTIAL_CDF
|
||||
/sys/devices/cpu/events/PM_DISP_CLB_HELD_SB
|
||||
/sys/devices/cpu/events/PM_VSU0_FMA_DOUBLE
|
||||
/sys/devices/cpu/events/PM_FXU0_BUSY_FXU1_IDLE
|
||||
/sys/devices/cpu/events/PM_IC_DEMAND_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FLUSH_UST
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L3MISS
|
||||
/sys/devices/cpu/events/PM_VSU_DENORM
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_PARTIAL_CDF
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_IC_PREF_WRITE
|
||||
/sys/devices/cpu/events/PM_BR_PRED
|
||||
/sys/devices/cpu/events/PM_INST_FROM_DMEM
|
||||
/sys/devices/cpu/events/PM_IC_PREF_CANCEL_ALL
|
||||
/sys/devices/cpu/events/PM_LSU_DC_PREF_STREAM_CONFIRM
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FLUSH_SRQ
|
||||
/sys/devices/cpu/events/PM_MRK_FIN_STALL_CYC
|
||||
/sys/devices/cpu/events/PM_L2_RCST_DISP_FAIL_OTHER
|
||||
/sys/devices/cpu/events/PM_VSU1_DD_ISSUED
|
||||
/sys/devices/cpu/events/PM_PTEG_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L21_SHR
|
||||
/sys/devices/cpu/events/PM_LSU0_NCLD
|
||||
/sys/devices/cpu/events/PM_VSU1_4FLOP
|
||||
/sys/devices/cpu/events/PM_VSU1_8FLOP
|
||||
/sys/devices/cpu/events/PM_VSU_8FLOP
|
||||
/sys/devices/cpu/events/PM_LSU_LMQ_SRQ_EMPTY_CYC
|
||||
/sys/devices/cpu/events/PM_DTLB_MISS_64K
|
||||
/sys/devices/cpu/events/PM_THRD_CONC_RUN_INST
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L2
|
||||
/sys/devices/cpu/events/PM_PB_SYS_PUMP
|
||||
/sys/devices/cpu/events/PM_VSU_FIN
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_THRD_PRIO_0_1_CYC
|
||||
/sys/devices/cpu/events/PM_DERAT_MISS_64K
|
||||
/sys/devices/cpu/events/PM_PMC2_REWIND
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L2
|
||||
/sys/devices/cpu/events/PM_GRP_BR_MPRED_NONSPEC
|
||||
/sys/devices/cpu/events/PM_INST_DISP
|
||||
/sys/devices/cpu/events/PM_MEM0_RD_CANCEL_TOTAL
|
||||
/sys/devices/cpu/events/PM_LSU0_DC_PREF_STREAM_CONFIRM
|
||||
/sys/devices/cpu/events/PM_L1_DCACHE_RELOAD_VALID
|
||||
/sys/devices/cpu/events/PM_VSU_SCALAR_DOUBLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_L3_PREF_HIT
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L31_MOD
|
||||
/sys/devices/cpu/events/PM_MRK_FXU_FIN
|
||||
/sys/devices/cpu/events/PM_PMC4_OVERFLOW
|
||||
/sys/devices/cpu/events/PM_MRK_PTEG_FROM_L3
|
||||
/sys/devices/cpu/events/PM_LSU0_LMQ_LHR_MERGE
|
||||
/sys/devices/cpu/events/PM_BTAC_HIT
|
||||
/sys/devices/cpu/events/PM_L3_RD_BUSY
|
||||
/sys/devices/cpu/events/PM_LSU0_L1_SW_PREF
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_LSU0_DC_PREF_STREAM_ALLOC
|
||||
/sys/devices/cpu/events/PM_L2_ST
|
||||
/sys/devices/cpu/events/PM_VSU0_DENORM
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_BR_PRED_CR_TA
|
||||
/sys/devices/cpu/events/PM_VSU0_FCONV
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FLUSH_ULD
|
||||
/sys/devices/cpu/events/PM_BTAC_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_LD_MISS_EXPOSED_CYC_COUNT
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L2
|
||||
/sys/devices/cpu/events/PM_LSU_DCACHE_RELOAD_VALID
|
||||
/sys/devices/cpu/events/PM_VSU_FMA
|
||||
/sys/devices/cpu/events/PM_LSU0_FLUSH_SRQ
|
||||
/sys/devices/cpu/events/PM_LSU1_L1_PREF
|
||||
/sys/devices/cpu/events/PM_IOPS_CMPL
|
||||
/sys/devices/cpu/events/PM_L2_SYS_PUMP
|
||||
/sys/devices/cpu/events/PM_L2_RCLD_BUSY_RC_FULL
|
||||
/sys/devices/cpu/events/PM_LSU_LMQ_S0_ALLOC
|
||||
/sys/devices/cpu/events/PM_FLUSH_DISP_SYNC
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_DL2L3_MOD_CYC
|
||||
/sys/devices/cpu/events/PM_L2_IC_INV
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L21_MOD_CYC
|
||||
/sys/devices/cpu/events/PM_L3_PREF_LDST
|
||||
/sys/devices/cpu/events/PM_LSU_SRQ_EMPTY_CYC
|
||||
/sys/devices/cpu/events/PM_LSU_LMQ_S0_VALID
|
||||
/sys/devices/cpu/events/PM_FLUSH_PARTIAL
|
||||
/sys/devices/cpu/events/PM_VSU1_FMA_DOUBLE
|
||||
/sys/devices/cpu/events/PM_1PLUS_PPC_DISP
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_SUSPENDED
|
||||
/sys/devices/cpu/events/PM_VSU0_FMA
|
||||
/sys/devices/cpu/events/PM_STCX_FAIL
|
||||
/sys/devices/cpu/events/PM_VSU0_FSQRT_FDIV_DOUBLE
|
||||
/sys/devices/cpu/events/PM_DC_PREF_DST
|
||||
/sys/devices/cpu/events/PM_VSU1_SCAL_SINGLE_ISSUED
|
||||
/sys/devices/cpu/events/PM_L3_HIT
|
||||
/sys/devices/cpu/events/PM_L2_GLOB_GUESS_WRONG
|
||||
/sys/devices/cpu/events/PM_MRK_DFU_FIN
|
||||
/sys/devices/cpu/events/PM_INST_FROM_L1
|
||||
/sys/devices/cpu/events/PM_IC_DEMAND_REQ
|
||||
/sys/devices/cpu/events/PM_VSU1_FSQRT_FDIV_DOUBLE
|
||||
/sys/devices/cpu/events/PM_VSU1_FMA
|
||||
/sys/devices/cpu/events/PM_MRK_LD_MISS_L1
|
||||
/sys/devices/cpu/events/PM_VSU0_2FLOP_DOUBLE
|
||||
/sys/devices/cpu/events/PM_LSU_DC_PREF_STRIDED_STREAM_CONFIRM
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_L31_SHR
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_REJECT_ERAT_MISS
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_L2MISS
|
||||
/sys/devices/cpu/events/PM_DATA_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_INST_FROM_PREF
|
||||
/sys/devices/cpu/events/PM_VSU1_SQ
|
||||
/sys/devices/cpu/events/PM_L2_LD_DISP
|
||||
/sys/devices/cpu/events/PM_L2_DISP_ALL
|
||||
/sys/devices/cpu/events/PM_THRD_GRP_CMPL_BOTH_CYC
|
||||
/sys/devices/cpu/events/PM_VSU_FSQRT_FDIV_DOUBLE
|
||||
/sys/devices/cpu/events/PM_INST_PTEG_FROM_DL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_VSU_1FLOP
|
||||
/sys/devices/cpu/events/PM_HV_CYC
|
||||
/sys/devices/cpu/events/PM_MRK_LSU_FIN
|
||||
/sys/devices/cpu/events/PM_MRK_DATA_FROM_RL2L3_SHR
|
||||
/sys/devices/cpu/events/PM_DTLB_MISS_16M
|
||||
/sys/devices/cpu/events/PM_LSU1_LMQ_LHR_MERGE
|
||||
/sys/devices/cpu/events/PM_IFU_FIN
|
||||
/sys/devices/cpu/events/PM_1THRD_CON_RUN_INSTR
|
||||
/sys/devices/cpu/events/PM_CMPLU_STALL_COUNT
|
||||
/sys/devices/cpu/events/PM_MEM0_PB_RD_CL
|
||||
/sys/devices/cpu/events/PM_THRD_1_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_THRD_2_CONC_RUN_INSTR
|
||||
/sys/devices/cpu/events/PM_THRD_2_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_THRD_3_CONC_RUN_INST
|
||||
/sys/devices/cpu/events/PM_THRD_3_RUN_CYC
|
||||
/sys/devices/cpu/events/PM_THRD_4_CONC_RUN_INST
|
||||
/sys/devices/cpu/events/PM_THRD_4_RUN_CYC
|
||||
|
||||
Date: 2013/01/08
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
What: /sys/bus/event_source/devices/hv_24x7/interface/catalog
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
Provides access to the binary "24x7 catalog" provided by the
|
||||
hypervisor on POWER7 and 8 systems. This catalog lists events
|
||||
avaliable from the powerpc "hv_24x7" pmu. Its format is
|
||||
documented here:
|
||||
https://raw.githubusercontent.com/jmesmon/catalog-24x7/master/hv-24x7-catalog.h
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_24x7/interface/catalog_length
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
A number equal to the length in bytes of the catalog. This is
|
||||
also extractable from the provided binary "catalog" sysfs entry.
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_24x7/interface/catalog_version
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
Exposes the "version" field of the 24x7 catalog. This is also
|
||||
extractable from the provided binary "catalog" sysfs entry.
|
|
@ -0,0 +1,43 @@
|
|||
What: /sys/bus/event_source/devices/hv_gpci/interface/collect_privileged
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
'0' if the hypervisor is configured to forbid access to event
|
||||
counters being accumulated by other guests and to physical
|
||||
domain event counters.
|
||||
'1' if that access is allowed.
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/ga
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
0 or 1. Indicates whether we have access to "GA" events (listed
|
||||
in arch/powerpc/perf/hv-gpci.h).
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/expanded
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
0 or 1. Indicates whether we have access to "EXPANDED" events (listed
|
||||
in arch/powerpc/perf/hv-gpci.h).
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/lab
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
0 or 1. Indicates whether we have access to "LAB" events (listed
|
||||
in arch/powerpc/perf/hv-gpci.h).
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/version
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
A number indicating the version of the gpci interface that the
|
||||
hypervisor reports supporting.
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/kernel_version
|
||||
Date: February 2014
|
||||
Contact: Cody P Schafer <cody@linux.vnet.ibm.com>
|
||||
Description:
|
||||
A number indicating the latest version of the gpci interface
|
||||
that the kernel is aware of.
|
|
@ -7,3 +7,23 @@ Description:
|
|||
by the device during bus enumeration, encoded in hexadecimal.
|
||||
This ID is used to match the device with the appropriate
|
||||
driver.
|
||||
|
||||
What: /sys/bus/mdio_bus/devices/.../phy_interface
|
||||
Date: February 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
This attribute contains the PHY interface as configured by the
|
||||
Ethernet driver during bus enumeration, encoded in string.
|
||||
This interface mode is used to configure the Ethernet MAC with the
|
||||
appropriate mode for its data lines to the PHY hardware.
|
||||
|
||||
What: /sys/bus/mdio_bus/devices/.../phy_has_fixups
|
||||
Date: February 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
This attribute contains the boolean value whether a given PHY
|
||||
device has had any "fixup" workaround running on it, encoded as
|
||||
a boolean. This information is provided to help troubleshooting
|
||||
PHY configurations.
|
||||
|
|
|
@ -0,0 +1,199 @@
|
|||
What: /sys/class/net/<iface>/addr_assign_type
|
||||
Date: July 2010
|
||||
KernelVersion: 3.2
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the address assignment type. Possible values are:
|
||||
0: permanent address
|
||||
1: randomly generated
|
||||
2: stolen from another device
|
||||
3: set using dev_set_mac_address
|
||||
|
||||
What: /sys/class/net/<iface>/addr_len
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the hardware address size in bytes.
|
||||
Values vary based on the lower-level protocol used by the
|
||||
interface (Ethernet, FDDI, ATM, IEEE 802.15.4...). See
|
||||
include/uapi/linux/if_*.h for actual values.
|
||||
|
||||
What: /sys/class/net/<iface>/address
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Hardware address currently assigned to this interface.
|
||||
Format is a string, e.g: 00:11:22:33:44:55 for an Ethernet MAC
|
||||
address.
|
||||
|
||||
What: /sys/class/net/<iface>/broadcast
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Hardware broadcast address for this interface. Format is a
|
||||
string, e.g: ff:ff:ff:ff:ff:ff for an Ethernet broadcast MAC
|
||||
address.
|
||||
|
||||
What: /sys/class/net/<iface>/carrier
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the current physical link state of the interface.
|
||||
Posssible values are:
|
||||
0: physical link is down
|
||||
1: physical link is up
|
||||
|
||||
Note: some special devices, e.g: bonding and team drivers will
|
||||
allow this attribute to be written to force a link state for
|
||||
operating correctly and designating another fallback interface.
|
||||
|
||||
What: /sys/class/net/<iface>/dev_id
|
||||
Date: April 2008
|
||||
KernelVersion: 2.6.26
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the device unique identifier. Format is an hexadecimal
|
||||
value. This is used to disambiguate interfaces which might be
|
||||
stacked (e.g: VLAN interfaces) but still have the same MAC
|
||||
address as their parent device.
|
||||
|
||||
What: /sys/class/net/<iface>/dormant
|
||||
Date: March 2006
|
||||
KernelVersion: 2.6.17
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates whether the interface is in dormant state. Possible
|
||||
values are:
|
||||
0: interface is not dormant
|
||||
1: interface is dormant
|
||||
|
||||
This attribute can be used by supplicant software to signal that
|
||||
the device is not usable unless some supplicant-based
|
||||
authentication is performed (e.g: 802.1x). 'link_mode' attribute
|
||||
will also reflect the dormant state.
|
||||
|
||||
What: /sys/clas/net/<iface>/duplex
|
||||
Date: October 2009
|
||||
KernelVersion: 2.6.33
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface latest or current duplex value. Possible
|
||||
values are:
|
||||
half: half duplex
|
||||
full: full duplex
|
||||
|
||||
Note: This attribute is only valid for interfaces that implement
|
||||
the ethtool get_settings method (mostly Ethernet).
|
||||
|
||||
What: /sys/class/net/<iface>/flags
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface flags as a bitmask in hexadecimal. See
|
||||
include/uapi/linux/if.h for a list of all possible values and
|
||||
the flags semantics.
|
||||
|
||||
What: /sys/class/net/<iface>/ifalias
|
||||
Date: September 2008
|
||||
KernelVersion: 2.6.28
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates/stores an interface alias name as a string. This can
|
||||
be used for system management purposes.
|
||||
|
||||
What: /sys/class/net/<iface>/ifindex
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the system-wide interface unique index identifier as a
|
||||
decimal number. This attribute is used for mapping an interface
|
||||
identifier to an interface name. It is used throughout the
|
||||
networking stack for specifying the interface specific
|
||||
requests/events.
|
||||
|
||||
What: /sys/class/net/<iface>/iflink
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the system-wide interface unique index identifier a
|
||||
the interface is linked to. Format is decimal. This attribute is
|
||||
used to resolve interfaces chaining, linking and stacking.
|
||||
Physical interfaces have the same 'ifindex' and 'iflink' values.
|
||||
|
||||
What: /sys/class/net/<iface>/link_mode
|
||||
Date: March 2006
|
||||
KernelVersion: 2.6.17
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface link mode, as a decimal number. This
|
||||
attribute should be used in conjunction with 'dormant' attribute
|
||||
to determine the interface usability. Possible values:
|
||||
0: default link mode
|
||||
1: dormant link mode
|
||||
|
||||
What: /sys/class/net/<iface>/mtu
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface currently configured MTU value, in
|
||||
bytes, and in decimal format. Specific values depends on the
|
||||
lower-level interface protocol used. Ethernet devices will show
|
||||
a 'mtu' attribute value of 1500 unless changed.
|
||||
|
||||
What: /sys/calss/net/<iface>/netdev_group
|
||||
Date: January 2011
|
||||
KernelVersion: 2.6.39
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface network device group, as a decimal
|
||||
integer. Default value is 0 which corresponds to the initial
|
||||
network devices group. The group can be changed to affect
|
||||
routing decisions (see: net/ipv4/fib_rules and
|
||||
net/ipv6/fib6_rules.c).
|
||||
|
||||
What: /sys/class/net/<iface>/operstate
|
||||
Date: March 2006
|
||||
KernelVersion: 2.6.17
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface RFC2863 operational state as a string.
|
||||
Possible values are:
|
||||
"unknown", "notpresent", "down", "lowerlayerdown", "testing",
|
||||
"dormant", "up".
|
||||
|
||||
What: /sys/class/net/<iface>/speed
|
||||
Date: October 2009
|
||||
KernelVersion: 2.6.33
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface latest or current speed value. Value is
|
||||
an integer representing the link speed in Mbits/sec.
|
||||
|
||||
Note: this attribute is only valid for interfaces that implement
|
||||
the ethtool get_settings method (mostly Ethernet ).
|
||||
|
||||
What: /sys/class/net/<iface>/tx_queue_len
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface transmit queue len in number of packets,
|
||||
as an integer value. Value depend on the type of interface,
|
||||
Ethernet network adapters have a default value of 1000 unless
|
||||
configured otherwise
|
||||
|
||||
What: /sys/class/net/<iface>/type
|
||||
Date: April 2005
|
||||
KernelVersion: 2.6.12
|
||||
Contact: netdev@vger.kernel.org
|
||||
Description:
|
||||
Indicates the interface protocol type as a decimal value. See
|
||||
include/uapi/linux/if_arp.h for all possible values.
|
|
@ -76,6 +76,15 @@ Description:
|
|||
is used to classify clients as "isolated" by the
|
||||
Extended Isolation feature.
|
||||
|
||||
What: /sys/class/net/<mesh_iface>/mesh/multicast_mode
|
||||
Date: Feb 2014
|
||||
Contact: Linus Lüssing <linus.luessing@web.de>
|
||||
Description:
|
||||
Indicates whether multicast optimizations are enabled
|
||||
or disabled. If set to zero then all nodes in the
|
||||
mesh are going to use classic flooding for any
|
||||
multicast packet with no optimizations.
|
||||
|
||||
What: /sys/class/net/<mesh_iface>/mesh/network_coding
|
||||
Date: Nov 2012
|
||||
Contact: Martin Hundeboll <martin@hundeboll.net>
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
What: /sys/class/rc/
|
||||
Date: Apr 2010
|
||||
KernelVersion: 2.6.35
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
The rc/ class sub-directory belongs to the Remote Controller
|
||||
core and provides a sysfs interface for configuring infrared
|
||||
remote controller receivers.
|
||||
|
||||
What: /sys/class/rc/rcN/
|
||||
Date: Apr 2010
|
||||
KernelVersion: 2.6.35
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
A /sys/class/rc/rcN directory is created for each remote
|
||||
control receiver device where N is the number of the receiver.
|
||||
|
||||
What: /sys/class/rc/rcN/protocols
|
||||
Date: Jun 2010
|
||||
KernelVersion: 2.6.36
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Reading this file returns a list of available protocols,
|
||||
something like:
|
||||
"rc5 [rc6] nec jvc [sony]"
|
||||
Enabled protocols are shown in [] brackets.
|
||||
Writing "+proto" will add a protocol to the list of enabled
|
||||
protocols.
|
||||
Writing "-proto" will remove a protocol from the list of enabled
|
||||
protocols.
|
||||
Writing "proto" will enable only "proto".
|
||||
Writing "none" will disable all protocols.
|
||||
Write fails with EINVAL if an invalid protocol combination or
|
||||
unknown protocol name is used.
|
||||
|
||||
What: /sys/class/rc/rcN/filter
|
||||
Date: Jan 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Sets the scancode filter expected value.
|
||||
Use in combination with /sys/class/rc/rcN/filter_mask to set the
|
||||
expected value of the bits set in the filter mask.
|
||||
If the hardware supports it then scancodes which do not match
|
||||
the filter will be ignored. Otherwise the write will fail with
|
||||
an error.
|
||||
This value may be reset to 0 if the current protocol is altered.
|
||||
|
||||
What: /sys/class/rc/rcN/filter_mask
|
||||
Date: Jan 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Sets the scancode filter mask of bits to compare.
|
||||
Use in combination with /sys/class/rc/rcN/filter to set the bits
|
||||
of the scancode which should be compared against the expected
|
||||
value. A value of 0 disables the filter to allow all valid
|
||||
scancodes to be processed.
|
||||
If the hardware supports it then scancodes which do not match
|
||||
the filter will be ignored. Otherwise the write will fail with
|
||||
an error.
|
||||
This value may be reset to 0 if the current protocol is altered.
|
||||
|
||||
What: /sys/class/rc/rcN/wakeup_protocols
|
||||
Date: Feb 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Reading this file returns a list of available protocols to use
|
||||
for the wakeup filter, something like:
|
||||
"rc5 rc6 nec jvc [sony]"
|
||||
The enabled wakeup protocol is shown in [] brackets.
|
||||
Writing "+proto" will add a protocol to the list of enabled
|
||||
wakeup protocols.
|
||||
Writing "-proto" will remove a protocol from the list of enabled
|
||||
wakeup protocols.
|
||||
Writing "proto" will use "proto" for wakeup events.
|
||||
Writing "none" will disable wakeup.
|
||||
Write fails with EINVAL if an invalid protocol combination or
|
||||
unknown protocol name is used, or if wakeup is not supported by
|
||||
the hardware.
|
||||
|
||||
What: /sys/class/rc/rcN/wakeup_filter
|
||||
Date: Jan 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Sets the scancode wakeup filter expected value.
|
||||
Use in combination with /sys/class/rc/rcN/wakeup_filter_mask to
|
||||
set the expected value of the bits set in the wakeup filter mask
|
||||
to trigger a system wake event.
|
||||
If the hardware supports it and wakeup_filter_mask is not 0 then
|
||||
scancodes which match the filter will wake the system from e.g.
|
||||
suspend to RAM or power off.
|
||||
Otherwise the write will fail with an error.
|
||||
This value may be reset to 0 if the wakeup protocol is altered.
|
||||
|
||||
What: /sys/class/rc/rcN/wakeup_filter_mask
|
||||
Date: Jan 2014
|
||||
KernelVersion: 3.15
|
||||
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
Description:
|
||||
Sets the scancode wakeup filter mask of bits to compare.
|
||||
Use in combination with /sys/class/rc/rcN/wakeup_filter to set
|
||||
the bits of the scancode which should be compared against the
|
||||
expected value to trigger a system wake event.
|
||||
If the hardware supports it and wakeup_filter_mask is not 0 then
|
||||
scancodes which match the filter will wake the system from e.g.
|
||||
suspend to RAM or power off.
|
||||
Otherwise the write will fail with an error.
|
||||
This value may be reset to 0 if the wakeup protocol is altered.
|
|
@ -11,3 +11,19 @@ Description:
|
|||
guaranteed. The 'isci_id' attribute unambiguously identifies
|
||||
the controller index: '0' for the first controller,
|
||||
'1' for the second.
|
||||
|
||||
What: /sys/class/scsi_host/hostX/acciopath_status
|
||||
Date: November 2013
|
||||
Contact: Stephen M. Cameron <scameron@beardog.cce.hp.com>
|
||||
Description: This file contains the current status of the "SSD Smart Path"
|
||||
feature of HP Smart Array RAID controllers using the hpsa
|
||||
driver. SSD Smart Path, when enabled permits the driver to
|
||||
send i/o requests directly to physical devices that are part
|
||||
of a logical drive, bypassing the controllers firmware RAID
|
||||
stack for a performance advantage when possible. A value of
|
||||
'1' indicates the feature is enabled, and the controller may
|
||||
use the direct i/o path to physical devices. A value of zero
|
||||
means the feature is disabled and the controller may not use
|
||||
the direct i/o path to physical devices. This setting is
|
||||
controller wide, affecting all configured logical drives on the
|
||||
controller. This file is readable and writable.
|
||||
|
|
|
@ -83,8 +83,10 @@ Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
|||
Description:
|
||||
The /sys/devices/.../wakeup_count attribute contains the number
|
||||
of signaled wakeup events associated with the device. This
|
||||
attribute is read-only. If the device is not enabled to wake up
|
||||
attribute is read-only. If the device is not capable to wake up
|
||||
the system from sleep states, this attribute is not present.
|
||||
If the device is not enabled to wake up the system from sleep
|
||||
states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_active_count
|
||||
Date: September 2010
|
||||
|
@ -93,8 +95,10 @@ Description:
|
|||
The /sys/devices/.../wakeup_active_count attribute contains the
|
||||
number of times the processing of wakeup events associated with
|
||||
the device was completed (at the kernel level). This attribute
|
||||
is read-only. If the device is not enabled to wake up the
|
||||
system from sleep states, this attribute is not present.
|
||||
is read-only. If the device is not capable to wake up the
|
||||
system from sleep states, this attribute is not present. If
|
||||
the device is not enabled to wake up the system from sleep
|
||||
states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_abort_count
|
||||
Date: February 2012
|
||||
|
@ -104,8 +108,9 @@ Description:
|
|||
number of times the processing of a wakeup event associated with
|
||||
the device might have aborted system transition into a sleep
|
||||
state in progress. This attribute is read-only. If the device
|
||||
is not enabled to wake up the system from sleep states, this
|
||||
attribute is not present.
|
||||
is not capable to wake up the system from sleep states, this
|
||||
attribute is not present. If the device is not enabled to wake
|
||||
up the system from sleep states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_expire_count
|
||||
Date: February 2012
|
||||
|
@ -114,8 +119,10 @@ Description:
|
|||
The /sys/devices/.../wakeup_expire_count attribute contains the
|
||||
number of times a wakeup event associated with the device has
|
||||
been reported with a timeout that expired. This attribute is
|
||||
read-only. If the device is not enabled to wake up the system
|
||||
from sleep states, this attribute is not present.
|
||||
read-only. If the device is not capable to wake up the system
|
||||
from sleep states, this attribute is not present. If the
|
||||
device is not enabled to wake up the system from sleep states,
|
||||
this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_active
|
||||
Date: September 2010
|
||||
|
@ -124,8 +131,10 @@ Description:
|
|||
The /sys/devices/.../wakeup_active attribute contains either 1,
|
||||
or 0, depending on whether or not a wakeup event associated with
|
||||
the device is being processed (1). This attribute is read-only.
|
||||
If the device is not enabled to wake up the system from sleep
|
||||
states, this attribute is not present.
|
||||
If the device is not capable to wake up the system from sleep
|
||||
states, this attribute is not present. If the device is not
|
||||
enabled to wake up the system from sleep states, this attribute
|
||||
is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_total_time_ms
|
||||
Date: September 2010
|
||||
|
@ -134,8 +143,9 @@ Description:
|
|||
The /sys/devices/.../wakeup_total_time_ms attribute contains
|
||||
the total time of processing wakeup events associated with the
|
||||
device, in milliseconds. This attribute is read-only. If the
|
||||
device is not enabled to wake up the system from sleep states,
|
||||
this attribute is not present.
|
||||
device is not capable to wake up the system from sleep states,
|
||||
this attribute is not present. If the device is not enabled to
|
||||
wake up the system from sleep states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_max_time_ms
|
||||
Date: September 2010
|
||||
|
@ -144,8 +154,10 @@ Description:
|
|||
The /sys/devices/.../wakeup_max_time_ms attribute contains
|
||||
the maximum time of processing a single wakeup event associated
|
||||
with the device, in milliseconds. This attribute is read-only.
|
||||
If the device is not enabled to wake up the system from sleep
|
||||
states, this attribute is not present.
|
||||
If the device is not capable to wake up the system from sleep
|
||||
states, this attribute is not present. If the device is not
|
||||
enabled to wake up the system from sleep states, this attribute
|
||||
is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_last_time_ms
|
||||
Date: September 2010
|
||||
|
@ -156,7 +168,8 @@ Description:
|
|||
signaling the last wakeup event associated with the device, in
|
||||
milliseconds. This attribute is read-only. If the device is
|
||||
not enabled to wake up the system from sleep states, this
|
||||
attribute is not present.
|
||||
attribute is not present. If the device is not enabled to wake
|
||||
up the system from sleep states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/wakeup_prevent_sleep_time_ms
|
||||
Date: February 2012
|
||||
|
@ -165,9 +178,10 @@ Description:
|
|||
The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
|
||||
contains the total time the device has been preventing
|
||||
opportunistic transitions to sleep states from occurring.
|
||||
This attribute is read-only. If the device is not enabled to
|
||||
This attribute is read-only. If the device is not capable to
|
||||
wake up the system from sleep states, this attribute is not
|
||||
present.
|
||||
present. If the device is not enabled to wake up the system
|
||||
from sleep states, this attribute is empty.
|
||||
|
||||
What: /sys/devices/.../power/autosuspend_delay_ms
|
||||
Date: September 2010
|
||||
|
@ -187,7 +201,7 @@ Description:
|
|||
Not all drivers support this attribute. If it isn't supported,
|
||||
attempts to read or write it will yield I/O errors.
|
||||
|
||||
What: /sys/devices/.../power/pm_qos_latency_us
|
||||
What: /sys/devices/.../power/pm_qos_resume_latency_us
|
||||
Date: March 2012
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
|
@ -205,6 +219,31 @@ Description:
|
|||
This attribute has no effect on system-wide suspend/resume and
|
||||
hibernation.
|
||||
|
||||
What: /sys/devices/.../power/pm_qos_latency_tolerance_us
|
||||
Date: January 2014
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
Description:
|
||||
The /sys/devices/.../power/pm_qos_latency_tolerance_us attribute
|
||||
contains the PM QoS active state latency tolerance limit for the
|
||||
given device in microseconds. That is the maximum memory access
|
||||
latency the device can suffer without any visible adverse
|
||||
effects on user space functionality. If that value is the
|
||||
string "any", the latency does not matter to user space at all,
|
||||
but hardware should not be allowed to set the latency tolerance
|
||||
for the device automatically.
|
||||
|
||||
Reading "auto" from this file means that the maximum memory
|
||||
access latency for the device may be determined automatically
|
||||
by the hardware as needed. Writing "auto" to it allows the
|
||||
hardware to be switched to this mode if there are no other
|
||||
latency tolerance requirements from the kernel side.
|
||||
|
||||
This attribute is only present if the feature controlled by it
|
||||
is supported by the hardware.
|
||||
|
||||
This attribute has no effect on runtime suspend and resume of
|
||||
devices and on system-wide suspend/resume and hibernation.
|
||||
|
||||
What: /sys/devices/.../power/pm_qos_no_power_off
|
||||
Date: September 2012
|
||||
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
What: /sys/firmware/devicetree/*
|
||||
Date: November 2013
|
||||
Contact: Grant Likely <grant.likely@linaro.org>
|
||||
Description:
|
||||
When using OpenFirmware or a Flattened Device Tree to enumerate
|
||||
hardware, the device tree structure will be exposed in this
|
||||
directory.
|
||||
|
||||
It is possible for multiple device-tree directories to exist.
|
||||
Some device drivers use a separate detached device tree which
|
||||
have no attachment to the system tree and will appear in a
|
||||
different subdirectory under /sys/firmware/devicetree.
|
||||
|
||||
Userspace must not use the /sys/firmware/devicetree/base
|
||||
path directly, but instead should follow /proc/device-tree
|
||||
symlink. It is possible that the absolute path will change
|
||||
in the future, but the symlink is the stable ABI.
|
||||
|
||||
The /proc/device-tree symlink replaces the devicetree /proc
|
||||
filesystem support, and has largely the same semantics and
|
||||
should be compatible with existing userspace.
|
||||
|
||||
The contents of /sys/firmware/devicetree/ is a
|
||||
hierarchy of directories, one per device tree node. The
|
||||
directory name is the resolved path component name (node
|
||||
name plus address). Properties are represented as files
|
||||
in the directory. The contents of each file is the exact
|
||||
binary data from the device tree.
|
|
@ -55,3 +55,15 @@ Date: January 2014
|
|||
Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
|
||||
Description:
|
||||
Controls the number of trials to find a victim segment.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/dir_level
|
||||
Date: March 2014
|
||||
Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
|
||||
Description:
|
||||
Controls the directory level for large directory.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/ram_thresh
|
||||
Date: March 2014
|
||||
Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
|
||||
Description:
|
||||
Controls the memory footprint used by f2fs.
|
||||
|
|
|
@ -49,3 +49,4 @@ Description: Module taint flags:
|
|||
O - out-of-tree module
|
||||
F - force-loaded module
|
||||
C - staging driver module
|
||||
E - unsigned module
|
||||
|
|
|
@ -12,8 +12,9 @@ Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
|||
Description:
|
||||
The /sys/power/state file controls the system power state.
|
||||
Reading from this file returns what states are supported,
|
||||
which is hard-coded to 'standby' (Power-On Suspend), 'mem'
|
||||
(Suspend-to-RAM), and 'disk' (Suspend-to-Disk).
|
||||
which is hard-coded to 'freeze' (Low-Power Idle), 'standby'
|
||||
(Power-On Suspend), 'mem' (Suspend-to-RAM), and 'disk'
|
||||
(Suspend-to-Disk).
|
||||
|
||||
Writing to this file one of these strings causes the system to
|
||||
transition into that state. Please see the file
|
||||
|
|
|
@ -54,6 +54,26 @@ Description:
|
|||
This file contains the number of programmable periodic
|
||||
output channels offered by the PTP hardware clock.
|
||||
|
||||
What: /sys/class/ptp/ptpN/n_pins
|
||||
Date: March 2014
|
||||
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||
Description:
|
||||
This file contains the number of programmable pins
|
||||
offered by the PTP hardware clock.
|
||||
|
||||
What: /sys/class/ptp/ptpN/pins
|
||||
Date: March 2014
|
||||
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||
Description:
|
||||
This directory contains one file for each programmable
|
||||
pin offered by the PTP hardware clock. The file name
|
||||
is the hardware dependent pin name. Reading from this
|
||||
file produces two numbers, the assigned function (see
|
||||
the PTP_PF_ enumeration values in linux/ptp_clock.h)
|
||||
and the channel number. The function and channel
|
||||
assignment may be changed by two writing numbers into
|
||||
the file.
|
||||
|
||||
What: /sys/class/ptp/ptpN/pps_avaiable
|
||||
Date: September 2010
|
||||
Contact: Richard Cochran <richardcochran@gmail.com>
|
||||
|
|
|
@ -98,6 +98,8 @@
|
|||
!Finclude/net/cfg80211.h priv_to_wiphy
|
||||
!Finclude/net/cfg80211.h set_wiphy_dev
|
||||
!Finclude/net/cfg80211.h wdev_priv
|
||||
!Finclude/net/cfg80211.h ieee80211_iface_limit
|
||||
!Finclude/net/cfg80211.h ieee80211_iface_combination
|
||||
</chapter>
|
||||
<chapter>
|
||||
<title>Actions and configuration</title>
|
||||
|
|
|
@ -14,9 +14,9 @@ DOCBOOKS := z8530book.xml device-drivers.xml \
|
|||
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
||||
80211.xml debugobjects.xml sh.xml regulator.xml \
|
||||
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
||||
tracepoint.xml drm.xml media_api.xml
|
||||
tracepoint.xml drm.xml media_api.xml w1.xml
|
||||
|
||||
include $(srctree)/Documentation/DocBook/media/Makefile
|
||||
include Documentation/DocBook/media/Makefile
|
||||
|
||||
###
|
||||
# The build process is as follows (targets):
|
||||
|
@ -36,6 +36,7 @@ PS_METHOD = $(prefer-db2x)
|
|||
# The targets that may be used.
|
||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
|
||||
|
||||
targets += $(DOCBOOKS)
|
||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||
xmldocs: $(BOOKS)
|
||||
sgmldocs: xmldocs
|
||||
|
@ -58,14 +59,14 @@ mandocs: $(MAN)
|
|||
|
||||
installmandocs: mandocs
|
||||
mkdir -p /usr/local/man/man9/
|
||||
install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/
|
||||
install $(obj)/man/*.9.gz /usr/local/man/man9/
|
||||
|
||||
###
|
||||
#External programs used
|
||||
KERNELDOC = $(srctree)/scripts/kernel-doc
|
||||
DOCPROC = $(objtree)/scripts/docproc
|
||||
|
||||
XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl
|
||||
XMLTOFLAGS = -m $(srctree)/$(src)/stylesheet.xsl
|
||||
XMLTOFLAGS += --skip-validation
|
||||
|
||||
###
|
||||
|
@ -87,21 +88,9 @@ define rule_docproc
|
|||
) > $(dir $@).$(notdir $@).cmd
|
||||
endef
|
||||
|
||||
%.xml: %.tmpl FORCE
|
||||
%.xml: %.tmpl $(KERNELDOC) $(DOCPROC) FORCE
|
||||
$(call if_changed_rule,docproc)
|
||||
|
||||
###
|
||||
#Read in all saved dependency files
|
||||
cmd_files := $(wildcard $(foreach f,$(BOOKS),$(dir $(f)).$(notdir $(f)).cmd))
|
||||
|
||||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
###
|
||||
# Changes in kernel-doc force a rebuild of all documentation
|
||||
$(BOOKS): $(KERNELDOC)
|
||||
|
||||
# Tell kbuild to always build the programs
|
||||
always := $(hostprogs-y)
|
||||
|
||||
|
@ -139,7 +128,7 @@ quiet_cmd_db2pdf = PDF $@
|
|||
|
||||
|
||||
index = index.html
|
||||
main_idx = Documentation/DocBook/$(index)
|
||||
main_idx = $(obj)/$(index)
|
||||
build_main_index = rm -rf $(main_idx); \
|
||||
echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \
|
||||
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
|
||||
|
@ -148,7 +137,7 @@ build_main_index = rm -rf $(main_idx); \
|
|||
quiet_cmd_db2html = HTML $@
|
||||
cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
|
||||
echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
|
||||
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@
|
||||
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@
|
||||
|
||||
%.html: %.xml
|
||||
@(which xmlto > /dev/null 2>&1) || \
|
||||
|
|
|
@ -276,7 +276,7 @@ X!Isound/sound_firmware.c
|
|||
</para>
|
||||
|
||||
<sect1><title>Frame Buffer Memory</title>
|
||||
!Edrivers/video/fbmem.c
|
||||
!Edrivers/video/fbdev/core/fbmem.c
|
||||
</sect1>
|
||||
<!--
|
||||
<sect1><title>Frame Buffer Console</title>
|
||||
|
@ -284,7 +284,7 @@ X!Edrivers/video/console/fbcon.c
|
|||
</sect1>
|
||||
-->
|
||||
<sect1><title>Frame Buffer Colormap</title>
|
||||
!Edrivers/video/fbcmap.c
|
||||
!Edrivers/video/fbdev/core/fbcmap.c
|
||||
</sect1>
|
||||
<!-- FIXME:
|
||||
drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
|
||||
|
@ -294,11 +294,11 @@ X!Idrivers/video/fbgen.c
|
|||
</sect1>
|
||||
KAO -->
|
||||
<sect1><title>Frame Buffer Video Mode Database</title>
|
||||
!Idrivers/video/modedb.c
|
||||
!Edrivers/video/modedb.c
|
||||
!Idrivers/video/fbdev/core/modedb.c
|
||||
!Edrivers/video/fbdev/core/modedb.c
|
||||
</sect1>
|
||||
<sect1><title>Frame Buffer Macintosh Video Mode Database</title>
|
||||
!Edrivers/video/macmodes.c
|
||||
!Edrivers/video/fbdev/macmodes.c
|
||||
</sect1>
|
||||
<sect1><title>Frame Buffer Fonts</title>
|
||||
<para>
|
||||
|
|
|
@ -29,12 +29,26 @@
|
|||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Daniel</firstname>
|
||||
<surname>Vetter</surname>
|
||||
<contrib>Contributions all over the place</contrib>
|
||||
<affiliation>
|
||||
<orgname>Intel Corporation</orgname>
|
||||
<address>
|
||||
<email>daniel.vetter@ffwll.ch</email>
|
||||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<copyright>
|
||||
<year>2008-2009</year>
|
||||
<year>2012</year>
|
||||
<year>2013-2014</year>
|
||||
<holder>Intel Corporation</holder>
|
||||
</copyright>
|
||||
<copyright>
|
||||
<year>2012</year>
|
||||
<holder>Laurent Pinchart</holder>
|
||||
</copyright>
|
||||
|
||||
|
@ -60,7 +74,15 @@
|
|||
|
||||
<toc></toc>
|
||||
|
||||
<!-- Introduction -->
|
||||
<part id="drmCore">
|
||||
<title>DRM Core</title>
|
||||
<partintro>
|
||||
<para>
|
||||
This first part of the DRM Developer's Guide documents core DRM code,
|
||||
helper libraries for writting drivers and generic userspace interfaces
|
||||
exposed by DRM drivers.
|
||||
</para>
|
||||
</partintro>
|
||||
|
||||
<chapter id="drmIntroduction">
|
||||
<title>Introduction</title>
|
||||
|
@ -264,8 +286,8 @@ char *date;</synopsis>
|
|||
<para>
|
||||
The <methodname>load</methodname> method is the driver and device
|
||||
initialization entry point. The method is responsible for allocating and
|
||||
initializing driver private data, specifying supported performance
|
||||
counters, performing resource allocation and mapping (e.g. acquiring
|
||||
initializing driver private data, performing resource allocation and
|
||||
mapping (e.g. acquiring
|
||||
clocks, mapping registers or allocating command buffers), initializing
|
||||
the memory manager (<xref linkend="drm-memory-management"/>), installing
|
||||
the IRQ handler (<xref linkend="drm-irq-registration"/>), setting up
|
||||
|
@ -295,7 +317,7 @@ char *date;</synopsis>
|
|||
their <methodname>load</methodname> method called with flags to 0.
|
||||
</para>
|
||||
<sect3>
|
||||
<title>Driver Private & Performance Counters</title>
|
||||
<title>Driver Private Data</title>
|
||||
<para>
|
||||
The driver private hangs off the main
|
||||
<structname>drm_device</structname> structure and can be used for
|
||||
|
@ -307,14 +329,6 @@ char *date;</synopsis>
|
|||
<structname>drm_device</structname>.<structfield>dev_priv</structfield>
|
||||
set to NULL when the driver is unloaded.
|
||||
</para>
|
||||
<para>
|
||||
DRM supports several counters which were used for rough performance
|
||||
characterization. This stat counter system is deprecated and should not
|
||||
be used. If performance monitoring is desired, the developer should
|
||||
investigate and potentially enhance the kernel perf and tracing
|
||||
infrastructure to export GPU related performance information for
|
||||
consumption by performance monitoring tools and applications.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3 id="drm-irq-registration">
|
||||
<title>IRQ Registration</title>
|
||||
|
@ -697,55 +711,16 @@ char *date;</synopsis>
|
|||
respectively. The conversion is handled by the DRM core without any
|
||||
driver-specific support.
|
||||
</para>
|
||||
<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 explicitly sent over UNIX domain sockets to be shared
|
||||
between applications, they can't be guessed like the globally unique GEM
|
||||
names.
|
||||
</para>
|
||||
<para>
|
||||
Drivers that support GEM file descriptors, also known as the DRM PRIME
|
||||
API, must set the DRIVER_PRIME bit in the struct
|
||||
<structname>drm_driver</structname>
|
||||
<structfield>driver_features</structfield> field, and implement the
|
||||
<methodname>prime_handle_to_fd</methodname> and
|
||||
<methodname>prime_fd_to_handle</methodname> operations.
|
||||
</para>
|
||||
<para>
|
||||
<synopsis>int (*prime_handle_to_fd)(struct drm_device *dev,
|
||||
struct drm_file *file_priv, uint32_t handle,
|
||||
uint32_t flags, int *prime_fd);
|
||||
int (*prime_fd_to_handle)(struct drm_device *dev,
|
||||
struct drm_file *file_priv, int prime_fd,
|
||||
uint32_t *handle);</synopsis>
|
||||
Those two operations convert a handle to a PRIME file descriptor and
|
||||
vice versa. Drivers must use the kernel dma-buf buffer sharing framework
|
||||
to manage the PRIME file descriptors.
|
||||
</para>
|
||||
<para>
|
||||
While non-GEM drivers must implement the operations themselves, GEM
|
||||
drivers must use the <function>drm_gem_prime_handle_to_fd</function>
|
||||
and <function>drm_gem_prime_fd_to_handle</function> helper functions.
|
||||
Those helpers rely on the driver
|
||||
<methodname>gem_prime_export</methodname> and
|
||||
<methodname>gem_prime_import</methodname> operations to create a dma-buf
|
||||
instance from a GEM object (dma-buf exporter role) and to create a GEM
|
||||
object from a dma-buf instance (dma-buf importer role).
|
||||
</para>
|
||||
<para>
|
||||
<synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
|
||||
struct drm_gem_object *obj,
|
||||
int flags);
|
||||
struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
|
||||
struct dma_buf *dma_buf);</synopsis>
|
||||
These two operations are mandatory for GEM drivers that support DRM
|
||||
PRIME.
|
||||
</para>
|
||||
<sect4>
|
||||
<title>DRM PRIME Helper Functions Reference</title>
|
||||
!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers
|
||||
</sect4>
|
||||
<para>
|
||||
GEM also supports buffer sharing with dma-buf file descriptors through
|
||||
PRIME. GEM-based drivers must use the provided helpers functions to
|
||||
implement the exporting and importing correctly. See <xref linkend="drm-prime-support" />.
|
||||
Since sharing file descriptors is inherently more secure than the
|
||||
easily guessable and global GEM names it is the preferred buffer
|
||||
sharing mechanism. Sharing buffers through GEM names is only supported
|
||||
for legacy userspace. Furthermore PRIME also allows cross-device
|
||||
buffer sharing since it is based on dma-bufs.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3 id="drm-gem-objects-mapping">
|
||||
<title>GEM Objects Mapping</title>
|
||||
|
@ -829,62 +804,6 @@ char *date;</synopsis>
|
|||
faults can implement their own mmap file operation handler.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>Dumb GEM Objects</title>
|
||||
<para>
|
||||
The GEM API doesn't standardize GEM objects creation and leaves it to
|
||||
driver-specific ioctls. While not an issue for full-fledged graphics
|
||||
stacks that include device-specific userspace components (in libdrm for
|
||||
instance), this limit makes DRM-based early boot graphics unnecessarily
|
||||
complex.
|
||||
</para>
|
||||
<para>
|
||||
Dumb GEM objects partly alleviate the problem by providing a standard
|
||||
API to create dumb buffers suitable for scanout, which can then be used
|
||||
to create KMS frame buffers.
|
||||
</para>
|
||||
<para>
|
||||
To support dumb GEM objects drivers must implement the
|
||||
<methodname>dumb_create</methodname>,
|
||||
<methodname>dumb_destroy</methodname> and
|
||||
<methodname>dumb_map_offset</methodname> operations.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
struct drm_mode_create_dumb *args);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_create</methodname> operation creates a GEM
|
||||
object suitable for scanout based on the width, height and depth
|
||||
from the struct <structname>drm_mode_create_dumb</structname>
|
||||
argument. It fills the argument's <structfield>handle</structfield>,
|
||||
<structfield>pitch</structfield> and <structfield>size</structfield>
|
||||
fields with a handle for the newly created GEM object and its line
|
||||
pitch and size in bytes.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_destroy)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
uint32_t handle);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_destroy</methodname> operation destroys a dumb
|
||||
GEM object created by <methodname>dumb_create</methodname>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
uint32_t handle, uint64_t *offset);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_map_offset</methodname> operation associates an
|
||||
mmap fake offset with the GEM object given by the handle and returns
|
||||
it. Drivers must use the
|
||||
<function>drm_gem_create_mmap_offset</function> function to
|
||||
associate the fake offset as described in
|
||||
<xref linkend="drm-gem-objects-mapping"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>Memory Coherency</title>
|
||||
<para>
|
||||
|
@ -924,7 +843,99 @@ char *date;</synopsis>
|
|||
abstracted from the client in libdrm.
|
||||
</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect3>
|
||||
<title>GEM Function Reference</title>
|
||||
!Edrivers/gpu/drm/drm_gem.c
|
||||
</sect3>
|
||||
</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>
|
||||
<sect2 id="drm-prime-support">
|
||||
<title>PRIME Buffer Sharing</title>
|
||||
<para>
|
||||
PRIME is the cross device buffer sharing framework in drm, originally
|
||||
created for the OPTIMUS range of multi-gpu platforms. To userspace
|
||||
PRIME buffers are dma-buf based file descriptors.
|
||||
</para>
|
||||
<sect3>
|
||||
<title>Overview and Driver Interface</title>
|
||||
<para>
|
||||
Similar to GEM global names, PRIME file descriptors are
|
||||
also used to share buffer objects across processes. They offer
|
||||
additional security: as file 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>
|
||||
<para>
|
||||
Drivers that support the PRIME
|
||||
API must set the DRIVER_PRIME bit in the struct
|
||||
<structname>drm_driver</structname>
|
||||
<structfield>driver_features</structfield> field, and implement the
|
||||
<methodname>prime_handle_to_fd</methodname> and
|
||||
<methodname>prime_fd_to_handle</methodname> operations.
|
||||
</para>
|
||||
<para>
|
||||
<synopsis>int (*prime_handle_to_fd)(struct drm_device *dev,
|
||||
struct drm_file *file_priv, uint32_t handle,
|
||||
uint32_t flags, int *prime_fd);
|
||||
int (*prime_fd_to_handle)(struct drm_device *dev,
|
||||
struct drm_file *file_priv, int prime_fd,
|
||||
uint32_t *handle);</synopsis>
|
||||
Those two operations convert a handle to a PRIME file descriptor and
|
||||
vice versa. Drivers must use the kernel dma-buf buffer sharing framework
|
||||
to manage the PRIME file descriptors. Similar to the mode setting
|
||||
API PRIME is agnostic to the underlying buffer object manager, as
|
||||
long as handles are 32bit unsinged integers.
|
||||
</para>
|
||||
<para>
|
||||
While non-GEM drivers must implement the operations themselves, GEM
|
||||
drivers must use the <function>drm_gem_prime_handle_to_fd</function>
|
||||
and <function>drm_gem_prime_fd_to_handle</function> helper functions.
|
||||
Those helpers rely on the driver
|
||||
<methodname>gem_prime_export</methodname> and
|
||||
<methodname>gem_prime_import</methodname> operations to create a dma-buf
|
||||
instance from a GEM object (dma-buf exporter role) and to create a GEM
|
||||
object from a dma-buf instance (dma-buf importer role).
|
||||
</para>
|
||||
<para>
|
||||
<synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
|
||||
struct drm_gem_object *obj,
|
||||
int flags);
|
||||
struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
|
||||
struct dma_buf *dma_buf);</synopsis>
|
||||
These two operations are mandatory for GEM drivers that support
|
||||
PRIME.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>PRIME Helper Functions</title>
|
||||
!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>PRIME Function References</title>
|
||||
!Edrivers/gpu/drm/drm_prime.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>DRM MM Range Allocator</title>
|
||||
<sect3>
|
||||
<title>Overview</title>
|
||||
!Pdrivers/gpu/drm/drm_mm.c Overview
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>LRU Scan/Eviction Support</title>
|
||||
!Pdrivers/gpu/drm/drm_mm.c lru scan roaster
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>DRM MM Range Allocator Function References</title>
|
||||
!Edrivers/gpu/drm/drm_mm.c
|
||||
!Iinclude/drm/drm_mm.h
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: mode setting -->
|
||||
|
@ -952,6 +963,11 @@ int max_width, max_height;</synopsis>
|
|||
<para>Mode setting functions.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<sect2>
|
||||
<title>Display Modes Function Reference</title>
|
||||
!Iinclude/drm/drm_modes.h
|
||||
!Edrivers/gpu/drm/drm_modes.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Frame Buffer Creation</title>
|
||||
<synopsis>struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
|
||||
|
@ -968,9 +984,11 @@ int max_width, max_height;</synopsis>
|
|||
Frame buffers rely on the underneath memory manager for low-level memory
|
||||
operations. When creating a frame buffer applications pass a memory
|
||||
handle (or a list of memory handles for multi-planar formats) through
|
||||
the <parameter>drm_mode_fb_cmd2</parameter> argument. This document
|
||||
assumes that the driver uses GEM, those handles thus reference GEM
|
||||
objects.
|
||||
the <parameter>drm_mode_fb_cmd2</parameter> argument. For drivers using
|
||||
GEM as their userspace buffer management interface this would be a GEM
|
||||
handle. Drivers are however free to use their own backing storage object
|
||||
handles, e.g. vmwgfx directly exposes special TTM handles to userspace
|
||||
and so expects TTM handles in the create ioctl and not GEM handles.
|
||||
</para>
|
||||
<para>
|
||||
Drivers must first validate the requested frame buffer parameters passed
|
||||
|
@ -992,7 +1010,7 @@ int max_width, max_height;</synopsis>
|
|||
</para>
|
||||
|
||||
<para>
|
||||
The initailization of the new framebuffer instance is finalized with a
|
||||
The initialization of the new framebuffer instance is finalized with a
|
||||
call to <function>drm_framebuffer_init</function> which takes a pointer
|
||||
to DRM frame buffer operations (struct
|
||||
<structname>drm_framebuffer_funcs</structname>). Note that this function
|
||||
|
@ -1042,7 +1060,7 @@ int max_width, max_height;</synopsis>
|
|||
<para>
|
||||
The lifetime of a drm framebuffer is controlled with a reference count,
|
||||
drivers can grab additional references with
|
||||
<function>drm_framebuffer_reference</function> </para> and drop them
|
||||
<function>drm_framebuffer_reference</function>and drop them
|
||||
again with <function>drm_framebuffer_unreference</function>. For
|
||||
driver-private framebuffers for which the last reference is never
|
||||
dropped (e.g. for the fbdev framebuffer when the struct
|
||||
|
@ -1050,6 +1068,72 @@ int max_width, max_height;</synopsis>
|
|||
helper struct) drivers can manually clean up a framebuffer at module
|
||||
unload time with
|
||||
<function>drm_framebuffer_unregister_private</function>.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Dumb Buffer Objects</title>
|
||||
<para>
|
||||
The KMS API doesn't standardize backing storage object creation and
|
||||
leaves it to driver-specific ioctls. Furthermore actually creating a
|
||||
buffer object even for GEM-based drivers is done through a
|
||||
driver-specific ioctl - GEM only has a common userspace interface for
|
||||
sharing and destroying objects. While not an issue for full-fledged
|
||||
graphics stacks that include device-specific userspace components (in
|
||||
libdrm for instance), this limit makes DRM-based early boot graphics
|
||||
unnecessarily complex.
|
||||
</para>
|
||||
<para>
|
||||
Dumb objects partly alleviate the problem by providing a standard
|
||||
API to create dumb buffers suitable for scanout, which can then be used
|
||||
to create KMS frame buffers.
|
||||
</para>
|
||||
<para>
|
||||
To support dumb objects drivers must implement the
|
||||
<methodname>dumb_create</methodname>,
|
||||
<methodname>dumb_destroy</methodname> and
|
||||
<methodname>dumb_map_offset</methodname> operations.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
struct drm_mode_create_dumb *args);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_create</methodname> operation creates a driver
|
||||
object (GEM or TTM handle) suitable for scanout based on the
|
||||
width, height and depth from the struct
|
||||
<structname>drm_mode_create_dumb</structname> argument. It fills the
|
||||
argument's <structfield>handle</structfield>,
|
||||
<structfield>pitch</structfield> and <structfield>size</structfield>
|
||||
fields with a handle for the newly created object and its line
|
||||
pitch and size in bytes.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_destroy)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
uint32_t handle);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_destroy</methodname> operation destroys a dumb
|
||||
object created by <methodname>dumb_create</methodname>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<synopsis>int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev,
|
||||
uint32_t handle, uint64_t *offset);</synopsis>
|
||||
<para>
|
||||
The <methodname>dumb_map_offset</methodname> operation associates an
|
||||
mmap fake offset with the object given by the handle and returns
|
||||
it. Drivers must use the
|
||||
<function>drm_gem_create_mmap_offset</function> function to
|
||||
associate the fake offset as described in
|
||||
<xref linkend="drm-gem-objects-mapping"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
Note that dumb objects may not be used for gpu acceleration, as has been
|
||||
attempted on some ARM embedded platforms. Such drivers really must have
|
||||
a hardware-specific ioctl to allocate suitable buffer objects.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Output Polling</title>
|
||||
|
@ -1110,7 +1194,7 @@ int max_width, max_height;</synopsis>
|
|||
pointer to CRTC functions.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<sect3 id="drm-kms-crtcops">
|
||||
<title>CRTC Operations</title>
|
||||
<sect4>
|
||||
<title>Set Configuration</title>
|
||||
|
@ -1130,8 +1214,11 @@ int max_width, max_height;</synopsis>
|
|||
This operation is called with the mode config lock held.
|
||||
</para>
|
||||
<note><para>
|
||||
FIXME: How should set_config interact with DPMS? If the CRTC is
|
||||
suspended, should it be resumed?
|
||||
Note that the drm core has no notion of restoring the mode setting
|
||||
state after resume, since all resume handling is in the full
|
||||
responsibility of the driver. The common mode setting helper library
|
||||
though provides a helper which can be used for this:
|
||||
<function>drm_helper_resume_force_mode</function>.
|
||||
</para></note>
|
||||
</sect4>
|
||||
<sect4>
|
||||
|
@ -1248,15 +1335,47 @@ int max_width, max_height;</synopsis>
|
|||
optionally scale it to a destination size. The result is then blended
|
||||
with or overlayed on top of a CRTC.
|
||||
</para>
|
||||
<para>
|
||||
The DRM core recognizes three types of planes:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
DRM_PLANE_TYPE_PRIMARY represents a "main" plane for a CRTC. Primary
|
||||
planes are the planes operated upon by by CRTC modesetting and flipping
|
||||
operations described in <xref linkend="drm-kms-crtcops"/>.
|
||||
</listitem>
|
||||
<listitem>
|
||||
DRM_PLANE_TYPE_CURSOR represents a "cursor" plane for a CRTC. Cursor
|
||||
planes are the planes operated upon by the DRM_IOCTL_MODE_CURSOR and
|
||||
DRM_IOCTL_MODE_CURSOR2 ioctls.
|
||||
</listitem>
|
||||
<listitem>
|
||||
DRM_PLANE_TYPE_OVERLAY represents all non-primary, non-cursor planes.
|
||||
Some drivers refer to these types of planes as "sprites" internally.
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
For compatibility with legacy userspace, only overlay planes are made
|
||||
available to userspace by default. Userspace clients may set the
|
||||
DRM_CLIENT_CAP_UNIVERSAL_PLANES client capability bit to indicate that
|
||||
they wish to receive a universal plane list containing all plane types.
|
||||
</para>
|
||||
<sect3>
|
||||
<title>Plane Initialization</title>
|
||||
<para>
|
||||
Planes are optional. To create a plane, a KMS drivers allocates and
|
||||
To create a plane, a KMS drivers allocates and
|
||||
zeroes an instances of struct <structname>drm_plane</structname>
|
||||
(possibly as part of a larger structure) and registers it with a call
|
||||
to <function>drm_plane_init</function>. The function takes a bitmask
|
||||
to <function>drm_universal_plane_init</function>. The function takes a bitmask
|
||||
of the CRTCs that can be associated with the plane, a pointer to the
|
||||
plane functions and a list of format supported formats.
|
||||
plane functions, a list of format supported formats, and the type of
|
||||
plane (primary, cursor, or overlay) being initialized.
|
||||
</para>
|
||||
<para>
|
||||
Cursor and overlay planes are optional. All drivers should provide
|
||||
one primary plane per CRTC (although this requirement may change in
|
||||
the future); drivers that do not wish to provide special handling for
|
||||
primary planes may make use of the helper functions described in
|
||||
<xref linkend="drm-kms-planehelpers"/> to create and register a
|
||||
primary plane with standard capabilities.
|
||||
</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
|
@ -1687,7 +1806,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||
<sect1>
|
||||
<title>Mode Setting Helper Functions</title>
|
||||
<para>
|
||||
The CRTC, encoder and connector functions provided by the drivers
|
||||
The plane, CRTC, encoder and connector functions provided by the drivers
|
||||
implement the DRM API. They're called by the DRM core and ioctl handlers
|
||||
to handle device state changes and configuration request. As implementing
|
||||
those functions often requires logic not specific to drivers, mid-layer
|
||||
|
@ -1695,8 +1814,8 @@ void intel_crt_init(struct drm_device *dev)
|
|||
</para>
|
||||
<para>
|
||||
The DRM core contains one mid-layer implementation. The mid-layer provides
|
||||
implementations of several CRTC, encoder and connector functions (called
|
||||
from the top of the mid-layer) that pre-process requests and call
|
||||
implementations of several plane, CRTC, encoder and connector functions
|
||||
(called from the top of the mid-layer) that pre-process requests and call
|
||||
lower-level functions provided by the driver (at the bottom of the
|
||||
mid-layer). For instance, the
|
||||
<function>drm_crtc_helper_set_config</function> function can be used to
|
||||
|
@ -2134,7 +2253,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||
set the <structfield>display_info</structfield>
|
||||
<structfield>width_mm</structfield> and
|
||||
<structfield>height_mm</structfield> fields if they haven't been set
|
||||
already (for instance at initilization time when a fixed-size panel is
|
||||
already (for instance at initialization time when a fixed-size panel is
|
||||
attached to the connector). The mode <structfield>width_mm</structfield>
|
||||
and <structfield>height_mm</structfield> fields are only used internally
|
||||
during EDID parsing and should not be set when creating modes manually.
|
||||
|
@ -2166,6 +2285,11 @@ void intel_crt_init(struct drm_device *dev)
|
|||
<sect2>
|
||||
<title>Modeset Helper Functions Reference</title>
|
||||
!Edrivers/gpu/drm/drm_crtc_helper.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Output Probing Helper Functions Reference</title>
|
||||
!Pdrivers/gpu/drm/drm_probe_helper.c output probing helper overview
|
||||
!Edrivers/gpu/drm/drm_probe_helper.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>fbdev Helper Functions Reference</title>
|
||||
|
@ -2196,10 +2320,19 @@ void intel_crt_init(struct drm_device *dev)
|
|||
!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
|
||||
<title>HDMI Infoframes Helper Reference</title>
|
||||
<para>
|
||||
Strictly speaking this is not a DRM helper library but generally useable
|
||||
by any driver interfacing with HDMI outputs like v4l or alsa drivers.
|
||||
But it nicely fits into the overall topic of mode setting helper
|
||||
libraries and hence is also included here.
|
||||
</para>
|
||||
!Iinclude/linux/hdmi.h
|
||||
!Edrivers/video/hdmi.c
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title id="drm-kms-planehelpers">Plane Helper Reference</title>
|
||||
!Edrivers/gpu/drm/drm_plane_helper.c Plane Helpers
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
@ -2561,42 +2694,44 @@ int num_ioctls;</synopsis>
|
|||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Command submission & fencing</title>
|
||||
<title>Legacy Support Code</title>
|
||||
<para>
|
||||
This should cover a few device-specific command submission
|
||||
implementations.
|
||||
The section very brievely covers some of the old legacy support code which
|
||||
is only used by old DRM drivers which have done a so-called shadow-attach
|
||||
to the underlying device instead of registering as a real driver. This
|
||||
also includes some of the old generic buffer mangement and command
|
||||
submission code. Do not use any of this in new and modern drivers.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<!-- Internals: suspend/resume -->
|
||||
<sect2>
|
||||
<title>Legacy Suspend/Resume</title>
|
||||
<para>
|
||||
The DRM core provides some suspend/resume code, but drivers wanting full
|
||||
suspend/resume support should provide save() and restore() functions.
|
||||
These are called at suspend, hibernate, or resume time, and should perform
|
||||
any state save or restore required by your device across suspend or
|
||||
hibernate states.
|
||||
</para>
|
||||
<synopsis>int (*suspend) (struct drm_device *, pm_message_t state);
|
||||
int (*resume) (struct drm_device *);</synopsis>
|
||||
<para>
|
||||
Those are legacy suspend and resume methods which
|
||||
<emphasis>only</emphasis> work with the legacy shadow-attach driver
|
||||
registration functions. New driver should use the power management
|
||||
interface provided by their bus type (usually through
|
||||
the struct <structname>device_driver</structname> dev_pm_ops) and set
|
||||
these methods to NULL.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect1>
|
||||
<title>Suspend/Resume</title>
|
||||
<para>
|
||||
The DRM core provides some suspend/resume code, but drivers wanting full
|
||||
suspend/resume support should provide save() and restore() functions.
|
||||
These are called at suspend, hibernate, or resume time, and should perform
|
||||
any state save or restore required by your device across suspend or
|
||||
hibernate states.
|
||||
</para>
|
||||
<synopsis>int (*suspend) (struct drm_device *, pm_message_t state);
|
||||
int (*resume) (struct drm_device *);</synopsis>
|
||||
<para>
|
||||
Those are legacy suspend and resume methods. New driver should use the
|
||||
power management interface provided by their bus type (usually through
|
||||
the struct <structname>device_driver</structname> dev_pm_ops) and set
|
||||
these methods to NULL.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>DMA services</title>
|
||||
<para>
|
||||
This should cover how DMA mapping etc. is supported by the core.
|
||||
These functions are deprecated and should not be used.
|
||||
</para>
|
||||
<sect2>
|
||||
<title>Legacy DMA Services</title>
|
||||
<para>
|
||||
This should cover how DMA mapping etc. is supported by the core.
|
||||
These functions are deprecated and should not be used.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
@ -2658,8 +2793,8 @@ int (*resume) (struct drm_device *);</synopsis>
|
|||
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
|
||||
and called card<num>. Additionally, a currently
|
||||
unused control node, called controlD<num> 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
|
||||
|
@ -2674,21 +2809,21 @@ int (*resume) (struct drm_device *);</synopsis>
|
|||
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>
|
||||
render nodes, it must advertise it via the DRIVER_RENDER
|
||||
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
|
||||
separate render node called renderD<num>. 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
|
||||
will be allowed on this node. Especially GEM_OPEN 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
|
||||
DRM_RENDER_ALLOW so render clients can use them. Driver
|
||||
authors must be careful not to allow any privileged ioctls on render
|
||||
nodes.
|
||||
</para>
|
||||
|
@ -2749,15 +2884,73 @@ int (*resume) (struct drm_device *);</synopsis>
|
|||
</sect1>
|
||||
|
||||
</chapter>
|
||||
</part>
|
||||
<part id="drmDrivers">
|
||||
<title>DRM Drivers</title>
|
||||
|
||||
<!-- API reference -->
|
||||
|
||||
<appendix id="drmDriverApi">
|
||||
<title>DRM Driver API</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Include auto-generated API reference here (need to reference it
|
||||
from paragraphs above too).
|
||||
This second part of the DRM Developer's Guide documents driver code,
|
||||
implementation details and also all the driver-specific userspace
|
||||
interfaces. Especially since all hardware-acceleration interfaces to
|
||||
userspace are driver specific for efficiency and other reasons these
|
||||
interfaces can be rather substantial. Hence every driver has its own
|
||||
chapter.
|
||||
</para>
|
||||
</appendix>
|
||||
</partintro>
|
||||
|
||||
<chapter id="drmI915">
|
||||
<title>drm/i915 Intel GFX Driver</title>
|
||||
<para>
|
||||
The drm/i915 driver supports all (with the exception of some very early
|
||||
models) integrated GFX chipsets with both Intel display and rendering
|
||||
blocks. This excludes a set of SoC platforms with an SGX rendering unit,
|
||||
those have basic support through the gma500 drm driver.
|
||||
</para>
|
||||
<sect1>
|
||||
<title>Display Hardware Handling</title>
|
||||
<para>
|
||||
This section covers everything related to the display hardware including
|
||||
the mode setting infrastructure, plane, sprite and cursor handling and
|
||||
display, output probing and related topics.
|
||||
</para>
|
||||
<sect2>
|
||||
<title>Mode Setting Infrastructure</title>
|
||||
<para>
|
||||
The i915 driver is thus far the only DRM driver which doesn't use the
|
||||
common DRM helper code to implement mode setting sequences. Thus it
|
||||
has its own tailor-made infrastructure for executing a display
|
||||
configuration change.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Plane Configuration</title>
|
||||
<para>
|
||||
This section covers plane configuration and composition with the
|
||||
primary plane, sprites, cursors and overlays. This includes the
|
||||
infrastructure to do atomic vsync'ed updates of all this state and
|
||||
also tightly coupled topics like watermark setup and computation,
|
||||
framebuffer compression and panel self refresh.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Output Probing</title>
|
||||
<para>
|
||||
This section covers output probing and related infrastructure like the
|
||||
hotplug interrupt storm detection and mitigation code. Note that the
|
||||
i915 driver still uses most of the common DRM helper code for output
|
||||
probing, so those sections fully apply.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Memory Management and Command Submission</title>
|
||||
<para>
|
||||
This sections covers all things related to the GEM implementation in the
|
||||
i915 driver.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
</part>
|
||||
</book>
|
||||
|
|
|
@ -671,7 +671,7 @@ printk(KERN_INFO "my ip: %pI4\n", &ipaddress);
|
|||
|
||||
<sect1 id="routines-local-irqs">
|
||||
<title><function>local_irq_save()</function>/<function>local_irq_restore()</function>
|
||||
<filename class="headerfile">include/asm/system.h</filename>
|
||||
<filename class="headerfile">include/linux/irqflags.h</filename>
|
||||
</title>
|
||||
|
||||
<para>
|
||||
|
@ -850,16 +850,6 @@ printk(KERN_INFO "my ip: %pI4\n", &ipaddress);
|
|||
<returnvalue>-ERESTARTSYS</returnvalue> if a signal is received.
|
||||
The <function>wait_event()</function> version ignores signals.
|
||||
</para>
|
||||
<para>
|
||||
Do not use the <function>sleep_on()</function> function family -
|
||||
it is very easy to accidentally introduce races; almost certainly
|
||||
one of the <function>wait_event()</function> family will do, or a
|
||||
loop around <function>schedule_timeout()</function>. If you choose
|
||||
to loop around <function>schedule_timeout()</function> remember
|
||||
you must set the task state (with
|
||||
<function>set_current_state()</function>) on each iteration to avoid
|
||||
busy-looping.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
|
|
|
@ -1042,7 +1042,14 @@ role="subsection"><title>DMX_ADD_PID</title>
|
|||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
<para>This ioctl call allows to add multiple PIDs to a transport stream filter
|
||||
previously set up with DMX_SET_PES_FILTER and output equal to DMX_OUT_TSDEMUX_TAP.
|
||||
</para></entry></row><row><entry align="char"><para>
|
||||
It is used by readers of /dev/dvb/adapterX/demuxY.
|
||||
</para></entry></row><row><entry align="char"><para>
|
||||
It may be called at any time, i.e. before or after the first filter on the
|
||||
shared file descriptor was started. It makes it possible to record multiple
|
||||
services without the need to de-multiplex or re-multiplex TS packets.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
|
@ -1075,7 +1082,7 @@ role="subsection"><title>DMX_ADD_PID</title>
|
|||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
<para>PID number to be filtered.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
|
@ -1087,7 +1094,15 @@ role="subsection"><title>DMX_REMOVE_PID</title>
|
|||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
<para>This ioctl call allows to remove a PID when multiple PIDs are set on a
|
||||
transport stream filter, e. g. a filter previously set up with output equal to
|
||||
DMX_OUT_TSDEMUX_TAP, created via either DMX_SET_PES_FILTER or DMX_ADD_PID.
|
||||
</para></entry></row><row><entry align="char"><para>
|
||||
It is used by readers of /dev/dvb/adapterX/demuxY.
|
||||
</para></entry></row><row><entry align="char"><para>
|
||||
It may be called at any time, i.e. before or after the first filter on the
|
||||
shared file descriptor was started. It makes it possible to record multiple
|
||||
services without the need to de-multiplex or re-multiplex TS packets.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
|
@ -1120,7 +1135,7 @@ role="subsection"><title>DMX_REMOVE_PID</title>
|
|||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
<para>PID of the PES filter to be removed.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<firstname>Mauro</firstname>
|
||||
<othername role="mi">Carvalho</othername>
|
||||
<surname>Chehab</surname>
|
||||
<affiliation><address><email>mchehab@redhat.com</email></address></affiliation>
|
||||
<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation>
|
||||
<contrib>Ported document to Docbook XML.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
@ -28,7 +28,7 @@
|
|||
<holder>Convergence GmbH</holder>
|
||||
</copyright>
|
||||
<copyright>
|
||||
<year>2009-2012</year>
|
||||
<year>2009-2014</year>
|
||||
<holder>Mauro Carvalho Chehab</holder>
|
||||
</copyright>
|
||||
|
||||
|
|
|
@ -196,7 +196,7 @@ get/set up to 64 properties. The actual meaning of each property is described on
|
|||
<para>1)For satellital delivery systems, it is measured in kHz.
|
||||
For the other ones, it is measured in Hz.</para>
|
||||
<para>2)For ISDB-T, the channels are usually transmitted with an offset of 143kHz.
|
||||
E.g. a valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of
|
||||
E.g. a valid frequency could be 474143 kHz. The stepping is bound to the bandwidth of
|
||||
the channel which is 6MHz.</para>
|
||||
|
||||
<para>3)As in ISDB-Tsb the channel consists of only one or three segments the
|
||||
|
|
|
@ -744,7 +744,7 @@ typedef enum fe_hierarchy {
|
|||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, int16_t
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t
|
||||
⋆snr);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
@ -766,7 +766,7 @@ typedef enum fe_hierarchy {
|
|||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int16_t *snr</para>
|
||||
<para>uint16_t *snr</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The signal-to-noise ratio is stored into *snr.</para>
|
||||
|
@ -791,7 +791,7 @@ typedef enum fe_hierarchy {
|
|||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl( int fd, int request =
|
||||
<link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, int16_t ⋆strength);</para>
|
||||
<link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t ⋆strength);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
|
@ -814,7 +814,7 @@ typedef enum fe_hierarchy {
|
|||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int16_t *strength</para>
|
||||
<para>uint16_t *strength</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The signal strength value is stored into *strength.</para>
|
||||
|
|
|
@ -38,70 +38,41 @@ the basic concepts applicable to all devices.</para>
|
|||
|
||||
<para>V4L2 drivers are implemented as kernel modules, loaded
|
||||
manually by the system administrator or automatically when a device is
|
||||
first opened. The driver modules plug into the "videodev" kernel
|
||||
first discovered. The driver modules plug into the "videodev" kernel
|
||||
module. It provides helper functions and a common application
|
||||
interface specified in this document.</para>
|
||||
|
||||
<para>Each driver thus loaded registers one or more device nodes
|
||||
with major number 81 and a minor number between 0 and 255. Assigning
|
||||
minor numbers to V4L2 devices is entirely up to the system administrator,
|
||||
this is primarily intended to solve conflicts between devices.<footnote>
|
||||
<para>Access permissions are associated with character
|
||||
device special files, hence we must ensure device numbers cannot
|
||||
change with the module load order. To this end minor numbers are no
|
||||
longer automatically assigned by the "videodev" module as in V4L but
|
||||
requested by the driver. The defaults will suffice for most people
|
||||
unless two drivers compete for the same minor numbers.</para>
|
||||
</footnote> The module options to select minor numbers are named
|
||||
after the device special file with a "_nr" suffix. For example "video_nr"
|
||||
for <filename>/dev/video</filename> video capture devices. The number is
|
||||
an offset to the base minor number associated with the device type.
|
||||
<footnote>
|
||||
<para>In earlier versions of the V4L2 API the module options
|
||||
where named after the device special file with a "unit_" prefix, expressing
|
||||
the minor number itself, not an offset. Rationale for this change is unknown.
|
||||
Lastly the naming and semantics are just a convention among driver writers,
|
||||
the point to note is that minor numbers are not supposed to be hardcoded
|
||||
into drivers.</para>
|
||||
</footnote> When the driver supports multiple devices of the same
|
||||
type more than one minor number can be assigned, separated by commas:
|
||||
<informalexample>
|
||||
with major number 81 and a minor number between 0 and 255. Minor numbers
|
||||
are allocated dynamically unless the kernel is compiled with the kernel
|
||||
option CONFIG_VIDEO_FIXED_MINOR_RANGES. In that case minor numbers are
|
||||
allocated in ranges depending on the device node type (video, radio, etc.).</para>
|
||||
|
||||
<para>Many drivers support "video_nr", "radio_nr" or "vbi_nr"
|
||||
module options to select specific video/radio/vbi node numbers. This allows
|
||||
the user to request that the device node is named e.g. /dev/video5 instead
|
||||
of leaving it to chance. When the driver supports multiple devices of the same
|
||||
type more than one device node number can be assigned, separated by commas:
|
||||
<informalexample>
|
||||
<screen>
|
||||
> insmod mydriver.o video_nr=0,1 radio_nr=0,1</screen>
|
||||
> modprobe mydriver video_nr=0,1 radio_nr=0,1</screen>
|
||||
</informalexample></para>
|
||||
|
||||
<para>In <filename>/etc/modules.conf</filename> this may be
|
||||
written as: <informalexample>
|
||||
<screen>
|
||||
alias char-major-81-0 mydriver
|
||||
alias char-major-81-1 mydriver
|
||||
alias char-major-81-64 mydriver <co id="alias" />
|
||||
options mydriver video_nr=0,1 radio_nr=0,1 <co id="options" />
|
||||
options mydriver video_nr=0,1 radio_nr=0,1
|
||||
</screen>
|
||||
<calloutlist>
|
||||
<callout arearefs="alias">
|
||||
<para>When an application attempts to open a device
|
||||
special file with major number 81 and minor number 0, 1, or 64, load
|
||||
"mydriver" (and the "videodev" module it depends upon).</para>
|
||||
</callout>
|
||||
<callout arearefs="options">
|
||||
<para>Register the first two video capture devices with
|
||||
minor number 0 and 1 (base number is 0), the first two radio device
|
||||
with minor number 64 and 65 (base 64).</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</informalexample> When no minor number is given as module
|
||||
option the driver supplies a default. <xref linkend="devices" />
|
||||
recommends the base minor numbers to be used for the various device
|
||||
types. Obviously minor numbers must be unique. When the number is
|
||||
already in use the <emphasis>offending device</emphasis> will not be
|
||||
registered. <!-- Blessed by Linus Torvalds on
|
||||
linux-kernel@vger.kernel.org, 2002-11-20. --></para>
|
||||
</informalexample> When no device node number is given as module
|
||||
option the driver supplies a default.</para>
|
||||
|
||||
<para>By convention system administrators create various
|
||||
character device special files with these major and minor numbers in
|
||||
the <filename>/dev</filename> directory. The names recommended for the
|
||||
different V4L2 device types are listed in <xref linkend="devices" />.
|
||||
<para>Normally udev will create the device nodes in /dev automatically
|
||||
for you. If udev is not installed, then you need to enable the
|
||||
CONFIG_VIDEO_FIXED_MINOR_RANGES kernel option in order to be able to correctly
|
||||
relate a minor number to a device node number. I.e., you need to be certain
|
||||
that minor number 5 maps to device node name video5. With this kernel option
|
||||
different device types have different minor number ranges. These ranges are
|
||||
listed in <xref linkend="devices" />.
|
||||
</para>
|
||||
|
||||
<para>The creation of character special files (with
|
||||
|
@ -110,85 +81,66 @@ devices cannot be opened by major and minor number. That means
|
|||
applications cannot <emphasis>reliable</emphasis> scan for loaded or
|
||||
installed drivers. The user must enter a device name, or the
|
||||
application can try the conventional device names.</para>
|
||||
|
||||
<para>Under the device filesystem (devfs) the minor number
|
||||
options are ignored. V4L2 drivers (or by proxy the "videodev" module)
|
||||
automatically create the required device files in the
|
||||
<filename>/dev/v4l</filename> directory using the conventional device
|
||||
names above.</para>
|
||||
</section>
|
||||
|
||||
<section id="related">
|
||||
<title>Related Devices</title>
|
||||
|
||||
<para>Devices can support several related functions. For example
|
||||
video capturing, video overlay and VBI capturing are related because
|
||||
these functions share, amongst other, the same video input and tuner
|
||||
frequency. V4L and earlier versions of V4L2 used the same device name
|
||||
and minor number for video capturing and overlay, but different ones
|
||||
for VBI. Experience showed this approach has several problems<footnote>
|
||||
<para>Given a device file name one cannot reliable find
|
||||
related devices. For once names are arbitrary and in a system with
|
||||
multiple devices, where only some support VBI capturing, a
|
||||
<filename>/dev/video2</filename> is not necessarily related to
|
||||
<filename>/dev/vbi2</filename>. The V4L
|
||||
<constant>VIDIOCGUNIT</constant> ioctl would require a search for a
|
||||
device file with a particular major and minor number.</para>
|
||||
</footnote>, and to make things worse the V4L videodev module
|
||||
used to prohibit multiple opens of a device.</para>
|
||||
<para>Devices can support several functions. For example
|
||||
video capturing, VBI capturing and radio support.</para>
|
||||
|
||||
<para>As a remedy the present version of the V4L2 API relaxed the
|
||||
concept of device types with specific names and minor numbers. For
|
||||
compatibility with old applications drivers must still register different
|
||||
minor numbers to assign a default function to the device. But if related
|
||||
functions are supported by the driver they must be available under all
|
||||
registered minor numbers. The desired function can be selected after
|
||||
opening the device as described in <xref linkend="devices" />.</para>
|
||||
<para>The V4L2 API creates different nodes for each of these functions.</para>
|
||||
|
||||
<para>Imagine a driver supporting video capturing, video
|
||||
overlay, raw VBI capturing, and FM radio reception. It registers three
|
||||
devices with minor number 0, 64 and 224 (this numbering scheme is
|
||||
inherited from the V4L API). Regardless if
|
||||
<filename>/dev/video</filename> (81, 0) or
|
||||
<filename>/dev/vbi</filename> (81, 224) is opened the application can
|
||||
select any one of the video capturing, overlay or VBI capturing
|
||||
functions. Without programming (e. g. reading from the device
|
||||
with <application>dd</application> or <application>cat</application>)
|
||||
<filename>/dev/video</filename> captures video images, while
|
||||
<filename>/dev/vbi</filename> captures raw VBI data.
|
||||
<filename>/dev/radio</filename> (81, 64) is invariable a radio device,
|
||||
unrelated to the video functions. Being unrelated does not imply the
|
||||
devices can be used at the same time, however. The &func-open;
|
||||
function may very well return an &EBUSY;.</para>
|
||||
<para>The V4L2 API was designed with the idea that one device node could support
|
||||
all functions. However, in practice this never worked: this 'feature'
|
||||
was never used by applications and many drivers did not support it and if
|
||||
they did it was certainly never tested. In addition, switching a device
|
||||
node between different functions only works when using the streaming I/O
|
||||
API, not with the read()/write() API.</para>
|
||||
|
||||
<para>Today each device node supports just one function.</para>
|
||||
|
||||
<para>Besides video input or output the hardware may also
|
||||
support audio sampling or playback. If so, these functions are
|
||||
implemented as OSS or ALSA PCM devices and eventually OSS or ALSA
|
||||
audio mixer. The V4L2 API makes no provisions yet to find these
|
||||
related devices. If you have an idea please write to the linux-media
|
||||
mailing list: &v4l-ml;.</para>
|
||||
implemented as ALSA PCM devices with optional ALSA audio mixer
|
||||
devices.</para>
|
||||
|
||||
<para>One problem with all these devices is that the V4L2 API
|
||||
makes no provisions to find these related devices. Some really
|
||||
complex devices use the Media Controller (see <xref linkend="media_controller" />)
|
||||
which can be used for this purpose. But most drivers do not use it,
|
||||
and while some code exists that uses sysfs to discover related devices
|
||||
(see libmedia_dev in the <ulink url="http://git.linuxtv.org/v4l-utils/">v4l-utils</ulink>
|
||||
git repository), there is no library yet that can provide a single API towards
|
||||
both Media Controller-based devices and devices that do not use the Media Controller.
|
||||
If you want to work on this please write to the linux-media mailing list: &v4l-ml;.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Multiple Opens</title>
|
||||
|
||||
<para>In general, V4L2 devices can be opened more than once.
|
||||
<para>V4L2 devices can be opened more than once.<footnote><para>
|
||||
There are still some old and obscure drivers that have not been updated to
|
||||
allow for multiple opens. This implies that for such drivers &func-open; can
|
||||
return an &EBUSY; when the device is already in use.</para></footnote>
|
||||
When this is supported by the driver, users can for example start a
|
||||
"panel" application to change controls like brightness or audio
|
||||
volume, while another application captures video and audio. In other words, panel
|
||||
applications are comparable to an OSS or ALSA audio mixer application.
|
||||
When a device supports multiple functions like capturing and overlay
|
||||
<emphasis>simultaneously</emphasis>, multiple opens allow concurrent
|
||||
use of the device by forked processes or specialized applications.</para>
|
||||
applications are comparable to an ALSA audio mixer application.
|
||||
Just opening a V4L2 device should not change the state of the device.<footnote>
|
||||
<para>Unfortunately, opening a radio device often switches the state of the
|
||||
device to radio mode in many drivers. This behavior should be fixed eventually
|
||||
as it violates the V4L2 specification.</para></footnote></para>
|
||||
|
||||
<para>Multiple opens are optional, although drivers should
|
||||
permit at least concurrent accesses without data exchange, &ie; panel
|
||||
applications. This implies &func-open; can return an &EBUSY; when the
|
||||
device is already in use, as well as &func-ioctl; functions initiating
|
||||
data exchange (namely the &VIDIOC-S-FMT; ioctl), and the &func-read;
|
||||
and &func-write; functions.</para>
|
||||
<para>Once an application has allocated the memory buffers needed for
|
||||
streaming data (by calling the &VIDIOC-REQBUFS; or &VIDIOC-CREATE-BUFS; ioctls,
|
||||
or implicitly by calling the &func-read; or &func-write; functions) that
|
||||
application (filehandle) becomes the owner of the device. It is no longer
|
||||
allowed to make changes that would affect the buffer sizes (e.g. by calling
|
||||
the &VIDIOC-S-FMT; ioctl) and other applications are no longer allowed to allocate
|
||||
buffers or start or stop streaming. The &EBUSY; will be returned instead.</para>
|
||||
|
||||
<para>Mere opening a V4L2 device does not grant exclusive
|
||||
<para>Merely opening a V4L2 device does not grant exclusive
|
||||
access.<footnote>
|
||||
<para>Drivers could recognize the
|
||||
<constant>O_EXCL</constant> open flag. Presently this is not required,
|
||||
|
@ -206,12 +158,7 @@ additional access privileges using the priority mechanism described in
|
|||
<para>V4L2 drivers should not support multiple applications
|
||||
reading or writing the same data stream on a device by copying
|
||||
buffers, time multiplexing or similar means. This is better handled by
|
||||
a proxy application in user space. When the driver supports stream
|
||||
sharing anyway it must be implemented transparently. The V4L2 API does
|
||||
not specify how conflicts are solved. <!-- For example O_EXCL when the
|
||||
application does not want to be preempted, PROT_READ mmapped buffers
|
||||
which can be mapped twice, what happens when image formats do not
|
||||
match etc.--></para>
|
||||
a proxy application in user space.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
@ -240,15 +187,15 @@ methods</link> supported by the device.</para>
|
|||
|
||||
<para>Starting with kernel version 3.1, VIDIOC-QUERYCAP will return the
|
||||
V4L2 API version used by the driver, with generally matches the Kernel version.
|
||||
There's no need of using &VIDIOC-QUERYCAP; to check if an specific ioctl is
|
||||
supported, the V4L2 core now returns ENOIOCTLCMD if a driver doesn't provide
|
||||
There's no need of using &VIDIOC-QUERYCAP; to check if a specific ioctl is
|
||||
supported, the V4L2 core now returns ENOTTY if a driver doesn't provide
|
||||
support for an ioctl.</para>
|
||||
|
||||
<para>Other features can be queried
|
||||
by calling the respective ioctl, for example &VIDIOC-ENUMINPUT;
|
||||
to learn about the number, types and names of video connectors on the
|
||||
device. Although abstraction is a major objective of this API, the
|
||||
ioctl also allows driver specific applications to reliable identify
|
||||
&VIDIOC-QUERYCAP; ioctl also allows driver specific applications to reliably identify
|
||||
the driver.</para>
|
||||
|
||||
<para>All V4L2 drivers must support
|
||||
|
@ -278,9 +225,7 @@ Applications requiring a different priority will usually call
|
|||
the &VIDIOC-QUERYCAP; ioctl.</para>
|
||||
|
||||
<para>Ioctls changing driver properties, such as &VIDIOC-S-INPUT;,
|
||||
return an &EBUSY; after another application obtained higher priority.
|
||||
An event mechanism to notify applications about asynchronous property
|
||||
changes has been proposed but not added yet.</para>
|
||||
return an &EBUSY; after another application obtained higher priority.</para>
|
||||
</section>
|
||||
|
||||
<section id="video">
|
||||
|
@ -288,9 +233,9 @@ changes has been proposed but not added yet.</para>
|
|||
|
||||
<para>Video inputs and outputs are physical connectors of a
|
||||
device. These can be for example RF connectors (antenna/cable), CVBS
|
||||
a.k.a. Composite Video, S-Video or RGB connectors. Only video and VBI
|
||||
capture devices have inputs, output devices have outputs, at least one
|
||||
each. Radio devices have no video inputs or outputs.</para>
|
||||
a.k.a. Composite Video, S-Video or RGB connectors. Video and VBI
|
||||
capture devices have inputs. Video and VBI output devices have outputs,
|
||||
at least one each. Radio devices have no video inputs or outputs.</para>
|
||||
|
||||
<para>To learn about the number and attributes of the
|
||||
available inputs and outputs applications can enumerate them with the
|
||||
|
@ -299,30 +244,13 @@ available inputs and outputs applications can enumerate them with the
|
|||
ioctl also contains signal status information applicable when the
|
||||
current video input is queried.</para>
|
||||
|
||||
<para>The &VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; ioctl return the
|
||||
<para>The &VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; ioctls return the
|
||||
index of the current video input or output. To select a different
|
||||
input or output applications call the &VIDIOC-S-INPUT; and
|
||||
&VIDIOC-S-OUTPUT; ioctl. Drivers must implement all the input ioctls
|
||||
&VIDIOC-S-OUTPUT; ioctls. Drivers must implement all the input ioctls
|
||||
when the device has one or more inputs, all the output ioctls when the
|
||||
device has one or more outputs.</para>
|
||||
|
||||
<!--
|
||||
<figure id=io-tree>
|
||||
<title>Input and output enumeration is the root of most device properties.</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="links.pdf" format="ps" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="links.gif" format="gif" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Links between various device property structures.</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
-->
|
||||
|
||||
<example>
|
||||
<title>Information about the current video input</title>
|
||||
|
||||
|
@ -330,20 +258,20 @@ device has one or more outputs.</para>
|
|||
&v4l2-input; input;
|
||||
int index;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-G-INPUT;, &index)) {
|
||||
perror ("VIDIOC_G_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &index)) {
|
||||
perror("VIDIOC_G_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset (&input, 0, sizeof (input));
|
||||
memset(&input, 0, sizeof(input));
|
||||
input.index = index;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror ("VIDIOC_ENUMINPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror("VIDIOC_ENUMINPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf ("Current input: %s\n", input.name);
|
||||
printf("Current input: %s\n", input.name);
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
|
@ -355,9 +283,9 @@ int index;
|
|||
|
||||
index = 0;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-S-INPUT;, &index)) {
|
||||
perror ("VIDIOC_S_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-S-INPUT;, &index)) {
|
||||
perror("VIDIOC_S_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
|
@ -397,7 +325,7 @@ available inputs and outputs applications can enumerate them with the
|
|||
also contains signal status information applicable when the current
|
||||
audio input is queried.</para>
|
||||
|
||||
<para>The &VIDIOC-G-AUDIO; and &VIDIOC-G-AUDOUT; ioctl report
|
||||
<para>The &VIDIOC-G-AUDIO; and &VIDIOC-G-AUDOUT; ioctls report
|
||||
the current audio input and output, respectively. Note that, unlike
|
||||
&VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; these ioctls return a structure
|
||||
as <constant>VIDIOC_ENUMAUDIO</constant> and
|
||||
|
@ -408,11 +336,11 @@ applications call the &VIDIOC-S-AUDIO; ioctl. To select an audio
|
|||
output (which presently has no changeable properties) applications
|
||||
call the &VIDIOC-S-AUDOUT; ioctl.</para>
|
||||
|
||||
<para>Drivers must implement all input ioctls when the device
|
||||
has one or more inputs, all output ioctls when the device has one
|
||||
or more outputs. When the device has any audio inputs or outputs the
|
||||
driver must set the <constant>V4L2_CAP_AUDIO</constant> flag in the
|
||||
&v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl.</para>
|
||||
<para>Drivers must implement all audio input ioctls when the device
|
||||
has multiple selectable audio inputs, all audio output ioctls when the
|
||||
device has multiple selectable audio outputs. When the device has any
|
||||
audio inputs or outputs the driver must set the <constant>V4L2_CAP_AUDIO</constant>
|
||||
flag in the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl.</para>
|
||||
|
||||
<example>
|
||||
<title>Information about the current audio input</title>
|
||||
|
@ -420,14 +348,14 @@ driver must set the <constant>V4L2_CAP_AUDIO</constant> flag in the
|
|||
<programlisting>
|
||||
&v4l2-audio; audio;
|
||||
|
||||
memset (&audio, 0, sizeof (audio));
|
||||
memset(&audio, 0, sizeof(audio));
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-G-AUDIO;, &audio)) {
|
||||
perror ("VIDIOC_G_AUDIO");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-G-AUDIO;, &audio)) {
|
||||
perror("VIDIOC_G_AUDIO");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf ("Current input: %s\n", audio.name);
|
||||
printf("Current input: %s\n", audio.name);
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
|
@ -437,13 +365,13 @@ printf ("Current input: %s\n", audio.name);
|
|||
<programlisting>
|
||||
&v4l2-audio; audio;
|
||||
|
||||
memset (&audio, 0, sizeof (audio)); /* clear audio.mode, audio.reserved */
|
||||
memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */
|
||||
|
||||
audio.index = 0;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-S-AUDIO;, &audio)) {
|
||||
perror ("VIDIOC_S_AUDIO");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-S-AUDIO;, &audio)) {
|
||||
perror("VIDIOC_S_AUDIO");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
|
@ -468,7 +396,7 @@ the tuner.</para>
|
|||
video inputs.</para>
|
||||
|
||||
<para>To query and change tuner properties applications use the
|
||||
&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctl, respectively. The
|
||||
&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctls, respectively. The
|
||||
&v4l2-tuner; returned by <constant>VIDIOC_G_TUNER</constant> also
|
||||
contains signal status information applicable when the tuner of the
|
||||
current video or radio input is queried. Note that
|
||||
|
@ -533,7 +461,7 @@ standards or variations of standards. Each video input and output may
|
|||
support another set of standards. This set is reported by the
|
||||
<structfield>std</structfield> field of &v4l2-input; and
|
||||
&v4l2-output; returned by the &VIDIOC-ENUMINPUT; and
|
||||
&VIDIOC-ENUMOUTPUT; ioctl, respectively.</para>
|
||||
&VIDIOC-ENUMOUTPUT; ioctls, respectively.</para>
|
||||
|
||||
<para>V4L2 defines one bit for each analog video standard
|
||||
currently in use worldwide, and sets aside bits for driver defined
|
||||
|
@ -564,28 +492,10 @@ automatically.</para>
|
|||
<para>To query and select the standard used by the current video
|
||||
input or output applications call the &VIDIOC-G-STD; and
|
||||
&VIDIOC-S-STD; ioctl, respectively. The <emphasis>received</emphasis>
|
||||
standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the parameter of all these ioctls is a pointer to a &v4l2-std-id; type (a standard set), <emphasis>not</emphasis> an index into the standard enumeration.<footnote>
|
||||
<para>An alternative to the current scheme is to use pointers
|
||||
to indices as arguments of <constant>VIDIOC_G_STD</constant> and
|
||||
<constant>VIDIOC_S_STD</constant>, the &v4l2-input; and
|
||||
&v4l2-output; <structfield>std</structfield> field would be a set of
|
||||
indices like <structfield>audioset</structfield>.</para>
|
||||
<para>Indices are consistent with the rest of the API
|
||||
and identify the standard unambiguously. In the present scheme of
|
||||
things an enumerated standard is looked up by &v4l2-std-id;. Now the
|
||||
standards supported by the inputs of a device can overlap. Just
|
||||
assume the tuner and composite input in the example above both
|
||||
exist on a device. An enumeration of "PAL-B/G", "PAL-H/I" suggests
|
||||
a choice which does not exist. We cannot merge or omit sets, because
|
||||
applications would be unable to find the standards reported by
|
||||
<constant>VIDIOC_G_STD</constant>. That leaves separate enumerations
|
||||
for each input. Also selecting a standard by &v4l2-std-id; can be
|
||||
ambiguous. Advantage of this method is that applications need not
|
||||
identify the standard indirectly, after enumerating.</para><para>So in
|
||||
summary, the lookup itself is unavoidable. The difference is only
|
||||
whether the lookup is necessary to find an enumerated standard or to
|
||||
switch to a standard by &v4l2-std-id;.</para>
|
||||
</footnote> Drivers must implement all video standard ioctls
|
||||
standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the
|
||||
parameter of all these ioctls is a pointer to a &v4l2-std-id; type
|
||||
(a standard set), <emphasis>not</emphasis> an index into the standard
|
||||
enumeration. Drivers must implement all video standard ioctls
|
||||
when the device has one or more video inputs or outputs.</para>
|
||||
|
||||
<para>Special rules apply to devices such as USB cameras where the notion of video
|
||||
|
@ -604,17 +514,10 @@ to zero and the <constant>VIDIOC_G_STD</constant>,
|
|||
<constant>VIDIOC_S_STD</constant>,
|
||||
<constant>VIDIOC_QUERYSTD</constant> and
|
||||
<constant>VIDIOC_ENUMSTD</constant> ioctls shall return the
|
||||
&ENOTTY;.<footnote>
|
||||
<para>See <xref linkend="buffer" /> for a rationale.</para>
|
||||
&ENOTTY; or the &EINVAL;.</para>
|
||||
<para>Applications can make use of the <xref linkend="input-capabilities" /> and
|
||||
<xref linkend="output-capabilities"/> flags to determine whether the video standard ioctls
|
||||
are available for the device.</para>
|
||||
|
||||
<para>See <xref linkend="buffer" /> for a rationale. Probably
|
||||
even USB cameras follow some well known video standard. It might have
|
||||
been better to explicitly indicate elsewhere if a device cannot live
|
||||
up to normal expectations, instead of this exception.</para>
|
||||
</footnote></para>
|
||||
can be used with the given input or output.</para>
|
||||
|
||||
<example>
|
||||
<title>Information about the current video standard</title>
|
||||
|
@ -623,22 +526,22 @@ up to normal expectations, instead of this exception.</para>
|
|||
&v4l2-std-id; std_id;
|
||||
&v4l2-standard; standard;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-G-STD;, &std_id)) {
|
||||
if (-1 == ioctl(fd, &VIDIOC-G-STD;, &std_id)) {
|
||||
/* Note when VIDIOC_ENUMSTD always returns ENOTTY this
|
||||
is no video device or it falls under the USB exception,
|
||||
and VIDIOC_G_STD returning ENOTTY is no error. */
|
||||
|
||||
perror ("VIDIOC_G_STD");
|
||||
exit (EXIT_FAILURE);
|
||||
perror("VIDIOC_G_STD");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset (&standard, 0, sizeof (standard));
|
||||
memset(&standard, 0, sizeof(standard));
|
||||
standard.index = 0;
|
||||
|
||||
while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &standard)) {
|
||||
while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) {
|
||||
if (standard.id & std_id) {
|
||||
printf ("Current video standard: %s\n", standard.name);
|
||||
exit (EXIT_SUCCESS);
|
||||
printf("Current video standard: %s\n", standard.name);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
standard.index++;
|
||||
|
@ -648,8 +551,8 @@ while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &standard)) {
|
|||
empty unless this device falls under the USB exception. */
|
||||
|
||||
if (errno == EINVAL || standard.index == 0) {
|
||||
perror ("VIDIOC_ENUMSTD");
|
||||
exit (EXIT_FAILURE);
|
||||
perror("VIDIOC_ENUMSTD");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
|
@ -662,26 +565,26 @@ input</title>
|
|||
&v4l2-input; input;
|
||||
&v4l2-standard; standard;
|
||||
|
||||
memset (&input, 0, sizeof (input));
|
||||
memset(&input, 0, sizeof(input));
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-G-INPUT;, &input.index)) {
|
||||
perror ("VIDIOC_G_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) {
|
||||
perror("VIDIOC_G_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror ("VIDIOC_ENUM_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror("VIDIOC_ENUM_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf ("Current input %s supports:\n", input.name);
|
||||
printf("Current input %s supports:\n", input.name);
|
||||
|
||||
memset (&standard, 0, sizeof (standard));
|
||||
memset(&standard, 0, sizeof(standard));
|
||||
standard.index = 0;
|
||||
|
||||
while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &standard)) {
|
||||
while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) {
|
||||
if (standard.id & input.std)
|
||||
printf ("%s\n", standard.name);
|
||||
printf("%s\n", standard.name);
|
||||
|
||||
standard.index++;
|
||||
}
|
||||
|
@ -690,8 +593,8 @@ while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &standard)) {
|
|||
empty unless this device falls under the USB exception. */
|
||||
|
||||
if (errno != EINVAL || standard.index == 0) {
|
||||
perror ("VIDIOC_ENUMSTD");
|
||||
exit (EXIT_FAILURE);
|
||||
perror("VIDIOC_ENUMSTD");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
|
@ -703,21 +606,21 @@ if (errno != EINVAL || standard.index == 0) {
|
|||
&v4l2-input; input;
|
||||
&v4l2-std-id; std_id;
|
||||
|
||||
memset (&input, 0, sizeof (input));
|
||||
memset(&input, 0, sizeof(input));
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-G-INPUT;, &input.index)) {
|
||||
perror ("VIDIOC_G_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) {
|
||||
perror("VIDIOC_G_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror ("VIDIOC_ENUM_INPUT");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) {
|
||||
perror("VIDIOC_ENUM_INPUT");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (0 == (input.std & V4L2_STD_PAL_BG)) {
|
||||
fprintf (stderr, "Oops. B/G PAL is not supported.\n");
|
||||
exit (EXIT_FAILURE);
|
||||
fprintf(stderr, "Oops. B/G PAL is not supported.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Note this is also supposed to work when only B
|
||||
|
@ -725,9 +628,9 @@ if (0 == (input.std & V4L2_STD_PAL_BG)) {
|
|||
|
||||
std_id = V4L2_STD_PAL_BG;
|
||||
|
||||
if (-1 == ioctl (fd, &VIDIOC-S-STD;, &std_id)) {
|
||||
perror ("VIDIOC_S_STD");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, &VIDIOC-S-STD;, &std_id)) {
|
||||
perror("VIDIOC_S_STD");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
|
@ -740,26 +643,25 @@ corresponding video timings. Today there are many more different hardware interf
|
|||
such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry
|
||||
video signals and there is a need to extend the API to select the video timings
|
||||
for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to
|
||||
the limited bits available, a new set of IOCTLs was added to set/get video timings at
|
||||
the input and output: </para><itemizedlist>
|
||||
<listitem>
|
||||
<para>DV Timings: This will allow applications to define detailed
|
||||
video timings for the interface. This includes parameters such as width, height,
|
||||
polarities, frontporch, backporch etc. The <filename>linux/v4l2-dv-timings.h</filename>
|
||||
the limited bits available, a new set of ioctls was added to set/get video timings at
|
||||
the input and output.</para>
|
||||
|
||||
<para>These ioctls deal with the detailed digital video timings that define
|
||||
each video format. This includes parameters such as the active video width and height,
|
||||
signal polarities, frontporches, backporches, sync widths etc. The <filename>linux/v4l2-dv-timings.h</filename>
|
||||
header can be used to get the timings of the formats in the <xref linkend="cea861" /> and
|
||||
<xref linkend="vesadmt" /> standards.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>To enumerate and query the attributes of the DV timings supported by a device,
|
||||
|
||||
<para>To enumerate and query the attributes of the DV timings supported by a device
|
||||
applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls.
|
||||
To set DV timings for the device, applications use the
|
||||
To set DV timings for the device applications use the
|
||||
&VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the
|
||||
&VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications
|
||||
use the &VIDIOC-QUERY-DV-TIMINGS; ioctl.</para>
|
||||
<para>Applications can make use of the <xref linkend="input-capabilities" /> and
|
||||
<xref linkend="output-capabilities"/> flags to decide what ioctls are available to set the
|
||||
video timings for the device.</para>
|
||||
<xref linkend="output-capabilities"/> flags to determine whether the digital video ioctls
|
||||
can be used with the given input or output.</para>
|
||||
</section>
|
||||
|
||||
&sub-controls;
|
||||
|
|
|
@ -397,7 +397,7 @@ linkend="control" />.</para>
|
|||
|
||||
<para>The <structfield>depth</structfield> (average number of
|
||||
bits per pixel) of a video image is implied by the selected image
|
||||
format. V4L2 does not explicitely provide such information assuming
|
||||
format. V4L2 does not explicitly provide such information assuming
|
||||
applications recognizing the format are aware of the image depth and
|
||||
others need not know. The <structfield>palette</structfield> field
|
||||
moved into the &v4l2-pix-format;:<informaltable>
|
||||
|
@ -2535,6 +2535,16 @@ fields changed from _s32 to _u32.
|
|||
</orderedlist>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>V4L2 in Linux 3.15</title>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Added Software Defined Radio (SDR) Interface.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</section>
|
||||
|
||||
<section id="other">
|
||||
<title>Relation of V4L2 to other Linux multimedia APIs</title>
|
||||
|
||||
|
@ -2651,6 +2661,9 @@ ioctls.</para>
|
|||
<listitem>
|
||||
<para>Exporting DMABUF files using &VIDIOC-EXPBUF; ioctl.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Software Defined Radio (SDR) Interface, <xref linkend="sdr" />.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -2256,6 +2256,26 @@ Applicable to the MPEG1, MPEG2, MPEG4 encoders.</entry>
|
|||
<entry>integer</entry>
|
||||
</row><row><entry spanname="descr">Sets the initial delay in milliseconds for
|
||||
VBV buffer control.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-mpeg-video-hor-search-range">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Horizontal search range defines maximum horizontal search area in pixels
|
||||
to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set
|
||||
horizontal search range for motion estimation module in video encoder.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-mpeg-video-vert-search-range">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Vertical search range defines maximum vertical search area in pixels
|
||||
to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set
|
||||
vertical search range for motion estimation module in video encoder.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
|
@ -4370,6 +4390,24 @@ interface and may change in the future.</para>
|
|||
<entry>The flash controller has detected a short or open
|
||||
circuit condition on the indicator LED.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FLASH_FAULT_UNDER_VOLTAGE</constant></entry>
|
||||
<entry>Flash controller voltage to the flash LED
|
||||
has been below the minimum limit specific to the flash
|
||||
controller.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FLASH_FAULT_INPUT_VOLTAGE</constant></entry>
|
||||
<entry>The input voltage of the flash controller is below
|
||||
the limit under which strobing the flash at full current
|
||||
will not be possible.The condition persists until this flag
|
||||
is no longer set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE</constant></entry>
|
||||
<entry>The temperature of the LED has exceeded its
|
||||
allowed upper limit.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
|
@ -4971,4 +5009,142 @@ defines possible values for de-emphasis. Here they are:</entry>
|
|||
</table>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="rf-tuner-controls">
|
||||
<title>RF Tuner Control Reference</title>
|
||||
|
||||
<para>
|
||||
The RF Tuner (RF_TUNER) class includes controls for common features of devices
|
||||
having RF tuner.
|
||||
</para>
|
||||
<para>
|
||||
In this context, RF tuner is radio receiver circuit between antenna and
|
||||
demodulator. It receives radio frequency (RF) from the antenna and converts that
|
||||
received signal to lower intermediate frequency (IF) or baseband frequency (BB).
|
||||
Tuners that could do baseband output are often called Zero-IF tuners. Older
|
||||
tuners were typically simple PLL tuners inside a metal box, whilst newer ones
|
||||
are highly integrated chips without a metal box "silicon tuners". These controls
|
||||
are mostly applicable for new feature rich silicon tuners, just because older
|
||||
tuners does not have much adjustable features.
|
||||
</para>
|
||||
<para>
|
||||
For more information about RF tuners see
|
||||
<ulink url="http://en.wikipedia.org/wiki/Tuner_%28radio%29">Tuner (radio)</ulink>
|
||||
and
|
||||
<ulink url="http://en.wikipedia.org/wiki/RF_front_end">RF front end</ulink>
|
||||
from Wikipedia.
|
||||
</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="rf-tuner-control-id">
|
||||
<title>RF_TUNER 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 spanname="id"><constant>V4L2_CID_RF_TUNER_CLASS</constant> </entry>
|
||||
<entry>class</entry>
|
||||
</row><row><entry spanname="descr">The RF_TUNER class
|
||||
descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a
|
||||
description of this control class.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_BANDWIDTH_AUTO</constant> </entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Enables/disables tuner radio channel
|
||||
bandwidth configuration. In automatic mode bandwidth configuration is performed
|
||||
by the driver.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_BANDWIDTH</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Filter(s) on tuner signal path are used to
|
||||
filter signal according to receiving party needs. Driver configures filters to
|
||||
fulfill desired bandwidth requirement. Used when V4L2_CID_RF_TUNER_BANDWIDTH_AUTO is not
|
||||
set. Unit is in Hz. The range and step are driver-specific.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_LNA_GAIN_AUTO</constant> </entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Enables/disables LNA automatic gain control (AGC)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO</constant> </entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Enables/disables mixer automatic gain control (AGC)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_IF_GAIN_AUTO</constant> </entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Enables/disables IF automatic gain control (AGC)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_LNA_GAIN</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">LNA (low noise amplifier) gain is first
|
||||
gain stage on the RF tuner signal path. It is located very close to tuner
|
||||
antenna input. Used when <constant>V4L2_CID_RF_TUNER_LNA_GAIN_AUTO</constant> is not set.
|
||||
The range and step are driver-specific.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_MIXER_GAIN</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Mixer gain is second gain stage on the RF
|
||||
tuner signal path. It is located inside mixer block, where RF signal is
|
||||
down-converted by the mixer. Used when <constant>V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO</constant>
|
||||
is not set. The range and step are driver-specific.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_IF_GAIN</constant> </entry>
|
||||
<entry>integer</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">IF gain is last gain stage on the RF tuner
|
||||
signal path. It is located on output of RF tuner. It controls signal level of
|
||||
intermediate frequency output or baseband output. Used when
|
||||
<constant>V4L2_CID_RF_TUNER_IF_GAIN_AUTO</constant> is not set. The range and step are
|
||||
driver-specific.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_RF_TUNER_PLL_LOCK</constant> </entry>
|
||||
<entry>boolean</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="descr">Is synthesizer PLL locked? RF tuner is
|
||||
receiving given frequency when that control is set. This is a read-only control.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</section>
|
||||
</section>
|
||||
|
|
|
@ -56,18 +56,18 @@ framebuffer device.</para>
|
|||
unsigned int i;
|
||||
int fb_fd;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_G_FBUF, &fbuf)) {
|
||||
perror ("VIDIOC_G_FBUF");
|
||||
exit (EXIT_FAILURE);
|
||||
if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) {
|
||||
perror("VIDIOC_G_FBUF");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (i = 0; i > 30; ++i) {
|
||||
for (i = 0; i < 30; i++) {
|
||||
char dev_name[16];
|
||||
struct fb_fix_screeninfo si;
|
||||
|
||||
snprintf (dev_name, sizeof (dev_name), "/dev/fb%u", i);
|
||||
snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i);
|
||||
|
||||
fb_fd = open (dev_name, O_RDWR);
|
||||
fb_fd = open(dev_name, O_RDWR);
|
||||
if (-1 == fb_fd) {
|
||||
switch (errno) {
|
||||
case ENOENT: /* no such file */
|
||||
|
@ -75,19 +75,19 @@ for (i = 0; i > 30; ++i) {
|
|||
continue;
|
||||
|
||||
default:
|
||||
perror ("open");
|
||||
exit (EXIT_FAILURE);
|
||||
perror("open");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == ioctl (fb_fd, FBIOGET_FSCREENINFO, &si)) {
|
||||
if (si.smem_start == (unsigned long) fbuf.base)
|
||||
if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) {
|
||||
if (si.smem_start == (unsigned long)fbuf.base)
|
||||
break;
|
||||
} else {
|
||||
/* Apparently not a framebuffer device. */
|
||||
}
|
||||
|
||||
close (fb_fd);
|
||||
close(fb_fd);
|
||||
fb_fd = -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
<title>Software Defined Radio Interface (SDR)</title>
|
||||
|
||||
<note>
|
||||
<title>Experimental</title>
|
||||
<para>This is an <link linkend="experimental"> experimental </link>
|
||||
interface and may change in the future.</para>
|
||||
</note>
|
||||
|
||||
<para>
|
||||
SDR is an abbreviation of Software Defined Radio, the radio device
|
||||
which uses application software for modulation or demodulation. This interface
|
||||
is intended for controlling and data streaming of such devices.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
SDR devices are accessed through character device special files named
|
||||
<filename>/dev/swradio0</filename> to <filename>/dev/swradio255</filename>
|
||||
with major number 81 and dynamically allocated minor numbers 0 to 255.
|
||||
</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>
|
||||
Devices supporting the SDR receiver interface set the
|
||||
<constant>V4L2_CAP_SDR_CAPTURE</constant> and
|
||||
<constant>V4L2_CAP_TUNER</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an
|
||||
Analog to Digital Converter (ADC), which is a mandatory element for the SDR receiver.
|
||||
At least one of the read/write, streaming or asynchronous I/O methods must
|
||||
be supported.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>
|
||||
SDR devices can support <link linkend="control">controls</link>, and must
|
||||
support the <link linkend="tuner">tuner</link> ioctls. Tuner ioctls are used
|
||||
for setting the ADC sampling rate (sampling frequency) and the possible RF tuner
|
||||
frequency.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <constant>V4L2_TUNER_ADC</constant> tuner type is used for ADC tuners, and
|
||||
the <constant>V4L2_TUNER_RF</constant> tuner type is used for RF tuners. The
|
||||
tuner index of the RF tuner (if any) must always follow the ADC tuner index.
|
||||
Normally the ADC tuner is #0 and the RF tuner is #1.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The &VIDIOC-S-HW-FREQ-SEEK; ioctl is not supported.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Data Format Negotiation</title>
|
||||
|
||||
<para>
|
||||
The SDR capture device uses the <link linkend="format">format</link> ioctls to
|
||||
select the capture format. Both the sampling resolution and the data streaming
|
||||
format are bound to that selectable format. In addition to the basic
|
||||
<link linkend="format">format</link> ioctls, the &VIDIOC-ENUM-FMT; ioctl
|
||||
must be supported as well.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To use the <link linkend="format">format</link> ioctls applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant> and use the &v4l2-sdr-format;
|
||||
<structfield>sdr</structfield> member of the <structfield>fmt</structfield>
|
||||
union as needed per the desired operation.
|
||||
Currently only the <structfield>pixelformat</structfield> field of
|
||||
&v4l2-sdr-format; is used. The content of that field is the V4L2 fourcc code
|
||||
of the data format.
|
||||
</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-sdr-format">
|
||||
<title>struct <structname>v4l2_sdr_format</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>pixelformat</structfield></entry>
|
||||
<entry>
|
||||
The data format or type of compression, set by the application. This is a
|
||||
little endian <link linkend="v4l2-fourcc">four character code</link>.
|
||||
V4L2 defines SDR formats in <xref linkend="sdr-formats" />.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>reserved[28]</structfield></entry>
|
||||
<entry>This array is reserved for future extensions.
|
||||
Drivers and applications must set it to zero.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
An SDR device may support <link linkend="rw">read/write</link>
|
||||
and/or streaming (<link linkend="mmap">memory mapping</link>
|
||||
or <link linkend="userp">user pointer</link>) I/O.
|
||||
</para>
|
||||
|
||||
</section>
|
|
@ -339,8 +339,8 @@ returns immediately with an &EAGAIN; when no buffer is available. The
|
|||
queues as a side effect. Since there is no notion of doing anything
|
||||
"now" on a multitasking system, if an application needs to synchronize
|
||||
with another event it should examine the &v4l2-buffer;
|
||||
<structfield>timestamp</structfield> of captured buffers, or set the
|
||||
field before enqueuing buffers for output.</para>
|
||||
<structfield>timestamp</structfield> of captured or outputted buffers.
|
||||
</para>
|
||||
|
||||
<para>Drivers implementing memory mapping I/O must
|
||||
support the <constant>VIDIOC_REQBUFS</constant>,
|
||||
|
@ -457,7 +457,7 @@ queues and unlocks all buffers as a side effect. Since there is no
|
|||
notion of doing anything "now" on a multitasking system, if an
|
||||
application needs to synchronize with another event it should examine
|
||||
the &v4l2-buffer; <structfield>timestamp</structfield> of captured
|
||||
buffers, or set the field before enqueuing buffers for output.</para>
|
||||
or outputted buffers.</para>
|
||||
|
||||
<para>Drivers implementing user pointer I/O must
|
||||
support the <constant>VIDIOC_REQBUFS</constant>,
|
||||
|
@ -620,8 +620,7 @@ returns immediately with an &EAGAIN; when no buffer is available. The
|
|||
unlocks all buffers as a side effect. Since there is no notion of doing
|
||||
anything "now" on a multitasking system, if an application needs to synchronize
|
||||
with another event it should examine the &v4l2-buffer;
|
||||
<structfield>timestamp</structfield> of captured buffers, or set the field
|
||||
before enqueuing buffers for output.</para>
|
||||
<structfield>timestamp</structfield> of captured or outputted buffers.</para>
|
||||
|
||||
<para>Drivers implementing DMABUF importing I/O must support the
|
||||
<constant>VIDIOC_REQBUFS</constant>, <constant>VIDIOC_QBUF</constant>,
|
||||
|
@ -654,38 +653,19 @@ plane, are stored in struct <structname>v4l2_plane</structname> instead.
|
|||
In that case, struct <structname>v4l2_buffer</structname> contains an array of
|
||||
plane structures.</para>
|
||||
|
||||
<para>Nominally timestamps refer to the first data byte transmitted.
|
||||
In practice however the wide range of hardware covered by the V4L2 API
|
||||
limits timestamp accuracy. Often an interrupt routine will
|
||||
sample the system clock shortly after the field or frame was stored
|
||||
completely in memory. So applications must expect a constant
|
||||
difference up to one field or frame period plus a small (few scan
|
||||
lines) random error. The delay and error can be much
|
||||
larger due to compression or transmission over an external bus when
|
||||
the frames are not properly stamped by the sender. This is frequently
|
||||
the case with USB cameras. Here timestamps refer to the instant the
|
||||
field or frame was received by the driver, not the capture time. These
|
||||
devices identify by not enumerating any video standards, see <xref
|
||||
linkend="standard" />.</para>
|
||||
|
||||
<para>Similar limitations apply to output timestamps. Typically
|
||||
the video hardware locks to a clock controlling the video timing, the
|
||||
horizontal and vertical synchronization pulses. At some point in the
|
||||
line sequence, possibly the vertical blanking, an interrupt routine
|
||||
samples the system clock, compares against the timestamp and programs
|
||||
the hardware to repeat the previous field or frame, or to display the
|
||||
buffer contents.</para>
|
||||
|
||||
<para>Apart of limitations of the video device and natural
|
||||
inaccuracies of all clocks, it should be noted system time itself is
|
||||
not perfectly stable. It can be affected by power saving cycles,
|
||||
warped to insert leap seconds, or even turned back or forth by the
|
||||
system administrator affecting long term measurements. <footnote>
|
||||
<para>Since no other Linux multimedia
|
||||
API supports unadjusted time it would be foolish to introduce here. We
|
||||
must use a universally supported clock to synchronize different media,
|
||||
hence time of day.</para>
|
||||
</footnote></para>
|
||||
<para>Dequeued video buffers come with timestamps. The driver
|
||||
decides at which part of the frame and with which clock the
|
||||
timestamp is taken. Please see flags in the masks
|
||||
<constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant> and
|
||||
<constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant> in <xref
|
||||
linkend="buffer-flags" />. These flags are always valid and constant
|
||||
across all buffers during the whole video stream. Changes in these
|
||||
flags may take place as a side effect of &VIDIOC-S-INPUT; or
|
||||
&VIDIOC-S-OUTPUT; however. The
|
||||
<constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant> timestamp type
|
||||
which is used by e.g. on mem-to-mem devices is an exception to the
|
||||
rule: the timestamp source flags are copied from the OUTPUT video
|
||||
buffer to the CAPTURE video buffer.</para>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-buffer">
|
||||
<title>struct <structname>v4l2_buffer</structname></title>
|
||||
|
@ -696,10 +676,11 @@ hence time of day.</para>
|
|||
<entry>__u32</entry>
|
||||
<entry><structfield>index</structfield></entry>
|
||||
<entry></entry>
|
||||
<entry>Number of the buffer, set by the application. This
|
||||
field is only used for <link linkend="mmap">memory mapping</link> I/O
|
||||
and can range from zero to the number of buffers allocated
|
||||
with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; <structfield>count</structfield>) minus one.</entry>
|
||||
<entry>Number of the buffer, set by the application except
|
||||
when calling &VIDIOC-DQBUF;, then it is set by the driver.
|
||||
This field can range from zero to the number of buffers allocated
|
||||
with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; <structfield>count</structfield>),
|
||||
plus any buffers allocated with &VIDIOC-CREATE-BUFS; minus one.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -718,7 +699,7 @@ linkend="v4l2-buf-type" /></entry>
|
|||
buffer. It depends on the negotiated data format and may change with
|
||||
each buffer for compressed variable size data like JPEG images.
|
||||
Drivers must set this field when <structfield>type</structfield>
|
||||
refers to an input stream, applications when an output stream.</entry>
|
||||
refers to an input stream, applications when it refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -735,7 +716,7 @@ linkend="buffer-flags" />.</entry>
|
|||
buffer, see <xref linkend="v4l2-field" />. This field is not used when
|
||||
the buffer contains VBI data. Drivers must set it when
|
||||
<structfield>type</structfield> refers to an input stream,
|
||||
applications when an output stream.</entry>
|
||||
applications when it refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>struct timeval</entry>
|
||||
|
@ -745,15 +726,13 @@ applications when an output stream.</entry>
|
|||
byte was captured, as returned by the
|
||||
<function>clock_gettime()</function> function for the relevant
|
||||
clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in
|
||||
<xref linkend="buffer-flags" />. For output streams the data
|
||||
will not be displayed before this time, secondary to the nominal
|
||||
frame rate determined by the current video standard in enqueued
|
||||
order. Applications can for example zero this field to display
|
||||
frames as soon as possible. The driver stores the time at which
|
||||
the first data byte was actually sent out in the
|
||||
<structfield>timestamp</structfield> field. This permits
|
||||
<xref linkend="buffer-flags" />. For output streams the driver
|
||||
stores the time at which the last data byte was actually sent out
|
||||
in the <structfield>timestamp</structfield> field. This permits
|
||||
applications to monitor the drift between the video and system
|
||||
clock.</para></entry>
|
||||
clock. For output streams that use <constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant>
|
||||
the application has to fill in the timestamp which will be copied
|
||||
by the driver to the capture stream.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-timecode;</entry>
|
||||
|
@ -846,7 +825,8 @@ is the file descriptor associated with a DMABUF buffer.</entry>
|
|||
<entry><structfield>length</structfield></entry>
|
||||
<entry></entry>
|
||||
<entry>Size of the buffer (not the payload) in bytes for the
|
||||
single-planar API. For the multi-planar API the application sets
|
||||
single-planar API. This is set by the driver based on the calls to
|
||||
&VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;. For the multi-planar API the application sets
|
||||
this to the number of elements in the <structfield>planes</structfield>
|
||||
array. The driver will fill in the actual number of valid elements in
|
||||
that array.
|
||||
|
@ -880,13 +860,15 @@ should set this to 0.</entry>
|
|||
<entry><structfield>bytesused</structfield></entry>
|
||||
<entry></entry>
|
||||
<entry>The number of bytes occupied by data in the plane
|
||||
(its payload).</entry>
|
||||
(its payload). Drivers must set this field when <structfield>type</structfield>
|
||||
refers to an input stream, applications when it refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>length</structfield></entry>
|
||||
<entry></entry>
|
||||
<entry>Size in bytes of the plane (not its payload).</entry>
|
||||
<entry>Size in bytes of the plane (not its payload). This is set by the driver
|
||||
based on the calls to &VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>union</entry>
|
||||
|
@ -925,7 +907,9 @@ should set this to 0.</entry>
|
|||
<entry>__u32</entry>
|
||||
<entry><structfield>data_offset</structfield></entry>
|
||||
<entry></entry>
|
||||
<entry>Offset in bytes to video data in the plane, if applicable.
|
||||
<entry>Offset in bytes to video data in the plane.
|
||||
Drivers must set this field when <structfield>type</structfield>
|
||||
refers to an input stream, applications when it refers to an output stream.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -1005,6 +989,12 @@ should set this to 0.</entry>
|
|||
<entry>Buffer for video output overlay (OSD), see <xref
|
||||
linkend="osd" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant></entry>
|
||||
<entry>11</entry>
|
||||
<entry>Buffer for Software Defined Radio (SDR), see <xref
|
||||
linkend="sdr" />.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -1016,7 +1006,7 @@ should set this to 0.</entry>
|
|||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_MAPPED</constant></entry>
|
||||
<entry>0x0001</entry>
|
||||
<entry>0x00000001</entry>
|
||||
<entry>The buffer resides in device memory and has been mapped
|
||||
into the application's address space, see <xref linkend="mmap" /> for details.
|
||||
Drivers set or clear this flag when the
|
||||
|
@ -1026,7 +1016,7 @@ Drivers set or clear this flag when the
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_QUEUED</constant></entry>
|
||||
<entry>0x0002</entry>
|
||||
<entry>0x00000002</entry>
|
||||
<entry>Internally drivers maintain two buffer queues, an
|
||||
incoming and outgoing queue. When this flag is set, the buffer is
|
||||
currently on the incoming queue. It automatically moves to the
|
||||
|
@ -1039,7 +1029,7 @@ cleared.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_DONE</constant></entry>
|
||||
<entry>0x0004</entry>
|
||||
<entry>0x00000004</entry>
|
||||
<entry>When this flag is set, the buffer is currently on
|
||||
the outgoing queue, ready to be dequeued from the driver. Drivers set
|
||||
or clear this flag when the <constant>VIDIOC_QUERYBUF</constant> ioctl
|
||||
|
@ -1049,11 +1039,11 @@ buffer cannot be on both queues at the same time, the
|
|||
<constant>V4L2_BUF_FLAG_QUEUED</constant> and
|
||||
<constant>V4L2_BUF_FLAG_DONE</constant> flag are mutually exclusive.
|
||||
They can be both cleared however, then the buffer is in "dequeued"
|
||||
state, in the application domain to say so.</entry>
|
||||
state, in the application domain so to say.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_ERROR</constant></entry>
|
||||
<entry>0x0040</entry>
|
||||
<entry>0x00000040</entry>
|
||||
<entry>When this flag is set, the buffer has been dequeued
|
||||
successfully, although the data might have been corrupted.
|
||||
This is recoverable, streaming may continue as normal and
|
||||
|
@ -1063,35 +1053,43 @@ state, in the application domain to say so.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_KEYFRAME</constant></entry>
|
||||
<entry>0x0008</entry>
|
||||
<entry>0x00000008</entry>
|
||||
<entry>Drivers set or clear this flag when calling the
|
||||
<constant>VIDIOC_DQBUF</constant> ioctl. It may be set by video
|
||||
capture devices when the buffer contains a compressed image which is a
|
||||
key frame (or field), &ie; can be decompressed on its own.</entry>
|
||||
key frame (or field), &ie; can be decompressed on its own. Also know as
|
||||
an I-frame. Applications can set this bit when <structfield>type</structfield>
|
||||
refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_PFRAME</constant></entry>
|
||||
<entry>0x0010</entry>
|
||||
<entry>0x00000010</entry>
|
||||
<entry>Similar to <constant>V4L2_BUF_FLAG_KEYFRAME</constant>
|
||||
this flags predicted frames or fields which contain only differences to a
|
||||
previous key frame.</entry>
|
||||
previous key frame. Applications can set this bit when <structfield>type</structfield>
|
||||
refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_BFRAME</constant></entry>
|
||||
<entry>0x0020</entry>
|
||||
<entry>Similar to <constant>V4L2_BUF_FLAG_PFRAME</constant>
|
||||
this is a bidirectional predicted frame or field. [ooc tbd]</entry>
|
||||
<entry>0x00000020</entry>
|
||||
<entry>Similar to <constant>V4L2_BUF_FLAG_KEYFRAME</constant>
|
||||
this flags a bi-directional predicted frame or field which contains only
|
||||
the differences between the current frame and both the preceding and following
|
||||
key frames to specify its content. Applications can set this bit when
|
||||
<structfield>type</structfield> refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TIMECODE</constant></entry>
|
||||
<entry>0x0100</entry>
|
||||
<entry>0x00000100</entry>
|
||||
<entry>The <structfield>timecode</structfield> field is valid.
|
||||
Drivers set or clear this flag when the <constant>VIDIOC_DQBUF</constant>
|
||||
ioctl is called.</entry>
|
||||
ioctl is called. Applications can set this bit and the corresponding
|
||||
<structfield>timecode</structfield> structure when <structfield>type</structfield>
|
||||
refers to an output stream.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_PREPARED</constant></entry>
|
||||
<entry>0x0400</entry>
|
||||
<entry>0x00000400</entry>
|
||||
<entry>The buffer has been prepared for I/O and can be queued by the
|
||||
application. Drivers set or clear this flag when the
|
||||
<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link>, <link
|
||||
|
@ -1101,7 +1099,7 @@ application. Drivers set or clear this flag when the
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant></entry>
|
||||
<entry>0x0800</entry>
|
||||
<entry>0x00000800</entry>
|
||||
<entry>Caches do not have to be invalidated for this buffer.
|
||||
Typically applications shall use this flag if the data captured in the buffer
|
||||
is not going to be touched by the CPU, instead the buffer will, probably, be
|
||||
|
@ -1110,7 +1108,7 @@ passed on to a DMA-capable hardware unit for further processing or output.
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant></entry>
|
||||
<entry>0x1000</entry>
|
||||
<entry>0x00001000</entry>
|
||||
<entry>Caches do not have to be cleaned for this buffer.
|
||||
Typically applications shall use this flag for output buffers if the data
|
||||
in this buffer has not been created by the CPU but by some DMA-capable unit,
|
||||
|
@ -1118,7 +1116,7 @@ in which case caches have not been used.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant></entry>
|
||||
<entry>0xe000</entry>
|
||||
<entry>0x0000e000</entry>
|
||||
<entry>Mask for timestamp types below. To test the
|
||||
timestamp type, mask out bits not belonging to timestamp
|
||||
type by performing a logical and operation with buffer
|
||||
|
@ -1126,7 +1124,7 @@ in which case caches have not been used.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN</constant></entry>
|
||||
<entry>0x0000</entry>
|
||||
<entry>0x00000000</entry>
|
||||
<entry>Unknown timestamp type. This type is used by
|
||||
drivers before Linux 3.9 and may be either monotonic (see
|
||||
below) or realtime (wall clock). Monotonic clock has been
|
||||
|
@ -1139,7 +1137,7 @@ in which case caches have not been used.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC</constant></entry>
|
||||
<entry>0x2000</entry>
|
||||
<entry>0x00002000</entry>
|
||||
<entry>The buffer timestamp has been taken from the
|
||||
<constant>CLOCK_MONOTONIC</constant> clock. To access the
|
||||
same clock outside V4L2, use
|
||||
|
@ -1147,10 +1145,42 @@ in which case caches have not been used.</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant></entry>
|
||||
<entry>0x4000</entry>
|
||||
<entry>0x00004000</entry>
|
||||
<entry>The CAPTURE buffer timestamp has been taken from the
|
||||
corresponding OUTPUT buffer. This flag applies only to mem2mem devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant></entry>
|
||||
<entry>0x00070000</entry>
|
||||
<entry>Mask for timestamp sources below. The timestamp source
|
||||
defines the point of time the timestamp is taken in relation to
|
||||
the frame. Logical 'and' operation between the
|
||||
<structfield>flags</structfield> field and
|
||||
<constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant> produces the
|
||||
value of the timestamp source. Applications must set the timestamp
|
||||
source when <structfield>type</structfield> refers to an output stream
|
||||
and <constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant> is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_EOF</constant></entry>
|
||||
<entry>0x00000000</entry>
|
||||
<entry>End Of Frame. The buffer timestamp has been taken
|
||||
when the last pixel of the frame has been received or the
|
||||
last pixel of the frame has been transmitted. In practice,
|
||||
software generated timestamps will typically be read from
|
||||
the clock a small amount of time after the last pixel has
|
||||
been received or transmitten, depending on the system and
|
||||
other activity in it.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_SOE</constant></entry>
|
||||
<entry>0x00010000</entry>
|
||||
<entry>Start Of Exposure. The buffer timestamp has been
|
||||
taken when the exposure of the frame has begun. This is
|
||||
only valid for the
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> buffer
|
||||
type.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -1440,10 +1470,9 @@ or application, depending on data direction, must set &v4l2-buffer;
|
|||
<constant>V4L2_FIELD_BOTTOM</constant>. Any two successive fields pair
|
||||
to build a frame. If fields are successive, without any dropped fields
|
||||
between them (fields can drop individually), can be determined from
|
||||
the &v4l2-buffer; <structfield>sequence</structfield> field. Image
|
||||
sizes refer to the frame, not fields. This format cannot be selected
|
||||
when using the read/write I/O method.<!-- Where it's indistinguishable
|
||||
from V4L2_FIELD_SEQ_*. --></entry>
|
||||
the &v4l2-buffer; <structfield>sequence</structfield> field. This format
|
||||
cannot be selected when using the read/write I/O method since there
|
||||
is no way to communicate if a field was a top or bottom field.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FIELD_INTERLACED_TB</constant></entry>
|
||||
|
|
|
@ -12,18 +12,17 @@
|
|||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format.
|
||||
<para>This is a multi-planar, two-plane version of the YUV 4:2:2 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.
|
||||
plane does not necessarily immediately follow 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,
|
||||
Each CbCr pair belongs to two 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>.
|
||||
Y'<subscript>00</subscript>, Y'<subscript>01</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>
|
||||
|
||||
|
|
|
@ -121,14 +121,14 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry><constant>V4L2_PIX_FMT_RGB332</constant></entry>
|
||||
<entry>'RGB1'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-RGB444">
|
||||
<entry><constant>V4L2_PIX_FMT_RGB444</constant></entry>
|
||||
|
@ -159,18 +159,18 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a</entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a</entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
</row>
|
||||
|
@ -181,17 +181,17 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
|
@ -201,32 +201,32 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry>'RGBQ'</entry>
|
||||
<entry></entry>
|
||||
<entry>a</entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-RGB565X">
|
||||
<entry><constant>V4L2_PIX_FMT_RGB565X</constant></entry>
|
||||
<entry>'RGBR'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-RGB565X">
|
||||
<entry><constant>V4L2_PIX_FMT_RGB565X</constant></entry>
|
||||
<entry>'RGBR'</entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
|
@ -234,11 +234,11 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-BGR666">
|
||||
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
|
||||
|
@ -385,6 +385,15 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry><constant>V4L2_PIX_FMT_RGB32</constant></entry>
|
||||
<entry>'RGB4'</entry>
|
||||
<entry></entry>
|
||||
<entry>a<subscript>7</subscript></entry>
|
||||
<entry>a<subscript>6</subscript></entry>
|
||||
<entry>a<subscript>5</subscript></entry>
|
||||
<entry>a<subscript>4</subscript></entry>
|
||||
<entry>a<subscript>3</subscript></entry>
|
||||
<entry>a<subscript>2</subscript></entry>
|
||||
<entry>a<subscript>1</subscript></entry>
|
||||
<entry>a<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>7</subscript></entry>
|
||||
<entry>r<subscript>6</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
|
@ -411,25 +420,16 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a<subscript>7</subscript></entry>
|
||||
<entry>a<subscript>6</subscript></entry>
|
||||
<entry>a<subscript>5</subscript></entry>
|
||||
<entry>a<subscript>4</subscript></entry>
|
||||
<entry>a<subscript>3</subscript></entry>
|
||||
<entry>a<subscript>2</subscript></entry>
|
||||
<entry>a<subscript>1</subscript></entry>
|
||||
<entry>a<subscript>0</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Bit 7 is the most significant bit. The value of a = alpha
|
||||
<para>Bit 7 is the most significant bit. The value of the a = alpha
|
||||
bits is undefined when reading from the driver, ignored when writing
|
||||
to the driver, except when alpha blending has been negotiated for a
|
||||
<link linkend="overlay">Video Overlay</link> or <link linkend="osd">
|
||||
Video Output Overlay</link> or when alpha component has been configured
|
||||
Video Output Overlay</link> or when the alpha component has been configured
|
||||
for a <link linkend="capture">Video Capture</link> by means of <link
|
||||
linkend="v4l2-alpha-component"> <constant>V4L2_CID_ALPHA_COMPONENT
|
||||
</constant> </link> control.</para>
|
||||
|
@ -512,421 +512,6 @@ image</title>
|
|||
</formalpara>
|
||||
</example>
|
||||
|
||||
<important>
|
||||
<para>Drivers may interpret these formats differently.</para>
|
||||
</important>
|
||||
|
||||
<para>Some RGB formats above are uncommon and were probably
|
||||
defined in error. Drivers may interpret them as in <xref
|
||||
linkend="rgb-formats-corrected" />.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="rgb-formats-corrected">
|
||||
<title>Packed RGB Image Formats (corrected)</title>
|
||||
<tgroup cols="37" align="center">
|
||||
<colspec colname="id" align="left" />
|
||||
<colspec colname="fourcc" />
|
||||
<colspec colname="bit" />
|
||||
|
||||
<colspec colnum="4" colname="b07" align="center" />
|
||||
<colspec colnum="5" colname="b06" align="center" />
|
||||
<colspec colnum="6" colname="b05" align="center" />
|
||||
<colspec colnum="7" colname="b04" align="center" />
|
||||
<colspec colnum="8" colname="b03" align="center" />
|
||||
<colspec colnum="9" colname="b02" align="center" />
|
||||
<colspec colnum="10" colname="b01" align="center" />
|
||||
<colspec colnum="11" colname="b00" align="center" />
|
||||
|
||||
<colspec colnum="13" colname="b17" align="center" />
|
||||
<colspec colnum="14" colname="b16" align="center" />
|
||||
<colspec colnum="15" colname="b15" align="center" />
|
||||
<colspec colnum="16" colname="b14" align="center" />
|
||||
<colspec colnum="17" colname="b13" align="center" />
|
||||
<colspec colnum="18" colname="b12" align="center" />
|
||||
<colspec colnum="19" colname="b11" align="center" />
|
||||
<colspec colnum="20" colname="b10" align="center" />
|
||||
|
||||
<colspec colnum="22" colname="b27" align="center" />
|
||||
<colspec colnum="23" colname="b26" align="center" />
|
||||
<colspec colnum="24" colname="b25" align="center" />
|
||||
<colspec colnum="25" colname="b24" align="center" />
|
||||
<colspec colnum="26" colname="b23" align="center" />
|
||||
<colspec colnum="27" colname="b22" align="center" />
|
||||
<colspec colnum="28" colname="b21" align="center" />
|
||||
<colspec colnum="29" colname="b20" align="center" />
|
||||
|
||||
<colspec colnum="31" colname="b37" align="center" />
|
||||
<colspec colnum="32" colname="b36" align="center" />
|
||||
<colspec colnum="33" colname="b35" align="center" />
|
||||
<colspec colnum="34" colname="b34" align="center" />
|
||||
<colspec colnum="35" colname="b33" align="center" />
|
||||
<colspec colnum="36" colname="b32" align="center" />
|
||||
<colspec colnum="37" colname="b31" align="center" />
|
||||
<colspec colnum="38" colname="b30" align="center" />
|
||||
|
||||
<spanspec namest="b07" nameend="b00" spanname="b0" />
|
||||
<spanspec namest="b17" nameend="b10" spanname="b1" />
|
||||
<spanspec namest="b27" nameend="b20" spanname="b2" />
|
||||
<spanspec namest="b37" nameend="b30" spanname="b3" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Identifier</entry>
|
||||
<entry>Code</entry>
|
||||
<entry> </entry>
|
||||
<entry spanname="b0">Byte 0 in memory</entry>
|
||||
<entry spanname="b1">Byte 1</entry>
|
||||
<entry spanname="b2">Byte 2</entry>
|
||||
<entry spanname="b3">Byte 3</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry> </entry>
|
||||
<entry>Bit</entry>
|
||||
<entry>7</entry>
|
||||
<entry>6</entry>
|
||||
<entry>5</entry>
|
||||
<entry>4</entry>
|
||||
<entry>3</entry>
|
||||
<entry>2</entry>
|
||||
<entry>1</entry>
|
||||
<entry>0</entry>
|
||||
<entry> </entry>
|
||||
<entry>7</entry>
|
||||
<entry>6</entry>
|
||||
<entry>5</entry>
|
||||
<entry>4</entry>
|
||||
<entry>3</entry>
|
||||
<entry>2</entry>
|
||||
<entry>1</entry>
|
||||
<entry>0</entry>
|
||||
<entry> </entry>
|
||||
<entry>7</entry>
|
||||
<entry>6</entry>
|
||||
<entry>5</entry>
|
||||
<entry>4</entry>
|
||||
<entry>3</entry>
|
||||
<entry>2</entry>
|
||||
<entry>1</entry>
|
||||
<entry>0</entry>
|
||||
<entry> </entry>
|
||||
<entry>7</entry>
|
||||
<entry>6</entry>
|
||||
<entry>5</entry>
|
||||
<entry>4</entry>
|
||||
<entry>3</entry>
|
||||
<entry>2</entry>
|
||||
<entry>1</entry>
|
||||
<entry>0</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB332" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB332</constant></entry>
|
||||
<entry>'RGB1'</entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB444" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB444</constant></entry>
|
||||
<entry>'R444'</entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a<subscript>3</subscript></entry>
|
||||
<entry>a<subscript>2</subscript></entry>
|
||||
<entry>a<subscript>1</subscript></entry>
|
||||
<entry>a<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB555" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB555</constant></entry>
|
||||
<entry>'RGBO'</entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a</entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB565" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB565</constant></entry>
|
||||
<entry>'RGBP'</entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB555X" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB555X</constant></entry>
|
||||
<entry>'RGBQ'</entry>
|
||||
<entry></entry>
|
||||
<entry>a</entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB565X" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB565X</constant></entry>
|
||||
<entry>'RGBR'</entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-BGR666" -->
|
||||
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
|
||||
<entry>'BGRH'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-BGR24" -->
|
||||
<entry><constant>V4L2_PIX_FMT_BGR24</constant></entry>
|
||||
<entry>'BGR3'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>7</subscript></entry>
|
||||
<entry>b<subscript>6</subscript></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>7</subscript></entry>
|
||||
<entry>g<subscript>6</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>7</subscript></entry>
|
||||
<entry>r<subscript>6</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB24" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB24</constant></entry>
|
||||
<entry>'RGB3'</entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>7</subscript></entry>
|
||||
<entry>r<subscript>6</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>7</subscript></entry>
|
||||
<entry>g<subscript>6</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>7</subscript></entry>
|
||||
<entry>b<subscript>6</subscript></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-BGR32" -->
|
||||
<entry><constant>V4L2_PIX_FMT_BGR32</constant></entry>
|
||||
<entry>'BGR4'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>7</subscript></entry>
|
||||
<entry>b<subscript>6</subscript></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>7</subscript></entry>
|
||||
<entry>g<subscript>6</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>7</subscript></entry>
|
||||
<entry>r<subscript>6</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>a<subscript>7</subscript></entry>
|
||||
<entry>a<subscript>6</subscript></entry>
|
||||
<entry>a<subscript>5</subscript></entry>
|
||||
<entry>a<subscript>4</subscript></entry>
|
||||
<entry>a<subscript>3</subscript></entry>
|
||||
<entry>a<subscript>2</subscript></entry>
|
||||
<entry>a<subscript>1</subscript></entry>
|
||||
<entry>a<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-RGB32" -->
|
||||
<entry><constant>V4L2_PIX_FMT_RGB32</constant></entry>
|
||||
<entry>'RGB4'</entry>
|
||||
<entry></entry>
|
||||
<entry>a<subscript>7</subscript></entry>
|
||||
<entry>a<subscript>6</subscript></entry>
|
||||
<entry>a<subscript>5</subscript></entry>
|
||||
<entry>a<subscript>4</subscript></entry>
|
||||
<entry>a<subscript>3</subscript></entry>
|
||||
<entry>a<subscript>2</subscript></entry>
|
||||
<entry>a<subscript>1</subscript></entry>
|
||||
<entry>a<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>7</subscript></entry>
|
||||
<entry>r<subscript>6</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>7</subscript></entry>
|
||||
<entry>g<subscript>6</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>7</subscript></entry>
|
||||
<entry>b<subscript>6</subscript></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>A test utility to determine which RGB formats a driver
|
||||
actually supports is available from the LinuxTV v4l-dvb repository.
|
||||
See &v4l-dvb; for access instructions.</para>
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<refentry id="V4L2-SDR-FMT-CU08">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_SDR_FMT_CU8 ('CU08')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>
|
||||
<constant>V4L2_SDR_FMT_CU8</constant>
|
||||
</refname>
|
||||
<refpurpose>Complex unsigned 8-bit IQ sample</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>
|
||||
This format contains sequence of complex number samples. Each complex number
|
||||
consist two parts, called In-phase and Quadrature (IQ). Both I and Q are
|
||||
represented as a 8 bit unsigned number. I value comes first and Q value after
|
||||
that.
|
||||
</para>
|
||||
<example>
|
||||
<title><constant>V4L2_SDR_FMT_CU8</constant> 1 sample</title>
|
||||
<formalpara>
|
||||
<title>Byte Order.</title>
|
||||
<para>Each cell is one byte.
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="2" align="center">
|
||||
<colspec align="left" colwidth="2*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>start + 0:</entry>
|
||||
<entry>I'<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start + 1:</entry>
|
||||
<entry>Q'<subscript>0</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</formalpara>
|
||||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -0,0 +1,46 @@
|
|||
<refentry id="V4L2-SDR-FMT-CU16LE">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_SDR_FMT_CU16LE ('CU16')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname>
|
||||
<constant>V4L2_SDR_FMT_CU16LE</constant>
|
||||
</refname>
|
||||
<refpurpose>Complex unsigned 16-bit little endian IQ sample</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>
|
||||
This format contains sequence of complex number samples. Each complex number
|
||||
consist two parts, called In-phase and Quadrature (IQ). Both I and Q are
|
||||
represented as a 16 bit unsigned little endian number. I value comes first
|
||||
and Q value after that.
|
||||
</para>
|
||||
<example>
|
||||
<title><constant>V4L2_SDR_FMT_CU16LE</constant> 1 sample</title>
|
||||
<formalpara>
|
||||
<title>Byte Order.</title>
|
||||
<para>Each cell is one byte.
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="3" align="center">
|
||||
<colspec align="left" colwidth="2*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>start + 0:</entry>
|
||||
<entry>I'<subscript>0[7:0]</subscript></entry>
|
||||
<entry>I'<subscript>0[15:8]</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start + 2:</entry>
|
||||
<entry>Q'<subscript>0[7:0]</subscript></entry>
|
||||
<entry>Q'<subscript>0[15:8]</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</formalpara>
|
||||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -25,7 +25,12 @@ capturing and output, for overlay frame buffer formats see also
|
|||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>height</structfield></entry>
|
||||
<entry>Image height in pixels.</entry>
|
||||
<entry>Image height in pixels. If <structfield>field</structfield> is
|
||||
one of <constant>V4L2_FIELD_TOP</constant>, <constant>V4L2_FIELD_BOTTOM</constant>
|
||||
or <constant>V4L2_FIELD_ALTERNATE</constant> then height refers to the
|
||||
number of lines in the field, otherwise it refers to the number of
|
||||
lines in the frame (which is twice the field height for interlaced
|
||||
formats).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="hspan">Applications set these fields to
|
||||
|
@ -54,7 +59,7 @@ linkend="reserved-formats" /></entry>
|
|||
can request to capture or output only the top or bottom field, or both
|
||||
fields interlaced or sequentially stored in one buffer or alternating
|
||||
in separate buffers. Drivers return the actual field order selected.
|
||||
For details see <xref linkend="field-order" />.</entry>
|
||||
For more details on fields see <xref linkend="field-order" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -81,7 +86,10 @@ plane and is divided by the same factor as the
|
|||
example the Cb and Cr planes of a YUV 4:2:0 image have half as many
|
||||
padding bytes following each line as the Y plane. To avoid ambiguities
|
||||
drivers must return a <structfield>bytesperline</structfield> value
|
||||
rounded up to a multiple of the scale factor.</para></entry>
|
||||
rounded up to a multiple of the scale factor.</para>
|
||||
<para>For compressed formats the <structfield>bytesperline</structfield>
|
||||
value makes no sense. Applications and drivers must set this to 0 in
|
||||
that case.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -97,7 +105,8 @@ hold an image.</entry>
|
|||
<entry>&v4l2-colorspace;</entry>
|
||||
<entry><structfield>colorspace</structfield></entry>
|
||||
<entry>This information supplements the
|
||||
<structfield>pixelformat</structfield> and must be set by the driver,
|
||||
<structfield>pixelformat</structfield> and must be set by the driver for
|
||||
capture streams and by the application for output streams,
|
||||
see <xref linkend="colorspaces" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -135,7 +144,7 @@ set this field to zero.</entry>
|
|||
<entry>__u16</entry>
|
||||
<entry><structfield>bytesperline</structfield></entry>
|
||||
<entry>Distance in bytes between the leftmost pixels in two adjacent
|
||||
lines.</entry>
|
||||
lines. See &v4l2-pix-format;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u16</entry>
|
||||
|
@ -154,12 +163,12 @@ set this field to zero.</entry>
|
|||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>width</structfield></entry>
|
||||
<entry>Image width in pixels.</entry>
|
||||
<entry>Image width in pixels. See &v4l2-pix-format;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>height</structfield></entry>
|
||||
<entry>Image height in pixels.</entry>
|
||||
<entry>Image height in pixels. See &v4l2-pix-format;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -811,6 +820,17 @@ extended control <constant>V4L2_CID_MPEG_STREAM_TYPE</constant>, see
|
|||
</table>
|
||||
</section>
|
||||
|
||||
<section id="sdr-formats">
|
||||
<title>SDR Formats</title>
|
||||
|
||||
<para>These formats are used for <link linkend="sdr">SDR Capture</link>
|
||||
interface only.</para>
|
||||
|
||||
&sub-sdr-cu08;
|
||||
&sub-sdr-cu16le;
|
||||
|
||||
</section>
|
||||
|
||||
<section id="pixfmt-reserved">
|
||||
<title>Reserved Format Identifiers</title>
|
||||
|
||||
|
|
|
@ -1,10 +1,152 @@
|
|||
<partinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Mauro</firstname>
|
||||
<surname>Chehab</surname>
|
||||
<othername role="mi">Carvalho</othername>
|
||||
<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation>
|
||||
<contrib>Initial version.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<copyright>
|
||||
<year>2009-2014</year>
|
||||
<holder>Mauro Carvalho Chehab</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<!-- Put document revisions here, newest first. -->
|
||||
<revision>
|
||||
<revnumber>3.15</revnumber>
|
||||
<date>2014-02-06</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>Added the interface description and the RC sysfs class description.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.0</revnumber>
|
||||
<date>2009-09-06</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>Initial revision</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</partinfo>
|
||||
|
||||
<title>Remote Controller API</title>
|
||||
<chapter id="remote_controllers">
|
||||
|
||||
<title>Remote Controllers</title>
|
||||
|
||||
<section id="Remote_controllers_Intro">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>Currently, most analog and digital devices have a Infrared input for remote controllers. Each
|
||||
manufacturer has their own type of control. It is not rare for the same manufacturer to ship different
|
||||
types of controls, depending on the device.</para>
|
||||
<para>A Remote Controller interface is mapped as a normal evdev/input interface, just like a keyboard or a mouse.
|
||||
So, it uses all ioctls already defined for any other input devices.</para>
|
||||
<para>However, remove controllers are more flexible than a normal input device, as the IR
|
||||
receiver (and/or transmitter) can be used in conjunction with a wide variety of different IR remotes.</para>
|
||||
<para>In order to allow flexibility, the Remote Controller subsystem allows controlling the
|
||||
RC-specific attributes via <link linkend="remote_controllers_sysfs_nodes">the sysfs class nodes</link>.</para>
|
||||
</section>
|
||||
|
||||
<section id="remote_controllers_sysfs_nodes">
|
||||
<title>Remote Controller's sysfs nodes</title>
|
||||
<para>As defined at <constant>Documentation/ABI/testing/sysfs-class-rc</constant>, those are the sysfs nodes that control the Remote Controllers:</para>
|
||||
|
||||
<section id="sys_class_rc">
|
||||
<title>/sys/class/rc/</title>
|
||||
<para>The <constant>/sys/class/rc/</constant> class sub-directory belongs to the Remote Controller
|
||||
core and provides a sysfs interface for configuring infrared remote controller receivers.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN">
|
||||
<title>/sys/class/rc/rcN/</title>
|
||||
<para>A <constant>/sys/class/rc/rcN</constant> directory is created for each remote
|
||||
control receiver device where N is the number of the receiver.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_protocols">
|
||||
<title>/sys/class/rc/rcN/protocols</title>
|
||||
<para>Reading this file returns a list of available protocols, something like:</para>
|
||||
<para><constant>rc5 [rc6] nec jvc [sony]</constant></para>
|
||||
<para>Enabled protocols are shown in [] brackets.</para>
|
||||
<para>Writing "+proto" will add a protocol to the list of enabled protocols.</para>
|
||||
<para>Writing "-proto" will remove a protocol from the list of enabled protocols.</para>
|
||||
<para>Writing "proto" will enable only "proto".</para>
|
||||
<para>Writing "none" will disable all protocols.</para>
|
||||
<para>Write fails with EINVAL if an invalid protocol combination or unknown protocol name is used.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_filter">
|
||||
<title>/sys/class/rc/rcN/filter</title>
|
||||
<para>Sets the scancode filter expected value.</para>
|
||||
<para>Use in combination with <constant>/sys/class/rc/rcN/filter_mask</constant> to set the
|
||||
expected value of the bits set in the filter mask.
|
||||
If the hardware supports it then scancodes which do not match
|
||||
the filter will be ignored. Otherwise the write will fail with
|
||||
an error.</para>
|
||||
<para>This value may be reset to 0 if the current protocol is altered.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_filter_mask">
|
||||
<title>/sys/class/rc/rcN/filter_mask</title>
|
||||
<para>Sets the scancode filter mask of bits to compare.
|
||||
Use in combination with <constant>/sys/class/rc/rcN/filter</constant> to set the bits
|
||||
of the scancode which should be compared against the expected
|
||||
value. A value of 0 disables the filter to allow all valid
|
||||
scancodes to be processed.</para>
|
||||
<para>If the hardware supports it then scancodes which do not match
|
||||
the filter will be ignored. Otherwise the write will fail with
|
||||
an error.</para>
|
||||
<para>This value may be reset to 0 if the current protocol is altered.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_wakeup_protocols">
|
||||
<title>/sys/class/rc/rcN/wakeup_protocols</title>
|
||||
<para>Reading this file returns a list of available protocols to use for the
|
||||
wakeup filter, something like:</para>
|
||||
<para><constant>rc5 rc6 nec jvc [sony]</constant></para>
|
||||
<para>The enabled wakeup protocol is shown in [] brackets.</para>
|
||||
<para>Writing "+proto" will add a protocol to the list of enabled wakeup
|
||||
protocols.</para>
|
||||
<para>Writing "-proto" will remove a protocol from the list of enabled wakeup
|
||||
protocols.</para>
|
||||
<para>Writing "proto" will use "proto" for wakeup events.</para>
|
||||
<para>Writing "none" will disable wakeup.</para>
|
||||
<para>Write fails with EINVAL if an invalid protocol combination or unknown
|
||||
protocol name is used, or if wakeup is not supported by the hardware.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_wakeup_filter">
|
||||
<title>/sys/class/rc/rcN/wakeup_filter</title>
|
||||
<para>Sets the scancode wakeup filter expected value.
|
||||
Use in combination with <constant>/sys/class/rc/rcN/wakeup_filter_mask</constant> to
|
||||
set the expected value of the bits set in the wakeup filter mask
|
||||
to trigger a system wake event.</para>
|
||||
<para>If the hardware supports it and wakeup_filter_mask is not 0 then
|
||||
scancodes which match the filter will wake the system from e.g.
|
||||
suspend to RAM or power off.
|
||||
Otherwise the write will fail with an error.</para>
|
||||
<para>This value may be reset to 0 if the wakeup protocol is altered.</para>
|
||||
|
||||
</section>
|
||||
<section id="sys_class_rc_rcN_wakeup_filter_mask">
|
||||
<title>/sys/class/rc/rcN/wakeup_filter_mask</title>
|
||||
<para>Sets the scancode wakeup filter mask of bits to compare.
|
||||
Use in combination with <constant>/sys/class/rc/rcN/wakeup_filter</constant> to set
|
||||
the bits of the scancode which should be compared against the
|
||||
expected value to trigger a system wake event.</para>
|
||||
<para>If the hardware supports it and wakeup_filter_mask is not 0 then
|
||||
scancodes which match the filter will wake the system from e.g.
|
||||
suspend to RAM or power off.
|
||||
Otherwise the write will fail with an error.</para>
|
||||
<para>This value may be reset to 0 if the wakeup protocol is altered.</para>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section id="Remote_controllers_tables">
|
||||
<title>Remote controller tables</title>
|
||||
<para>Unfortunately, for several years, there was no effort to create uniform IR keycodes for
|
||||
different devices. This caused the same IR keyname to be mapped completely differently on
|
||||
different IR devices. This resulted that the same IR keyname to be mapped completely different on
|
||||
|
@ -175,3 +317,4 @@ keymapping.</para>
|
|||
</section>
|
||||
|
||||
&sub-lirc_device_interface;
|
||||
</chapter>
|
||||
|
|
|
@ -70,7 +70,7 @@ MPEG stream embedded, sliced VBI data format in this specification.
|
|||
Remote Controller chapter.</contrib>
|
||||
<affiliation>
|
||||
<address>
|
||||
<email>mchehab@redhat.com</email>
|
||||
<email>m.chehab@samsung.com</email>
|
||||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
|
@ -107,6 +107,16 @@ Remote Controller chapter.</contrib>
|
|||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Antti</firstname>
|
||||
<surname>Palosaari</surname>
|
||||
<contrib>SDR API.</contrib>
|
||||
<affiliation>
|
||||
<address>
|
||||
<email>crope@iki.fi</email>
|
||||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<copyright>
|
||||
|
@ -125,6 +135,7 @@ Remote Controller chapter.</contrib>
|
|||
<year>2011</year>
|
||||
<year>2012</year>
|
||||
<year>2013</year>
|
||||
<year>2014</year>
|
||||
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
|
||||
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
|
||||
Pawel Osciak</holder>
|
||||
|
@ -140,6 +151,16 @@ 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.15</revnumber>
|
||||
<date>2014-02-03</date>
|
||||
<authorinitials>hv, ap</authorinitials>
|
||||
<revremark>Update several sections of "Common API Elements": "Opening and Closing Devices"
|
||||
"Querying Capabilities", "Application Priority", "Video Inputs and Outputs", "Audio Inputs and Outputs"
|
||||
"Tuners and Modulators", "Video Standards" and "Digital Video (DV) Timings". Added SDR API.
|
||||
</revremark>
|
||||
</revision>
|
||||
|
||||
<revision>
|
||||
<revnumber>3.14</revnumber>
|
||||
<date>2013-11-25</date>
|
||||
|
@ -537,6 +558,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||
<section id="ttx"> &sub-dev-teletext; </section>
|
||||
<section id="radio"> &sub-dev-radio; </section>
|
||||
<section id="rds"> &sub-dev-rds; </section>
|
||||
<section id="sdr"> &sub-dev-sdr; </section>
|
||||
<section id="event"> &sub-dev-event; </section>
|
||||
<section id="subdev"> &sub-dev-subdev; </section>
|
||||
</chapter>
|
||||
|
@ -585,6 +607,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||
&sub-g-crop;
|
||||
&sub-g-ctrl;
|
||||
&sub-g-dv-timings;
|
||||
&sub-g-edid;
|
||||
&sub-g-enc-index;
|
||||
&sub-g-ext-ctrls;
|
||||
&sub-g-fbuf;
|
||||
|
@ -616,7 +639,6 @@ and discussions on the V4L mailing list.</revremark>
|
|||
&sub-subdev-enum-frame-size;
|
||||
&sub-subdev-enum-mbus-code;
|
||||
&sub-subdev-g-crop;
|
||||
&sub-subdev-g-edid;
|
||||
&sub-subdev-g-fmt;
|
||||
&sub-subdev-g-frame-interval;
|
||||
&sub-subdev-g-selection;
|
||||
|
|
|
@ -100,7 +100,7 @@ See <xref linkend="v4l2-tuner-type" /></entry>
|
|||
<entry><structfield>capability</structfield></entry>
|
||||
<entry spanname="hspan">The tuner/modulator capability flags for
|
||||
this frequency band, see <xref linkend="tuner-capability" />. The <constant>V4L2_TUNER_CAP_LOW</constant>
|
||||
capability must be the same for all frequency bands of the selected tuner/modulator.
|
||||
or <constant>V4L2_TUNER_CAP_1HZ</constant> capability must be the same for all frequency bands of the selected tuner/modulator.
|
||||
So either all bands have that capability set, or none of them have that capability.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -109,7 +109,8 @@ So either all bands have that capability set, or none of them have that capabili
|
|||
<entry spanname="hspan">The lowest tunable frequency in
|
||||
units of 62.5 kHz, or if the <structfield>capability</structfield>
|
||||
flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz, for this frequency band.</entry>
|
||||
Hz, for this frequency band. A 1 Hz unit is used when the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -117,7 +118,8 @@ Hz, for this frequency band.</entry>
|
|||
<entry spanname="hspan">The highest tunable frequency in
|
||||
units of 62.5 kHz, or if the <structfield>capability</structfield>
|
||||
flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz, for this frequency band.</entry>
|
||||
Hz, for this frequency band. A 1 Hz unit is used when the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<refentry id="vidioc-subdev-g-edid">
|
||||
<refentry id="vidioc-g-edid">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID</refentrytitle>
|
||||
<refentrytitle>ioctl VIDIOC_G_EDID, VIDIOC_S_EDID</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>VIDIOC_SUBDEV_G_EDID</refname>
|
||||
<refname>VIDIOC_SUBDEV_S_EDID</refname>
|
||||
<refname>VIDIOC_G_EDID</refname>
|
||||
<refname>VIDIOC_S_EDID</refname>
|
||||
<refpurpose>Get or set the EDID of a video receiver/transmitter</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
|||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct v4l2_subdev_edid *<parameter>argp</parameter></paramdef>
|
||||
<paramdef>struct v4l2_edid *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<funcsynopsis>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>const struct v4l2_subdev_edid *<parameter>argp</parameter></paramdef>
|
||||
<paramdef>const struct v4l2_edid *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
@ -42,7 +42,7 @@
|
|||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID</para>
|
||||
<para>VIDIOC_G_EDID, VIDIOC_S_EDID</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
|
@ -56,12 +56,20 @@
|
|||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>These ioctls can be used to get or set an EDID associated with an input pad
|
||||
from a receiver or an output pad of a transmitter subdevice.</para>
|
||||
<para>These ioctls can be used to get or set an EDID associated with an input
|
||||
from a receiver or an output of a transmitter device. They can be
|
||||
used with subdevice nodes (/dev/v4l-subdevX) or with video nodes (/dev/videoX).</para>
|
||||
|
||||
<para>When used with video nodes the <structfield>pad</structfield> field represents the
|
||||
input (for video capture devices) or output (for video output devices) index as
|
||||
is returned by &VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively. When used
|
||||
with subdevice nodes the <structfield>pad</structfield> field represents the
|
||||
input or output pad of the subdevice. If there is no EDID support for the given
|
||||
<structfield>pad</structfield> value, then the &EINVAL; will be returned.</para>
|
||||
|
||||
<para>To get the EDID data the application has to fill in the <structfield>pad</structfield>,
|
||||
<structfield>start_block</structfield>, <structfield>blocks</structfield> and <structfield>edid</structfield>
|
||||
fields and call <constant>VIDIOC_SUBDEV_G_EDID</constant>. The current EDID from block
|
||||
fields and call <constant>VIDIOC_G_EDID</constant>. The current EDID from block
|
||||
<structfield>start_block</structfield> and of size <structfield>blocks</structfield>
|
||||
will be placed in the memory <structfield>edid</structfield> points to. The <structfield>edid</structfield>
|
||||
pointer must point to memory at least <structfield>blocks</structfield> * 128 bytes
|
||||
|
@ -91,15 +99,17 @@
|
|||
data in some way. In any case, the end result is the same: the EDID is no longer available.
|
||||
</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-subdev-edid">
|
||||
<title>struct <structname>v4l2_subdev_edid</structname></title>
|
||||
<table pgwide="1" frame="none" id="v4l2-edid">
|
||||
<title>struct <structname>v4l2_edid</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>pad</structfield></entry>
|
||||
<entry>Pad for which to get/set the EDID blocks.</entry>
|
||||
<entry>Pad for which to get/set the EDID blocks. When used with a video device
|
||||
node the pad represents the input or output index as returned by
|
||||
&VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
|
@ -327,7 +327,12 @@ These controls are described in <xref
|
|||
These controls are described in <xref
|
||||
linkend="fm-rx-controls" />.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>V4L2_CTRL_CLASS_RF_TUNER</constant></entry>
|
||||
<entry>0xa20000</entry>
|
||||
<entry>The class containing RF tuner controls.
|
||||
These controls are described in <xref linkend="rf-tuner-controls" />.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
|
|
@ -169,6 +169,13 @@ capture and output devices.</entry>
|
|||
<entry>Sliced VBI capture or output parameters. See
|
||||
<xref linkend="sliced" /> for details. Used by sliced VBI
|
||||
capture and output devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>&v4l2-sdr-format;</entry>
|
||||
<entry><structfield>sdr</structfield></entry>
|
||||
<entry>Definition of a data format, see
|
||||
<xref linkend="pixfmt" />, used by SDR capture devices.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
|
|
|
@ -109,9 +109,10 @@ See <xref linkend="v4l2-tuner-type" /></entry>
|
|||
<entry>__u32</entry>
|
||||
<entry><structfield>frequency</structfield></entry>
|
||||
<entry>Tuning frequency in units of 62.5 kHz, or if the
|
||||
&v4l2-tuner; or &v4l2-modulator; <structfield>capabilities</structfield> flag
|
||||
&v4l2-tuner; or &v4l2-modulator; <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz.</entry>
|
||||
Hz. A 1 Hz unit is used when the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
|
|
@ -113,7 +113,8 @@ change for example with the current video standard.</entry>
|
|||
<entry>The lowest tunable frequency in units of 62.5
|
||||
KHz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz.</entry>
|
||||
Hz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
@ -121,7 +122,8 @@ Hz.</entry>
|
|||
<entry>The highest tunable frequency in units of 62.5
|
||||
KHz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz.</entry>
|
||||
Hz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
|
|
@ -134,7 +134,9 @@ the structure refers to a radio tuner the
|
|||
<entry spanname="hspan">The lowest tunable frequency in
|
||||
units of 62.5 kHz, or if the <structfield>capability</structfield>
|
||||
flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz. If multiple frequency bands are supported, then
|
||||
Hz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.
|
||||
If multiple frequency bands are supported, then
|
||||
<structfield>rangelow</structfield> is the lowest frequency
|
||||
of all the frequency bands.</entry>
|
||||
</row>
|
||||
|
@ -144,7 +146,9 @@ of all the frequency bands.</entry>
|
|||
<entry spanname="hspan">The highest tunable frequency in
|
||||
units of 62.5 kHz, or if the <structfield>capability</structfield>
|
||||
flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5
|
||||
Hz. If multiple frequency bands are supported, then
|
||||
Hz, or if the <structfield>capability</structfield> flag
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.
|
||||
If multiple frequency bands are supported, then
|
||||
<structfield>rangehigh</structfield> is the highest frequency
|
||||
of all the frequency bands.</entry>
|
||||
</row>
|
||||
|
@ -270,7 +274,7 @@ applications must set the array to zero.</entry>
|
|||
<entry><constant>V4L2_TUNER_CAP_LOW</constant></entry>
|
||||
<entry>0x0001</entry>
|
||||
<entry>When set, tuning frequencies are expressed in units of
|
||||
62.5 Hz, otherwise in units of 62.5 kHz.</entry>
|
||||
62.5 Hz instead of 62.5 kHz.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_TUNER_CAP_NORM</constant></entry>
|
||||
|
@ -360,6 +364,11 @@ radio tuners.</entry>
|
|||
<entry>The range to search when using the hardware seek functionality
|
||||
is programmable, see &VIDIOC-S-HW-FREQ-SEEK; for details.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_TUNER_CAP_1HZ</constant></entry>
|
||||
<entry>0x1000</entry>
|
||||
<entry>When set, tuning frequencies are expressed in units of 1 Hz instead of 62.5 kHz.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
|
|
@ -294,6 +294,12 @@ interface. For more information on audio inputs and outputs see <xref
|
|||
emit RF-modulated video/audio signals. For more information about
|
||||
modulator programming see
|
||||
<xref linkend="tuner" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CAP_SDR_CAPTURE</constant></entry>
|
||||
<entry>0x00100000</entry>
|
||||
<entry>The device supports the
|
||||
<link linkend="sdr">SDR Capture</link> interface.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CAP_READWRITE</constant></entry>
|
||||
|
|
|
@ -121,7 +121,9 @@ field and the &v4l2-tuner; <structfield>index</structfield> field.</entry>
|
|||
<entry>If non-zero, the lowest tunable frequency of the band to
|
||||
search in units of 62.5 kHz, or if the &v4l2-tuner;
|
||||
<structfield>capability</structfield> field has the
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz.
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz or if the &v4l2-tuner;
|
||||
<structfield>capability</structfield> field has the
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> flag set, in units of 1 Hz.
|
||||
If <structfield>rangelow</structfield> is zero a reasonable default value
|
||||
is used.</entry>
|
||||
</row>
|
||||
|
@ -131,7 +133,9 @@ is used.</entry>
|
|||
<entry>If non-zero, the highest tunable frequency of the band to
|
||||
search in units of 62.5 kHz, or if the &v4l2-tuner;
|
||||
<structfield>capability</structfield> field has the
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz.
|
||||
<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz or if the &v4l2-tuner;
|
||||
<structfield>capability</structfield> field has the
|
||||
<constant>V4L2_TUNER_CAP_1HZ</constant> flag set, in units of 1 Hz.
|
||||
If <structfield>rangehigh</structfield> is zero a reasonable default value
|
||||
is used.</entry>
|
||||
</row>
|
||||
|
|
|
@ -52,16 +52,24 @@
|
|||
<para>The <constant>VIDIOC_STREAMON</constant> and
|
||||
<constant>VIDIOC_STREAMOFF</constant> ioctl start and stop the capture
|
||||
or output process during streaming (<link linkend="mmap">memory
|
||||
mapping</link> or <link linkend="userp">user pointer</link>) I/O.</para>
|
||||
mapping</link>, <link linkend="userp">user pointer</link> or
|
||||
<link linkend="dmabuf">DMABUF</link>) I/O.</para>
|
||||
|
||||
<para>Specifically the capture hardware is disabled and no input
|
||||
<para>Capture hardware is disabled and no input
|
||||
buffers are filled (if there are any empty buffers in the incoming
|
||||
queue) until <constant>VIDIOC_STREAMON</constant> has been called.
|
||||
Accordingly the output hardware is disabled, no video signal is
|
||||
Output hardware is disabled and no video signal is
|
||||
produced until <constant>VIDIOC_STREAMON</constant> has been called.
|
||||
The ioctl will succeed when at least one output buffer is in the
|
||||
incoming queue.</para>
|
||||
|
||||
<para>Memory-to-memory devices will not start until
|
||||
<constant>VIDIOC_STREAMON</constant> has been called for both the capture
|
||||
and output stream types.</para>
|
||||
|
||||
<para>If <constant>VIDIOC_STREAMON</constant> fails then any already
|
||||
queued buffers will remain queued.</para>
|
||||
|
||||
<para>The <constant>VIDIOC_STREAMOFF</constant> ioctl, apart of
|
||||
aborting or finishing any DMA in progress, unlocks any user pointer
|
||||
buffers locked in physical memory, and it removes all buffers from the
|
||||
|
@ -70,14 +78,22 @@ dequeued yet will be lost, likewise all images enqueued for output but
|
|||
not transmitted yet. I/O returns to the same state as after calling
|
||||
&VIDIOC-REQBUFS; and can be restarted accordingly.</para>
|
||||
|
||||
<para>If buffers have been queued with &VIDIOC-QBUF; and
|
||||
<constant>VIDIOC_STREAMOFF</constant> is called without ever having
|
||||
called <constant>VIDIOC_STREAMON</constant>, then those queued buffers
|
||||
will also be removed from the incoming queue and all are returned to the
|
||||
same state as after calling &VIDIOC-REQBUFS; and can be restarted
|
||||
accordingly.</para>
|
||||
|
||||
<para>Both ioctls take a pointer to an integer, the desired buffer or
|
||||
stream type. This is the same as &v4l2-requestbuffers;
|
||||
<structfield>type</structfield>.</para>
|
||||
|
||||
<para>If <constant>VIDIOC_STREAMON</constant> is called when streaming
|
||||
is already in progress, or if <constant>VIDIOC_STREAMOFF</constant> is called
|
||||
when streaming is already stopped, then the ioctl does nothing and 0 is
|
||||
returned.</para>
|
||||
when streaming is already stopped, then 0 is returned. Nothing happens in the
|
||||
case of <constant>VIDIOC_STREAMON</constant>, but <constant>VIDIOC_STREAMOFF</constant>
|
||||
will return queued buffers to their starting state as mentioned above.</para>
|
||||
|
||||
<para>Note that applications can be preempted for unknown periods right
|
||||
before or after the <constant>VIDIOC_STREAMON</constant> or
|
||||
|
@ -93,7 +109,7 @@ synchronize with other events.</para>
|
|||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The buffer<structfield>type</structfield> is not supported,
|
||||
<para>The buffer <structfield>type</structfield> is not supported,
|
||||
or no buffers have been allocated (memory mapping) or enqueued
|
||||
(output) yet.</para>
|
||||
</listitem>
|
||||
|
|
|
@ -34,22 +34,20 @@
|
|||
|
||||
<book id="media_api">
|
||||
<bookinfo>
|
||||
<title>LINUX MEDIA INFRASTRUCTURE API</title>
|
||||
<title>LINUX MEDIA INFRASTRUCTURE API</title>
|
||||
|
||||
<copyright>
|
||||
<year>2009-2012</year>
|
||||
<holder>LinuxTV Developers</holder>
|
||||
</copyright>
|
||||
|
||||
<legalnotice>
|
||||
|
||||
<para>Permission is granted to copy, distribute and/or modify
|
||||
this document under the terms of the GNU Free Documentation License,
|
||||
Version 1.1 or any later version published by the Free Software
|
||||
Foundation. A copy of the license is included in the chapter entitled
|
||||
"GNU Free Documentation License"</para>
|
||||
</legalnotice>
|
||||
<copyright>
|
||||
<year>2009-2014</year>
|
||||
<holder>LinuxTV Developers</holder>
|
||||
</copyright>
|
||||
|
||||
<legalnotice>
|
||||
<para>Permission is granted to copy, distribute and/or modify
|
||||
this document under the terms of the GNU Free Documentation License,
|
||||
Version 1.1 or any later version published by the Free Software
|
||||
Foundation. A copy of the license is included in the chapter entitled
|
||||
"GNU Free Documentation License"</para>
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
|
||||
<toc></toc> <!-- autogenerated -->
|
||||
|
@ -58,12 +56,13 @@ Foundation. A copy of the license is included in the chapter entitled
|
|||
<title>Introduction</title>
|
||||
|
||||
<para>This document covers the Linux Kernel to Userspace API's used by
|
||||
video and radio straming devices, including video cameras,
|
||||
video and radio streaming devices, including video cameras,
|
||||
analog and digital TV receiver cards, AM/FM receiver cards,
|
||||
streaming capture devices.</para>
|
||||
streaming capture and output devices, codec devices and remote
|
||||
controllers.</para>
|
||||
<para>It is divided into four parts.</para>
|
||||
<para>The first part covers radio, capture,
|
||||
cameras and analog TV devices.</para>
|
||||
<para>The first part covers radio, video capture and output,
|
||||
cameras, analog TV devices and codecs.</para>
|
||||
<para>The second part covers the
|
||||
API used for digital TV and Internet reception via one of the
|
||||
several digital tv standards. While it is called as DVB API,
|
||||
|
@ -75,55 +74,14 @@ Foundation. A copy of the license is included in the chapter entitled
|
|||
<para>For additional information and for the latest development code,
|
||||
see: <ulink url="http://linuxtv.org">http://linuxtv.org</ulink>.</para>
|
||||
<para>For discussing improvements, reporting troubles, sending new drivers, etc, please mail to: <ulink url="http://vger.kernel.org/vger-lists.html#linux-media">Linux Media Mailing List (LMML).</ulink>.</para>
|
||||
|
||||
</preface>
|
||||
|
||||
<part id="v4l2spec">
|
||||
&sub-v4l2;
|
||||
</part>
|
||||
<part id="dvbapi">
|
||||
&sub-dvbapi;
|
||||
</part>
|
||||
<part id="v4ldvb_common">
|
||||
<partinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Mauro</firstname>
|
||||
<surname>Chehab</surname>
|
||||
<othername role="mi">Carvalho</othername>
|
||||
<affiliation><address><email>mchehab@redhat.com</email></address></affiliation>
|
||||
<contrib>Initial version.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<copyright>
|
||||
<year>2009-2012</year>
|
||||
<holder>Mauro Carvalho Chehab</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<!-- Put document revisions here, newest first. -->
|
||||
<revision>
|
||||
<revnumber>1.0.0</revnumber>
|
||||
<date>2009-09-06</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>Initial revision</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</partinfo>
|
||||
|
||||
<title>Remote Controller API</title>
|
||||
<chapter id="remote_controllers">
|
||||
&sub-remote_controllers;
|
||||
</chapter>
|
||||
</part>
|
||||
<part id="media_common">
|
||||
&sub-media-controller;
|
||||
</part>
|
||||
|
||||
<chapter id="gen_errors">
|
||||
&sub-gen-errors;
|
||||
</chapter>
|
||||
<part id="v4l2spec">&sub-v4l2;</part>
|
||||
<part id="dvbapi">&sub-dvbapi;</part>
|
||||
<part id="remotes">&sub-remote_controllers;</part>
|
||||
<part id="media_common">&sub-media-controller;</part>
|
||||
|
||||
<chapter id="gen_errors">&sub-gen-errors;</chapter>
|
||||
|
||||
&sub-fdl-appendix;
|
||||
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
|
||||
|
||||
<book id="w1id">
|
||||
<bookinfo>
|
||||
<title>W1: Dallas' 1-wire bus</title>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>David</firstname>
|
||||
<surname>Fries</surname>
|
||||
<affiliation>
|
||||
<address>
|
||||
<email>David@Fries.net</email>
|
||||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
|
||||
</authorgroup>
|
||||
|
||||
<copyright>
|
||||
<year>2013</year>
|
||||
<!--
|
||||
<holder></holder>
|
||||
-->
|
||||
</copyright>
|
||||
|
||||
<legalnotice>
|
||||
<para>
|
||||
This documentation is free software; you can redistribute
|
||||
it and/or modify it under the terms of the GNU General Public
|
||||
License version 2.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This program is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
For more details see the file COPYING in the source
|
||||
distribution of Linux.
|
||||
</para>
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
|
||||
<toc></toc>
|
||||
|
||||
<chapter id="w1_internal">
|
||||
<title>W1 API internal to the kernel</title>
|
||||
|
||||
<sect1 id="w1_internal_api">
|
||||
<title>W1 API internal to the kernel</title>
|
||||
<sect2 id="w1.h">
|
||||
<title>drivers/w1/w1.h</title>
|
||||
<para>W1 core functions.</para>
|
||||
!Idrivers/w1/w1.h
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1.c">
|
||||
<title>drivers/w1/w1.c</title>
|
||||
<para>W1 core functions.</para>
|
||||
!Idrivers/w1/w1.c
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1_family.h">
|
||||
<title>drivers/w1/w1_family.h</title>
|
||||
<para>Allows registering device family operations.</para>
|
||||
!Idrivers/w1/w1_family.h
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1_family.c">
|
||||
<title>drivers/w1/w1_family.c</title>
|
||||
<para>Allows registering device family operations.</para>
|
||||
!Edrivers/w1/w1_family.c
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1_int.c">
|
||||
<title>drivers/w1/w1_int.c</title>
|
||||
<para>W1 internal initialization for master devices.</para>
|
||||
!Edrivers/w1/w1_int.c
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1_netlink.h">
|
||||
<title>drivers/w1/w1_netlink.h</title>
|
||||
<para>W1 external netlink API structures and commands.</para>
|
||||
!Idrivers/w1/w1_netlink.h
|
||||
</sect2>
|
||||
|
||||
<sect2 id="w1_io.c">
|
||||
<title>drivers/w1/w1_io.c</title>
|
||||
<para>W1 input/output.</para>
|
||||
!Edrivers/w1/w1_io.c
|
||||
!Idrivers/w1/w1_io.c
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
|
||||
</chapter>
|
||||
|
||||
</book>
|
|
@ -468,8 +468,6 @@
|
|||
return err;
|
||||
}
|
||||
|
||||
snd_card_set_dev(card, &pci->dev);
|
||||
|
||||
*rchip = chip;
|
||||
return 0;
|
||||
}
|
||||
|
@ -492,7 +490,8 @@
|
|||
}
|
||||
|
||||
/* (2) */
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
0, &card);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
@ -591,7 +590,8 @@
|
|||
struct snd_card *card;
|
||||
int err;
|
||||
....
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
0, &card);
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
@ -809,28 +809,34 @@
|
|||
|
||||
<para>
|
||||
As mentioned above, to create a card instance, call
|
||||
<function>snd_card_create()</function>.
|
||||
<function>snd_card_new()</function>.
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
struct snd_card *card;
|
||||
int err;
|
||||
err = snd_card_create(index, id, module, extra_size, &card);
|
||||
err = snd_card_new(&pci->dev, index, id, module, extra_size, &card);
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The function takes five arguments, the card-index number, the
|
||||
id string, the module pointer (usually
|
||||
The function takes six arguments: the parent device pointer,
|
||||
the card-index number, the id string, the module pointer (usually
|
||||
<constant>THIS_MODULE</constant>),
|
||||
the size of extra-data space, and the pointer to return the
|
||||
card instance. The extra_size argument is used to
|
||||
allocate card->private_data for the
|
||||
chip-specific data. Note that these data
|
||||
are allocated by <function>snd_card_create()</function>.
|
||||
are allocated by <function>snd_card_new()</function>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The first argument, the pointer of struct
|
||||
<structname>device</structname>, specifies the parent device.
|
||||
For PCI devices, typically &pci-> is passed there.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
|
@ -916,16 +922,16 @@
|
|||
</para>
|
||||
|
||||
<section id="card-management-chip-specific-snd-card-new">
|
||||
<title>1. Allocating via <function>snd_card_create()</function>.</title>
|
||||
<title>1. Allocating via <function>snd_card_new()</function>.</title>
|
||||
<para>
|
||||
As mentioned above, you can pass the extra-data-length
|
||||
to the 4th argument of <function>snd_card_create()</function>, i.e.
|
||||
to the 5th argument of <function>snd_card_new()</function>, i.e.
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(struct mychip), &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(struct mychip), &card);
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
@ -954,7 +960,7 @@
|
|||
|
||||
<para>
|
||||
After allocating a card instance via
|
||||
<function>snd_card_create()</function> (with
|
||||
<function>snd_card_new()</function> (with
|
||||
<constant>0</constant> on the 4th arg), call
|
||||
<function>kzalloc()</function>.
|
||||
|
||||
|
@ -963,7 +969,8 @@
|
|||
<![CDATA[
|
||||
struct snd_card *card;
|
||||
struct mychip *chip;
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
0, &card);
|
||||
.....
|
||||
chip = kzalloc(sizeof(*chip), GFP_KERNEL);
|
||||
]]>
|
||||
|
@ -1170,8 +1177,6 @@
|
|||
return err;
|
||||
}
|
||||
|
||||
snd_card_set_dev(card, &pci->dev);
|
||||
|
||||
*rchip = chip;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1526,30 +1531,6 @@
|
|||
|
||||
</section>
|
||||
|
||||
<section id="pci-resource-device-struct">
|
||||
<title>Registration of Device Struct</title>
|
||||
<para>
|
||||
At some point, typically after calling <function>snd_device_new()</function>,
|
||||
you need to register the struct <structname>device</structname> of the chip
|
||||
you're handling for udev and co. ALSA provides a macro for compatibility with
|
||||
older kernels. Simply call like the following:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
snd_card_set_dev(card, &pci->dev);
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
so that it stores the PCI's device pointer to the card. This will be
|
||||
referred by ALSA core functions later when the devices are registered.
|
||||
</para>
|
||||
<para>
|
||||
In the case of non-PCI, pass the proper device struct pointer of the BUS
|
||||
instead. (In the case of legacy ISA without PnP, you don't have to do
|
||||
anything.)
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="pci-resource-entries">
|
||||
<title>PCI Entries</title>
|
||||
<para>
|
||||
|
@ -5740,7 +5721,8 @@ struct _snd_pcm_runtime {
|
|||
struct mychip *chip;
|
||||
int err;
|
||||
....
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
0, &card);
|
||||
....
|
||||
chip = kzalloc(sizeof(*chip), GFP_KERNEL);
|
||||
....
|
||||
|
@ -5752,7 +5734,7 @@ struct _snd_pcm_runtime {
|
|||
</informalexample>
|
||||
|
||||
When you created the chip data with
|
||||
<function>snd_card_create()</function>, it's anyway accessible
|
||||
<function>snd_card_new()</function>, it's anyway accessible
|
||||
via <structfield>private_data</structfield> field.
|
||||
|
||||
<informalexample>
|
||||
|
@ -5766,8 +5748,8 @@ struct _snd_pcm_runtime {
|
|||
struct mychip *chip;
|
||||
int err;
|
||||
....
|
||||
err = snd_card_create(index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(struct mychip), &card);
|
||||
err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(struct mychip), &card);
|
||||
....
|
||||
chip = card->private_data;
|
||||
....
|
||||
|
|
|
@ -68,10 +68,6 @@ To disable SR-IOV capability:
|
|||
echo 0 > \
|
||||
/sys/bus/pci/devices/<DOMAIN:BUS:DEVICE.FUNCTION>/sriov_numvfs
|
||||
|
||||
To notify SR-IOV core of Virtual Function Migration:
|
||||
(a) In the driver:
|
||||
irqreturn_t pci_sriov_migration(struct pci_dev *dev);
|
||||
|
||||
3.2 Usage example
|
||||
|
||||
Following piece of code illustrates the usage of the SR-IOV API.
|
||||
|
|
|
@ -31,6 +31,14 @@ has lapsed, so this approach may be used in non-GPL software, if desired.
|
|||
(In contrast, implementation of RCU is permitted only in software licensed
|
||||
under either GPL or LGPL. Sorry!!!)
|
||||
|
||||
In 1987, Rashid et al. described lazy TLB-flush [RichardRashid87a].
|
||||
At first glance, this has nothing to do with RCU, but nevertheless
|
||||
this paper helped inspire the update-side batching used in the later
|
||||
RCU implementation in DYNIX/ptx. In 1988, Barbara Liskov published
|
||||
a description of Argus that noted that use of out-of-date values can
|
||||
be tolerated in some situations. Thus, this paper provides some early
|
||||
theoretical justification for use of stale data.
|
||||
|
||||
In 1990, Pugh [Pugh90] noted that explicitly tracking which threads
|
||||
were reading a given data structure permitted deferred free to operate
|
||||
in the presence of non-terminating threads. However, this explicit
|
||||
|
@ -41,11 +49,11 @@ providing a fine-grained locking design, however, it would be interesting
|
|||
to see how much of the performance advantage reported in 1990 remains
|
||||
today.
|
||||
|
||||
At about this same time, Adams [Adams91] described ``chaotic relaxation'',
|
||||
where the normal barriers between successive iterations of convergent
|
||||
numerical algorithms are relaxed, so that iteration $n$ might use
|
||||
data from iteration $n-1$ or even $n-2$. This introduces error,
|
||||
which typically slows convergence and thus increases the number of
|
||||
At about this same time, Andrews [Andrews91textbook] described ``chaotic
|
||||
relaxation'', where the normal barriers between successive iterations
|
||||
of convergent numerical algorithms are relaxed, so that iteration $n$
|
||||
might use data from iteration $n-1$ or even $n-2$. This introduces
|
||||
error, which typically slows convergence and thus increases the number of
|
||||
iterations required. However, this increase is sometimes more than made
|
||||
up for by a reduction in the number of expensive barrier operations,
|
||||
which are otherwise required to synchronize the threads at the end
|
||||
|
@ -55,7 +63,8 @@ is thus inapplicable to most data structures in operating-system kernels.
|
|||
|
||||
In 1992, Henry (now Alexia) Massalin completed a dissertation advising
|
||||
parallel programmers to defer processing when feasible to simplify
|
||||
synchronization. RCU makes extremely heavy use of this advice.
|
||||
synchronization [HMassalinPhD]. RCU makes extremely heavy use of
|
||||
this advice.
|
||||
|
||||
In 1993, Jacobson [Jacobson93] verbally described what is perhaps the
|
||||
simplest deferred-free technique: simply waiting a fixed amount of time
|
||||
|
@ -90,27 +99,29 @@ mechanism, which is quite similar to RCU [Gamsa99]. These operating
|
|||
systems made pervasive use of RCU in place of "existence locks", which
|
||||
greatly simplifies locking hierarchies and helps avoid deadlocks.
|
||||
|
||||
2001 saw the first RCU presentation involving Linux [McKenney01a]
|
||||
at OLS. The resulting abundance of RCU patches was presented the
|
||||
following year [McKenney02a], and use of RCU in dcache was first
|
||||
described that same year [Linder02a].
|
||||
The year 2000 saw an email exchange that would likely have
|
||||
led to yet another independent invention of something like RCU
|
||||
[RustyRussell2000a,RustyRussell2000b]. Instead, 2001 saw the first
|
||||
RCU presentation involving Linux [McKenney01a] at OLS. The resulting
|
||||
abundance of RCU patches was presented the following year [McKenney02a],
|
||||
and use of RCU in dcache was first described that same year [Linder02a].
|
||||
|
||||
Also in 2002, Michael [Michael02b,Michael02a] presented "hazard-pointer"
|
||||
techniques that defer the destruction of data structures to simplify
|
||||
non-blocking synchronization (wait-free synchronization, lock-free
|
||||
synchronization, and obstruction-free synchronization are all examples of
|
||||
non-blocking synchronization). In particular, this technique eliminates
|
||||
locking, reduces contention, reduces memory latency for readers, and
|
||||
parallelizes pipeline stalls and memory latency for writers. However,
|
||||
these techniques still impose significant read-side overhead in the
|
||||
form of memory barriers. Researchers at Sun worked along similar lines
|
||||
in the same timeframe [HerlihyLM02]. These techniques can be thought
|
||||
of as inside-out reference counts, where the count is represented by the
|
||||
number of hazard pointers referencing a given data structure rather than
|
||||
the more conventional counter field within the data structure itself.
|
||||
The key advantage of inside-out reference counts is that they can be
|
||||
stored in immortal variables, thus allowing races between access and
|
||||
deletion to be avoided.
|
||||
non-blocking synchronization). The corresponding journal article appeared
|
||||
in 2004 [MagedMichael04a]. This technique eliminates locking, reduces
|
||||
contention, reduces memory latency for readers, and parallelizes pipeline
|
||||
stalls and memory latency for writers. However, these techniques still
|
||||
impose significant read-side overhead in the form of memory barriers.
|
||||
Researchers at Sun worked along similar lines in the same timeframe
|
||||
[HerlihyLM02]. These techniques can be thought of as inside-out reference
|
||||
counts, where the count is represented by the number of hazard pointers
|
||||
referencing a given data structure rather than the more conventional
|
||||
counter field within the data structure itself. The key advantage
|
||||
of inside-out reference counts is that they can be stored in immortal
|
||||
variables, thus allowing races between access and deletion to be avoided.
|
||||
|
||||
By the same token, RCU can be thought of as a "bulk reference count",
|
||||
where some form of reference counter covers all reference by a given CPU
|
||||
|
@ -123,8 +134,10 @@ can be thought of in other terms as well.
|
|||
|
||||
In 2003, the K42 group described how RCU could be used to create
|
||||
hot-pluggable implementations of operating-system functions [Appavoo03a].
|
||||
Later that year saw a paper describing an RCU implementation of System
|
||||
V IPC [Arcangeli03], and an introduction to RCU in Linux Journal
|
||||
Later that year saw a paper describing an RCU implementation
|
||||
of System V IPC [Arcangeli03] (following up on a suggestion by
|
||||
Hugh Dickins [Dickins02a] and an implementation by Mingming Cao
|
||||
[MingmingCao2002IPCRCU]), and an introduction to RCU in Linux Journal
|
||||
[McKenney03a].
|
||||
|
||||
2004 has seen a Linux-Journal article on use of RCU in dcache
|
||||
|
@ -383,6 +396,21 @@ for Programming Languages and Operating Systems}"
|
|||
}
|
||||
}
|
||||
|
||||
@phdthesis{HMassalinPhD
|
||||
,author="H. Massalin"
|
||||
,title="Synthesis: An Efficient Implementation of Fundamental Operating
|
||||
System Services"
|
||||
,school="Columbia University"
|
||||
,address="New York, NY"
|
||||
,year="1992"
|
||||
,annotation={
|
||||
Mondo optimizing compiler.
|
||||
Wait-free stuff.
|
||||
Good advice: defer work to avoid synchronization. See page 90
|
||||
(PDF page 106), Section 5.4, fourth bullet point.
|
||||
}
|
||||
}
|
||||
|
||||
@unpublished{Jacobson93
|
||||
,author="Van Jacobson"
|
||||
,title="Avoid Read-Side Locking Via Delayed Free"
|
||||
|
@ -671,6 +699,20 @@ Orran Krieger and Rusty Russell and Dipankar Sarma and Maneesh Soni"
|
|||
[Viewed October 18, 2004]"
|
||||
}
|
||||
|
||||
@conference{Michael02b
|
||||
,author="Maged M. Michael"
|
||||
,title="High Performance Dynamic Lock-Free Hash Tables and List-Based Sets"
|
||||
,Year="2002"
|
||||
,Month="August"
|
||||
,booktitle="{Proceedings of the 14\textsuperscript{th} Annual ACM
|
||||
Symposium on Parallel
|
||||
Algorithms and Architecture}"
|
||||
,pages="73-82"
|
||||
,annotation={
|
||||
Like the title says...
|
||||
}
|
||||
}
|
||||
|
||||
@Conference{Linder02a
|
||||
,Author="Hanna Linder and Dipankar Sarma and Maneesh Soni"
|
||||
,Title="Scalability of the Directory Entry Cache"
|
||||
|
@ -727,6 +769,24 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell"
|
|||
}
|
||||
}
|
||||
|
||||
@conference{Michael02a
|
||||
,author="Maged M. Michael"
|
||||
,title="Safe Memory Reclamation for Dynamic Lock-Free Objects Using Atomic
|
||||
Reads and Writes"
|
||||
,Year="2002"
|
||||
,Month="August"
|
||||
,booktitle="{Proceedings of the 21\textsuperscript{st} Annual ACM
|
||||
Symposium on Principles of Distributed Computing}"
|
||||
,pages="21-30"
|
||||
,annotation={
|
||||
Each thread keeps an array of pointers to items that it is
|
||||
currently referencing. Sort of an inside-out garbage collection
|
||||
mechanism, but one that requires the accessing code to explicitly
|
||||
state its needs. Also requires read-side memory barriers on
|
||||
most architectures.
|
||||
}
|
||||
}
|
||||
|
||||
@unpublished{Dickins02a
|
||||
,author="Hugh Dickins"
|
||||
,title="Use RCU for System-V IPC"
|
||||
|
@ -735,6 +795,17 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell"
|
|||
,note="private communication"
|
||||
}
|
||||
|
||||
@InProceedings{HerlihyLM02
|
||||
,author={Maurice Herlihy and Victor Luchangco and Mark Moir}
|
||||
,title="The Repeat Offender Problem: A Mechanism for Supporting Dynamic-Sized,
|
||||
Lock-Free Data Structures"
|
||||
,booktitle={Proceedings of 16\textsuperscript{th} International
|
||||
Symposium on Distributed Computing}
|
||||
,year=2002
|
||||
,month="October"
|
||||
,pages="339-353"
|
||||
}
|
||||
|
||||
@unpublished{Sarma02b
|
||||
,Author="Dipankar Sarma"
|
||||
,Title="Some dcache\_rcu benchmark numbers"
|
||||
|
@ -749,6 +820,19 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell"
|
|||
}
|
||||
}
|
||||
|
||||
@unpublished{MingmingCao2002IPCRCU
|
||||
,Author="Mingming Cao"
|
||||
,Title="[PATCH]updated ipc lock patch"
|
||||
,month="October"
|
||||
,year="2002"
|
||||
,note="Available:
|
||||
\url{https://lkml.org/lkml/2002/10/24/262}
|
||||
[Viewed February 15, 2014]"
|
||||
,annotation={
|
||||
Mingming Cao's patch to introduce RCU to SysV IPC.
|
||||
}
|
||||
}
|
||||
|
||||
@unpublished{LinusTorvalds2003a
|
||||
,Author="Linus Torvalds"
|
||||
,Title="Re: {[PATCH]} small fixes in brlock.h"
|
||||
|
@ -982,6 +1066,23 @@ Realtime Applications"
|
|||
}
|
||||
}
|
||||
|
||||
@article{MagedMichael04a
|
||||
,author="Maged M. Michael"
|
||||
,title="Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects"
|
||||
,Year="2004"
|
||||
,Month="June"
|
||||
,journal="IEEE Transactions on Parallel and Distributed Systems"
|
||||
,volume="15"
|
||||
,number="6"
|
||||
,pages="491-504"
|
||||
,url="Available:
|
||||
\url{http://www.research.ibm.com/people/m/michael/ieeetpds-2004.pdf}
|
||||
[Viewed March 1, 2005]"
|
||||
,annotation={
|
||||
New canonical hazard-pointer citation.
|
||||
}
|
||||
}
|
||||
|
||||
@phdthesis{PaulEdwardMcKenneyPhD
|
||||
,author="Paul E. McKenney"
|
||||
,title="Exploiting Deferred Destruction:
|
||||
|
|
|
@ -256,10 +256,10 @@ over a rather long period of time, but improvements are always welcome!
|
|||
variations on this theme.
|
||||
|
||||
b. Limiting update rate. For example, if updates occur only
|
||||
once per hour, then no explicit rate limiting is required,
|
||||
unless your system is already badly broken. The dcache
|
||||
subsystem takes this approach -- updates are guarded
|
||||
by a global lock, limiting their rate.
|
||||
once per hour, then no explicit rate limiting is
|
||||
required, unless your system is already badly broken.
|
||||
Older versions of the dcache subsystem take this approach,
|
||||
guarding updates with a global lock, limiting their rate.
|
||||
|
||||
c. Trusted update -- if updates can only be done manually by
|
||||
superuser or some other trusted user, then it might not
|
||||
|
@ -268,7 +268,8 @@ over a rather long period of time, but improvements are always welcome!
|
|||
the machine.
|
||||
|
||||
d. Use call_rcu_bh() rather than call_rcu(), in order to take
|
||||
advantage of call_rcu_bh()'s faster grace periods.
|
||||
advantage of call_rcu_bh()'s faster grace periods. (This
|
||||
is only a partial solution, though.)
|
||||
|
||||
e. Periodically invoke synchronize_rcu(), permitting a limited
|
||||
number of updates per grace period.
|
||||
|
@ -276,6 +277,13 @@ over a rather long period of time, but improvements are always welcome!
|
|||
The same cautions apply to call_rcu_bh(), call_rcu_sched(),
|
||||
call_srcu(), and kfree_rcu().
|
||||
|
||||
Note that although these primitives do take action to avoid memory
|
||||
exhaustion when any given CPU has too many callbacks, a determined
|
||||
user could still exhaust memory. This is especially the case
|
||||
if a system with a large number of CPUs has been configured to
|
||||
offload all of its RCU callbacks onto a single CPU, or if the
|
||||
system has relatively little free memory.
|
||||
|
||||
9. All RCU list-traversal primitives, which include
|
||||
rcu_dereference(), list_for_each_entry_rcu(), and
|
||||
list_for_each_safe_rcu(), must be either within an RCU read-side
|
||||
|
|
|
@ -14,7 +14,10 @@ Read Documentation/SubmitChecklist for a list of items to check
|
|||
before submitting code. If you are submitting a driver, also read
|
||||
Documentation/SubmittingDrivers.
|
||||
|
||||
|
||||
Many of these steps describe the default behavior of the git version
|
||||
control system; if you use git to prepare your patches, you'll find much
|
||||
of the mechanical work done for you, though you'll still need to prepare
|
||||
and document a sensible set of patches.
|
||||
|
||||
--------------------------------------------
|
||||
SECTION 1 - CREATING AND SENDING YOUR CHANGE
|
||||
|
@ -25,7 +28,9 @@ SECTION 1 - CREATING AND SENDING YOUR CHANGE
|
|||
1) "diff -up"
|
||||
------------
|
||||
|
||||
Use "diff -up" or "diff -uprN" to create patches.
|
||||
Use "diff -up" or "diff -uprN" to create patches. git generates patches
|
||||
in this form by default; if you're using git, you can skip this section
|
||||
entirely.
|
||||
|
||||
All changes to the Linux kernel occur in the form of patches, as
|
||||
generated by diff(1). When creating your patch, make sure to create it
|
||||
|
@ -66,19 +71,14 @@ Make sure your patch does not include any extra files which do not
|
|||
belong in a patch submission. Make sure to review your patch -after-
|
||||
generated it with diff(1), to ensure accuracy.
|
||||
|
||||
If your changes produce a lot of deltas, you may want to look into
|
||||
splitting them into individual patches which modify things in
|
||||
logical stages. This will facilitate easier reviewing by other
|
||||
kernel developers, very important if you want your patch accepted.
|
||||
There are a number of scripts which can aid in this:
|
||||
If your changes produce a lot of deltas, you need to split them into
|
||||
individual patches which modify things in logical stages; see section
|
||||
#3. This will facilitate easier reviewing by other kernel developers,
|
||||
very important if you want your patch accepted.
|
||||
|
||||
Quilt:
|
||||
http://savannah.nongnu.org/projects/quilt
|
||||
|
||||
Andrew Morton's patch scripts:
|
||||
http://userweb.kernel.org/~akpm/stuff/patch-scripts.tar.gz
|
||||
Instead of these scripts, quilt is the recommended patch management
|
||||
tool (see above).
|
||||
If you're using git, "git rebase -i" can help you with this process. If
|
||||
you're not using git, quilt <http://savannah.nongnu.org/projects/quilt>
|
||||
is another popular alternative.
|
||||
|
||||
|
||||
|
||||
|
@ -106,8 +106,21 @@ I.e., the patch (series) and its description should be self-contained.
|
|||
This benefits both the patch merger(s) and reviewers. Some reviewers
|
||||
probably didn't even receive earlier versions of the patch.
|
||||
|
||||
Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
|
||||
instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
|
||||
to do frotz", as if you are giving orders to the codebase to change
|
||||
its behaviour.
|
||||
|
||||
If the patch fixes a logged bug entry, refer to that bug entry by
|
||||
number and URL.
|
||||
number and URL. If the patch follows from a mailing list discussion,
|
||||
give a URL to the mailing list archive; use the https://lkml.kernel.org/
|
||||
redirector with a Message-Id, to ensure that the links cannot become
|
||||
stale.
|
||||
|
||||
However, try to make your explanation understandable without external
|
||||
resources. In addition to giving a URL to a mailing list archive or
|
||||
bug, summarize the relevant points of the discussion that led to the
|
||||
patch as submitted.
|
||||
|
||||
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
|
||||
|
@ -594,7 +607,8 @@ patch.
|
|||
If you are going to include a diffstat after the "---" marker, please
|
||||
use diffstat options "-p 1 -w 70" so that filenames are listed from
|
||||
the top of the kernel source tree and don't use too much horizontal
|
||||
space (easily fit in 80 columns, maybe with some indentation).
|
||||
space (easily fit in 80 columns, maybe with some indentation). (git
|
||||
generates appropriate diffstats by default.)
|
||||
|
||||
See more details on the proper patch format in the following
|
||||
references.
|
||||
|
@ -725,7 +739,7 @@ SECTION 3 - REFERENCES
|
|||
----------------------
|
||||
|
||||
Andrew Morton, "The perfect patch" (tpp).
|
||||
<http://userweb.kernel.org/~akpm/stuff/tpp.txt>
|
||||
<http://www.ozlabs.org/~akpm/stuff/tpp.txt>
|
||||
|
||||
Jeff Garzik, "Linux kernel patch submission format".
|
||||
<http://linux.yyz.us/patch-format.html>
|
||||
|
@ -738,7 +752,7 @@ Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
|||
<http://www.kroah.com/log/linux/maintainer-05.html>
|
||||
|
||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||
<http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
|
||||
<https://lkml.org/lkml/2005/7/11/336>
|
||||
|
||||
Kernel Documentation/CodingStyle:
|
||||
<http://users.sosdg.org/~qiyong/lxr/source/Documentation/CodingStyle>
|
||||
|
|
|
@ -83,14 +83,24 @@ EBU Armada family
|
|||
88F6710
|
||||
88F6707
|
||||
88F6W11
|
||||
Product Brief: http://www.marvell.com/embedded-processors/armada-300/assets/Marvell_ARMADA_370_SoC.pdf
|
||||
|
||||
Armada 375 Flavors:
|
||||
88F6720
|
||||
Product Brief: http://www.marvell.com/embedded-processors/armada-300/assets/ARMADA_375_SoC-01_product_brief.pdf
|
||||
|
||||
Armada 380/385 Flavors:
|
||||
88F6810
|
||||
88F6820
|
||||
88F6828
|
||||
|
||||
Armada XP Flavors:
|
||||
MV78230
|
||||
MV78260
|
||||
MV78460
|
||||
NOTE: not to be confused with the non-SMP 78xx0 SoCs
|
||||
Product Brief: http://www.marvell.com/embedded-processors/armada-xp/assets/Marvell-ArmadaXP-SoC-product%20brief.pdf
|
||||
|
||||
Product Brief: http://www.marvell.com/embedded-processors/armada-xp/assets/Marvell-ArmadaXP-SoC-product%20brief.pdf
|
||||
No public datasheet available.
|
||||
|
||||
Core: Sheeva ARMv7 compatible
|
||||
|
|
|
@ -111,8 +111,14 @@ Before jumping into the kernel, the following conditions must be met:
|
|||
- Caches, MMUs
|
||||
The MMU must be off.
|
||||
Instruction cache may be on or off.
|
||||
Data cache must be off and invalidated.
|
||||
External caches (if present) must be configured and disabled.
|
||||
The address range corresponding to the loaded kernel image must be
|
||||
cleaned to the PoC. In the presence of a system cache or other
|
||||
coherent masters with caches enabled, this will typically require
|
||||
cache maintenance by VA rather than set/way operations.
|
||||
System caches which respect the architected cache maintenance by VA
|
||||
operations must be configured and may be enabled.
|
||||
System caches which do not respect architected cache maintenance by VA
|
||||
operations (not recommended) must be configured and disabled.
|
||||
|
||||
- Architected timers
|
||||
CNTFRQ must be programmed with the timer frequency and CNTVOFF must
|
||||
|
|
|
@ -35,11 +35,13 @@ ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
|
|||
|
||||
ffffffbe00000000 ffffffbffbbfffff ~8GB [guard, future vmmemap]
|
||||
|
||||
ffffffbffbc00000 ffffffbffbdfffff 2MB earlyprintk device
|
||||
ffffffbffa000000 ffffffbffaffffff 16MB PCI I/O space
|
||||
|
||||
ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O space
|
||||
ffffffbffb000000 ffffffbffbbfffff 12MB [guard]
|
||||
|
||||
ffffffbffbe10000 ffffffbcffffffff ~2MB [guard]
|
||||
ffffffbffbc00000 ffffffbffbdfffff 2MB fixed mappings
|
||||
|
||||
ffffffbffbe00000 ffffffbffbffffff 2MB [guard]
|
||||
|
||||
ffffffbffc000000 ffffffbfffffffff 64MB modules
|
||||
|
||||
|
@ -60,11 +62,13 @@ fffffdfc00000000 fffffdfdffffffff 8GB vmemmap
|
|||
|
||||
fffffdfe00000000 fffffdfffbbfffff ~8GB [guard, future vmmemap]
|
||||
|
||||
fffffdfffbc00000 fffffdfffbdfffff 2MB earlyprintk device
|
||||
fffffdfffa000000 fffffdfffaffffff 16MB PCI I/O space
|
||||
|
||||
fffffdfffbe00000 fffffdfffbe0ffff 64KB PCI I/O space
|
||||
fffffdfffb000000 fffffdfffbbfffff 12MB [guard]
|
||||
|
||||
fffffdfffbe10000 fffffdfffbffffff ~2MB [guard]
|
||||
fffffdfffbc00000 fffffdfffbdfffff 2MB fixed mappings
|
||||
|
||||
fffffdfffbe00000 fffffdfffbffffff 2MB [guard]
|
||||
|
||||
fffffdfffc000000 fffffdffffffffff 64MB modules
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
This describes the in kernel data structure for DRBD-9. Starting with
|
||||
Linux v3.14 we are reorganizing DRBD to use this data structure.
|
||||
|
||||
Basic Data Structure
|
||||
====================
|
||||
|
||||
A node has a number of DRBD resources. Each such resource has a number of
|
||||
devices (aka volumes) and connections to other nodes ("peer nodes"). Each DRBD
|
||||
device is represented by a block device locally.
|
||||
|
||||
The DRBD objects are interconnected to form a matrix as depicted below; a
|
||||
drbd_peer_device object sits at each intersection between a drbd_device and a
|
||||
drbd_connection:
|
||||
|
||||
/--------------+---------------+.....+---------------\
|
||||
| resource | device | | device |
|
||||
+--------------+---------------+.....+---------------+
|
||||
| connection | peer_device | | peer_device |
|
||||
+--------------+---------------+.....+---------------+
|
||||
: : : : :
|
||||
: : : : :
|
||||
+--------------+---------------+.....+---------------+
|
||||
| connection | peer_device | | peer_device |
|
||||
\--------------+---------------+.....+---------------/
|
||||
|
||||
In this table, horizontally, devices can be accessed from resources by their
|
||||
volume number. Likewise, peer_devices can be accessed from connections by
|
||||
their volume number. Objects in the vertical direction are connected by double
|
||||
linked lists. There are back pointers from peer_devices to their connections a
|
||||
devices, and from connections and devices to their resource.
|
||||
|
||||
All resources are in the drbd_resources double-linked list. In addition, all
|
||||
devices can be accessed by their minor device number via the drbd_devices idr.
|
||||
|
||||
The drbd_resource, drbd_connection, and drbd_device objects are reference
|
||||
counted. The peer_device objects only serve to establish the links between
|
||||
devices and connections; their lifetime is determined by the lifetime of the
|
||||
device and connection which they reference.
|
|
@ -21,7 +21,43 @@ Following shows a typical sequence of steps for using zram.
|
|||
This creates 4 devices: /dev/zram{0,1,2,3}
|
||||
(num_devices parameter is optional. Default: 1)
|
||||
|
||||
2) Set Disksize
|
||||
2) Set max number of compression streams
|
||||
Compression backend may use up to max_comp_streams compression streams,
|
||||
thus allowing up to max_comp_streams concurrent compression operations.
|
||||
By default, compression backend uses single compression stream.
|
||||
|
||||
Examples:
|
||||
#show max compression streams number
|
||||
cat /sys/block/zram0/max_comp_streams
|
||||
|
||||
#set max compression streams number to 3
|
||||
echo 3 > /sys/block/zram0/max_comp_streams
|
||||
|
||||
Note:
|
||||
In order to enable compression backend's multi stream support max_comp_streams
|
||||
must be initially set to desired concurrency level before ZRAM device
|
||||
initialisation. Once the device initialised as a single stream compression
|
||||
backend (max_comp_streams equals to 1), you will see error if you try to change
|
||||
the value of max_comp_streams because single stream compression backend
|
||||
implemented as a special case by lock overhead issue and does not support
|
||||
dynamic max_comp_streams. Only multi stream backend supports dynamic
|
||||
max_comp_streams adjustment.
|
||||
|
||||
3) Select compression algorithm
|
||||
Using comp_algorithm device attribute one can see available and
|
||||
currently selected (shown in square brackets) compression algortithms,
|
||||
change selected compression algorithm (once the device is initialised
|
||||
there is no way to change compression algorithm).
|
||||
|
||||
Examples:
|
||||
#show supported compression algorithms
|
||||
cat /sys/block/zram0/comp_algorithm
|
||||
lzo [lz4]
|
||||
|
||||
#select lzo compression algorithm
|
||||
echo lzo > /sys/block/zram0/comp_algorithm
|
||||
|
||||
4) Set Disksize
|
||||
Set disk size by writing the value to sysfs node 'disksize'.
|
||||
The value can be either in bytes or you can use mem suffixes.
|
||||
Examples:
|
||||
|
@ -33,32 +69,38 @@ Following shows a typical sequence of steps for using zram.
|
|||
echo 512M > /sys/block/zram0/disksize
|
||||
echo 1G > /sys/block/zram0/disksize
|
||||
|
||||
3) Activate:
|
||||
Note:
|
||||
There is little point creating a zram of greater than twice the size of memory
|
||||
since we expect a 2:1 compression ratio. Note that zram uses about 0.1% of the
|
||||
size of the disk when not in use so a huge zram is wasteful.
|
||||
|
||||
5) Activate:
|
||||
mkswap /dev/zram0
|
||||
swapon /dev/zram0
|
||||
|
||||
mkfs.ext4 /dev/zram1
|
||||
mount /dev/zram1 /tmp
|
||||
|
||||
4) Stats:
|
||||
6) Stats:
|
||||
Per-device statistics are exported as various nodes under
|
||||
/sys/block/zram<id>/
|
||||
disksize
|
||||
num_reads
|
||||
num_writes
|
||||
failed_reads
|
||||
failed_writes
|
||||
invalid_io
|
||||
notify_free
|
||||
discard
|
||||
zero_pages
|
||||
orig_data_size
|
||||
compr_data_size
|
||||
mem_used_total
|
||||
|
||||
5) Deactivate:
|
||||
7) Deactivate:
|
||||
swapoff /dev/zram0
|
||||
umount /dev/zram1
|
||||
|
||||
6) Reset:
|
||||
8) Reset:
|
||||
Write any positive value to 'reset' sysfs node
|
||||
echo 1 > /sys/block/zram0/reset
|
||||
echo 1 > /sys/block/zram1/reset
|
||||
|
|
|
@ -24,7 +24,7 @@ Please note that implementation details can be changed.
|
|||
|
||||
a page/swp_entry may be charged (usage += PAGE_SIZE) at
|
||||
|
||||
mem_cgroup_newpage_charge()
|
||||
mem_cgroup_charge_anon()
|
||||
Called at new page fault and Copy-On-Write.
|
||||
|
||||
mem_cgroup_try_charge_swapin()
|
||||
|
@ -32,7 +32,7 @@ Please note that implementation details can be changed.
|
|||
Followed by charge-commit-cancel protocol. (With swap accounting)
|
||||
At commit, a charge recorded in swap_cgroup is removed.
|
||||
|
||||
mem_cgroup_cache_charge()
|
||||
mem_cgroup_charge_file()
|
||||
Called at add_to_page_cache()
|
||||
|
||||
mem_cgroup_cache_charge_swapin()
|
||||
|
|
|
@ -76,15 +76,7 @@ to work with it.
|
|||
limit_fail_at parameter is set to the particular res_counter element
|
||||
where the charging failed.
|
||||
|
||||
d. int res_counter_charge_locked
|
||||
(struct res_counter *rc, unsigned long val, bool force)
|
||||
|
||||
The same as res_counter_charge(), but it must not acquire/release the
|
||||
res_counter->lock internally (it must be called with res_counter->lock
|
||||
held). The force parameter indicates whether we can bypass the limit.
|
||||
|
||||
e. u64 res_counter_uncharge[_locked]
|
||||
(struct res_counter *rc, unsigned long val)
|
||||
d. u64 res_counter_uncharge(struct res_counter *rc, unsigned long val)
|
||||
|
||||
When a resource is released (freed) it should be de-accounted
|
||||
from the resource counter it was accounted to. This is called
|
||||
|
@ -93,7 +85,7 @@ to work with it.
|
|||
|
||||
The _locked routines imply that the res_counter->lock is taken.
|
||||
|
||||
f. u64 res_counter_uncharge_until
|
||||
e. u64 res_counter_uncharge_until
|
||||
(struct res_counter *rc, struct res_counter *top,
|
||||
unsigned long val)
|
||||
|
||||
|
|
|
@ -255,3 +255,37 @@ are sorted out.
|
|||
|
||||
To bypass this disabling, include "clk_ignore_unused" in the bootargs to the
|
||||
kernel.
|
||||
|
||||
Part 7 - Locking
|
||||
|
||||
The common clock framework uses two global locks, the prepare lock and the
|
||||
enable lock.
|
||||
|
||||
The enable lock is a spinlock and is held across calls to the .enable,
|
||||
.disable and .is_enabled operations. Those operations are thus not allowed to
|
||||
sleep, and calls to the clk_enable(), clk_disable() and clk_is_enabled() API
|
||||
functions are allowed in atomic context.
|
||||
|
||||
The prepare lock is a mutex and is held across calls to all other operations.
|
||||
All those operations are allowed to sleep, and calls to the corresponding API
|
||||
functions are not allowed in atomic context.
|
||||
|
||||
This effectively divides operations in two groups from a locking perspective.
|
||||
|
||||
Drivers don't need to manually protect resources shared between the operations
|
||||
of one group, regardless of whether those resources are shared by multiple
|
||||
clocks or not. However, access to resources that are shared between operations
|
||||
of the two groups needs to be protected by the drivers. An example of such a
|
||||
resource would be a register that controls both the clock rate and the clock
|
||||
enable/disable state.
|
||||
|
||||
The clock framework is reentrant, in that a driver is allowed to call clock
|
||||
framework functions from within its implementation of clock operations. This
|
||||
can for instance cause a .set_rate operation of one clock being called from
|
||||
within the .set_rate operation of another clock. This case must be considered
|
||||
in the driver implementations, but the code flow is usually controlled by the
|
||||
driver in that case.
|
||||
|
||||
Note that locking must also be considered when code outside of the common
|
||||
clock framework needs to access resources used by the clock operations. This
|
||||
is considered out of scope of this document.
|
||||
|
|
|
@ -145,7 +145,7 @@ static void cn_test_timer_func(unsigned long __data)
|
|||
|
||||
memcpy(m + 1, data, m->len);
|
||||
|
||||
cn_netlink_send(m, 0, GFP_ATOMIC);
|
||||
cn_netlink_send(m, 0, 0, GFP_ATOMIC);
|
||||
kfree(m);
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,3 @@ values:
|
|||
cpu - number of the affected CPU
|
||||
old - old frequency
|
||||
new - new frequency
|
||||
|
||||
If the cpufreq core detects the frequency has changed while the system
|
||||
was suspended, these notifiers are called with CPUFREQ_RESUMECHANGE as
|
||||
second argument.
|
||||
|
|
|
@ -61,7 +61,13 @@ target_index - See below on the differences.
|
|||
|
||||
And optionally
|
||||
|
||||
cpufreq_driver.exit - A pointer to a per-CPU cleanup function.
|
||||
cpufreq_driver.exit - A pointer to a per-CPU cleanup
|
||||
function called during CPU_POST_DEAD
|
||||
phase of cpu hotplug process.
|
||||
|
||||
cpufreq_driver.stop_cpu - A pointer to a per-CPU stop function
|
||||
called during CPU_DOWN_PREPARE phase of
|
||||
cpu hotplug process.
|
||||
|
||||
cpufreq_driver.resume - A pointer to a per-CPU resume function
|
||||
which is called with interrupts disabled
|
||||
|
|
|
@ -312,12 +312,57 @@ things will happen if a notifier in path sent a BAD notify code.
|
|||
Q: I don't see my action being called for all CPUs already up and running?
|
||||
A: Yes, CPU notifiers are called only when new CPUs are on-lined or offlined.
|
||||
If you need to perform some action for each cpu already in the system, then
|
||||
do this:
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
foobar_cpu_callback(&foobar_cpu_notifier, CPU_UP_PREPARE, i);
|
||||
foobar_cpu_callback(&foobar_cpu_notifier, CPU_ONLINE, i);
|
||||
}
|
||||
|
||||
However, if you want to register a hotplug callback, as well as perform
|
||||
some initialization for CPUs that are already online, then do this:
|
||||
|
||||
Version 1: (Correct)
|
||||
---------
|
||||
|
||||
cpu_notifier_register_begin();
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
foobar_cpu_callback(&foobar_cpu_notifier,
|
||||
CPU_UP_PREPARE, i);
|
||||
foobar_cpu_callback(&foobar_cpu_notifier,
|
||||
CPU_ONLINE, i);
|
||||
}
|
||||
|
||||
/* Note the use of the double underscored version of the API */
|
||||
__register_cpu_notifier(&foobar_cpu_notifier);
|
||||
|
||||
cpu_notifier_register_done();
|
||||
|
||||
Note that the following code is *NOT* the right way to achieve this,
|
||||
because it is prone to an ABBA deadlock between the cpu_add_remove_lock
|
||||
and the cpu_hotplug.lock.
|
||||
|
||||
Version 2: (Wrong!)
|
||||
---------
|
||||
|
||||
get_online_cpus();
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
foobar_cpu_callback(&foobar_cpu_notifier,
|
||||
CPU_UP_PREPARE, i);
|
||||
foobar_cpu_callback(&foobar_cpu_notifier,
|
||||
CPU_ONLINE, i);
|
||||
}
|
||||
|
||||
register_cpu_notifier(&foobar_cpu_notifier);
|
||||
|
||||
put_online_cpus();
|
||||
|
||||
So always use the first version shown above when you want to register
|
||||
callbacks as well as initialize the already online CPUs.
|
||||
|
||||
|
||||
Q: If i would like to develop cpu hotplug support for a new architecture,
|
||||
what do i need at a minimum?
|
||||
A: The following are what is required for CPU hotplug infrastructure to work
|
||||
|
|
|
@ -124,12 +124,11 @@ the default being 204800 sectors (or 100MB).
|
|||
Updating on-disk metadata
|
||||
-------------------------
|
||||
|
||||
On-disk metadata is committed every time a REQ_SYNC or REQ_FUA bio is
|
||||
written. If no such requests are made then commits will occur every
|
||||
second. This means the cache behaves like a physical disk that has a
|
||||
write cache (the same is true of the thin-provisioning target). If
|
||||
power is lost you may lose some recent writes. The metadata should
|
||||
always be consistent in spite of any crash.
|
||||
On-disk metadata is committed every time a FLUSH or FUA bio is written.
|
||||
If no such requests are made then commits will occur every second. This
|
||||
means the cache behaves like a physical disk that has a volatile write
|
||||
cache. If power is lost you may lose some recent writes. The metadata
|
||||
should always be consistent in spite of any crash.
|
||||
|
||||
The 'dirty' state for a cache block changes far too frequently for us
|
||||
to keep updating it on the fly. So we treat it as a hint. In normal
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
Introduction
|
||||
============
|
||||
|
||||
dm-era is a target that behaves similar to the linear target. In
|
||||
addition it keeps track of which blocks were written within a user
|
||||
defined period of time called an 'era'. Each era target instance
|
||||
maintains the current era as a monotonically increasing 32-bit
|
||||
counter.
|
||||
|
||||
Use cases include tracking changed blocks for backup software, and
|
||||
partially invalidating the contents of a cache to restore cache
|
||||
coherency after rolling back a vendor snapshot.
|
||||
|
||||
Constructor
|
||||
===========
|
||||
|
||||
era <metadata dev> <origin dev> <block size>
|
||||
|
||||
metadata dev : fast device holding the persistent metadata
|
||||
origin dev : device holding data blocks that may change
|
||||
block size : block size of origin data device, granularity that is
|
||||
tracked by the target
|
||||
|
||||
Messages
|
||||
========
|
||||
|
||||
None of the dm messages take any arguments.
|
||||
|
||||
checkpoint
|
||||
----------
|
||||
|
||||
Possibly move to a new era. You shouldn't assume the era has
|
||||
incremented. After sending this message, you should check the
|
||||
current era via the status line.
|
||||
|
||||
take_metadata_snap
|
||||
------------------
|
||||
|
||||
Create a clone of the metadata, to allow a userland process to read it.
|
||||
|
||||
drop_metadata_snap
|
||||
------------------
|
||||
|
||||
Drop the metadata snapshot.
|
||||
|
||||
Status
|
||||
======
|
||||
|
||||
<metadata block size> <#used metadata blocks>/<#total metadata blocks>
|
||||
<current era> <held metadata root | '-'>
|
||||
|
||||
metadata block size : Fixed block size for each metadata block in
|
||||
sectors
|
||||
#used metadata blocks : Number of metadata blocks used
|
||||
#total metadata blocks : Total number of metadata blocks
|
||||
current era : The current era
|
||||
held metadata root : The location, in blocks, of the metadata root
|
||||
that has been 'held' for userspace read
|
||||
access. '-' indicates there is no held root
|
||||
|
||||
Detailed use case
|
||||
=================
|
||||
|
||||
The scenario of invalidating a cache when rolling back a vendor
|
||||
snapshot was the primary use case when developing this target:
|
||||
|
||||
Taking a vendor snapshot
|
||||
------------------------
|
||||
|
||||
- Send a checkpoint message to the era target
|
||||
- Make a note of the current era in its status line
|
||||
- Take vendor snapshot (the era and snapshot should be forever
|
||||
associated now).
|
||||
|
||||
Rolling back to an vendor snapshot
|
||||
----------------------------------
|
||||
|
||||
- Cache enters passthrough mode (see: dm-cache's docs in cache.txt)
|
||||
- Rollback vendor storage
|
||||
- Take metadata snapshot
|
||||
- Ascertain which blocks have been written since the snapshot was taken
|
||||
by checking each block's era
|
||||
- Invalidate those blocks in the caching software
|
||||
- Cache returns to writeback/writethrough mode
|
||||
|
||||
Memory usage
|
||||
============
|
||||
|
||||
The target uses a bitset to record writes in the current era. It also
|
||||
has a spare bitset ready for switching over to a new era. Other than
|
||||
that it uses a few 4k blocks for updating metadata.
|
||||
|
||||
(4 * nr_blocks) bytes + buffers
|
||||
|
||||
Resilience
|
||||
==========
|
||||
|
||||
Metadata is updated on disk before a write to a previously unwritten
|
||||
block is performed. As such dm-era should not be effected by a hard
|
||||
crash such as power failure.
|
||||
|
||||
Userland tools
|
||||
==============
|
||||
|
||||
Userland tools are found in the increasingly poorly named
|
||||
thin-provisioning-tools project:
|
||||
|
||||
https://github.com/jthornber/thin-provisioning-tools
|
|
@ -116,6 +116,35 @@ Resuming a device with a new table itself triggers an event so the
|
|||
userspace daemon can use this to detect a situation where a new table
|
||||
already exceeds the threshold.
|
||||
|
||||
A low water mark for the metadata device is maintained in the kernel and
|
||||
will trigger a dm event if free space on the metadata device drops below
|
||||
it.
|
||||
|
||||
Updating on-disk metadata
|
||||
-------------------------
|
||||
|
||||
On-disk metadata is committed every time a FLUSH or FUA bio is written.
|
||||
If no such requests are made then commits will occur every second. This
|
||||
means the thin-provisioning target behaves like a physical disk that has
|
||||
a volatile write cache. If power is lost you may lose some recent
|
||||
writes. The metadata should always be consistent in spite of any crash.
|
||||
|
||||
If data space is exhausted the pool will either error or queue IO
|
||||
according to the configuration (see: error_if_no_space). If metadata
|
||||
space is exhausted or a metadata operation fails: the pool will error IO
|
||||
until the pool is taken offline and repair is performed to 1) fix any
|
||||
potential inconsistencies and 2) clear the flag that imposes repair.
|
||||
Once the pool's metadata device is repaired it may be resized, which
|
||||
will allow the pool to return to normal operation. Note that if a pool
|
||||
is flagged as needing repair, the pool's data and metadata devices
|
||||
cannot be resized until repair is performed. It should also be noted
|
||||
that when the pool's metadata space is exhausted the current metadata
|
||||
transaction is aborted. Given that the pool will cache IO whose
|
||||
completion may have already been acknowledged to upper IO layers
|
||||
(e.g. filesystem) it is strongly suggested that consistency checks
|
||||
(e.g. fsck) be performed on those layers when repair of the pool is
|
||||
required.
|
||||
|
||||
Thin provisioning
|
||||
-----------------
|
||||
|
||||
|
@ -258,10 +287,9 @@ ii) Status
|
|||
should register for the event and then check the target's status.
|
||||
|
||||
held metadata root:
|
||||
The location, in sectors, of the metadata root that has been
|
||||
The location, in blocks, of the metadata root that has been
|
||||
'held' for userspace read access. '-' indicates there is no
|
||||
held root. This feature is not yet implemented so '-' is
|
||||
always returned.
|
||||
held root.
|
||||
|
||||
discard_passdown|no_discard_passdown
|
||||
Whether or not discards are actually being passed down to the
|
||||
|
|
|
@ -353,6 +353,7 @@ Your cooperation is appreciated.
|
|||
133 = /dev/exttrp External device trap
|
||||
134 = /dev/apm_bios Advanced Power Management BIOS
|
||||
135 = /dev/rtc Real Time Clock
|
||||
137 = /dev/vhci Bluetooth virtual HCI driver
|
||||
139 = /dev/openprom SPARC OpenBoot PROM
|
||||
140 = /dev/relay8 Berkshire Products Octal relay card
|
||||
141 = /dev/relay16 Berkshire Products ISO-16 relay card
|
||||
|
@ -410,6 +411,7 @@ Your cooperation is appreciated.
|
|||
194 = /dev/zkshim Zero-Knowledge network shim control
|
||||
195 = /dev/elographics/e2201 Elographics touchscreen E271-2201
|
||||
196 = /dev/vfio/vfio VFIO userspace driver interface
|
||||
197 = /dev/pxa3xx-gcu PXA3xx graphics controller unit driver
|
||||
198 = /dev/sexec Signed executable interface
|
||||
199 = /dev/scanners/cuecat :CueCat barcode scanner
|
||||
200 = /dev/net/tun TAP/TUN network device
|
||||
|
@ -451,6 +453,7 @@ Your cooperation is appreciated.
|
|||
236 = /dev/mapper/control Device-Mapper control device
|
||||
237 = /dev/loop-control Loopback control device
|
||||
238 = /dev/vhost-net Host kernel accelerator for virtio net
|
||||
239 = /dev/uhid User-space I/O driver support for HID subsystem
|
||||
|
||||
240-254 Reserved for local use
|
||||
255 Reserved for MISC_DYNAMIC_MINOR
|
||||
|
@ -1491,10 +1494,17 @@ Your cooperation is appreciated.
|
|||
64 = /dev/radio0 Radio device
|
||||
...
|
||||
127 = /dev/radio63 Radio device
|
||||
128 = /dev/swradio0 Software Defined Radio device
|
||||
...
|
||||
191 = /dev/swradio63 Software Defined Radio device
|
||||
224 = /dev/vbi0 Vertical blank interrupt
|
||||
...
|
||||
255 = /dev/vbi31 Vertical blank interrupt
|
||||
|
||||
Minor numbers are allocated dynamically unless
|
||||
CONFIG_VIDEO_FIXED_MINOR_RANGES (default n)
|
||||
configuration option is set.
|
||||
|
||||
81 block I2O hard disk
|
||||
0 = /dev/i2o/hdq 17th I2O hard disk, whole disk
|
||||
16 = /dev/i2o/hdr 18th I2O hard disk, whole disk
|
||||
|
|
|
@ -19,6 +19,9 @@ to deliver its interrupts via SPIs.
|
|||
|
||||
- clock-frequency : The frequency of the main counter, in Hz. Optional.
|
||||
|
||||
- always-on : a boolean property. If present, the timer is powered through an
|
||||
always-on power domain, therefore it never loses context.
|
||||
|
||||
Example:
|
||||
|
||||
timer {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Marvell Armada 370 and Armada XP Interrupt Controller
|
||||
Marvell Armada 370, 375, 38x, XP Interrupt Controller
|
||||
-----------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
|
@ -16,7 +16,13 @@ Required properties:
|
|||
automatically map to the interrupt controller registers of the
|
||||
current CPU)
|
||||
|
||||
Optional properties:
|
||||
|
||||
- interrupts: If defined, then it indicates that this MPIC is
|
||||
connected as a slave to another interrupt controller. This is
|
||||
typically the case on Armada 375 and Armada 38x, where the MPIC is
|
||||
connected as a slave to the Cortex-A9 GIC. The provided interrupt
|
||||
indicate to which GIC interrupt the MPIC output is connected.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
Marvell Armada 375 Platforms Device Tree Bindings
|
||||
-------------------------------------------------
|
||||
|
||||
Boards with a SoC of the Marvell Armada 375 family shall have the
|
||||
following property:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible: must contain "marvell,armada375"
|
|
@ -0,0 +1,10 @@
|
|||
Marvell Armada 38x Platforms Device Tree Bindings
|
||||
-------------------------------------------------
|
||||
|
||||
Boards with a SoC of the Marvell Armada 38x family shall have the
|
||||
following property:
|
||||
|
||||
Required root node property:
|
||||
|
||||
- compatible: must contain either "marvell,armada380" or
|
||||
"marvell,armada385" depending on the variant of the SoC being used.
|
|
@ -0,0 +1,15 @@
|
|||
Broadcom BCM21664 device tree bindings
|
||||
--------------------------------------
|
||||
|
||||
This document describes the device tree bindings for boards with the BCM21664
|
||||
SoC.
|
||||
|
||||
Required root node property:
|
||||
- compatible: brcm,bcm21664
|
||||
|
||||
Example:
|
||||
/ {
|
||||
model = "BCM21664 SoC";
|
||||
compatible = "brcm,bcm21664";
|
||||
[...]
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
Broadcom Kona Family Reset Manager
|
||||
----------------------------------
|
||||
|
||||
The reset manager is used on the Broadcom BCM21664 SoC.
|
||||
|
||||
Required properties:
|
||||
- compatible: brcm,bcm21664-resetmgr
|
||||
- reg: memory address & range
|
||||
|
||||
Example:
|
||||
brcm,resetmgr@35001f00 {
|
||||
compatible = "brcm,bcm21664-resetmgr";
|
||||
reg = <0x35001f00 0x24>;
|
||||
};
|
|
@ -0,0 +1,8 @@
|
|||
Broadcom BCM4708 device tree bindings
|
||||
-------------------------------------------
|
||||
|
||||
Boards with the BCM4708 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "brcm,bcm4708";
|
|
@ -180,7 +180,11 @@ nodes to be present and contain the properties described below.
|
|||
be one of:
|
||||
"spin-table"
|
||||
"psci"
|
||||
# On ARM 32-bit systems this property is optional.
|
||||
# On ARM 32-bit systems this property is optional and
|
||||
can be one of:
|
||||
"qcom,gcc-msm8660"
|
||||
"qcom,kpss-acc-v1"
|
||||
"qcom,kpss-acc-v2"
|
||||
|
||||
- cpu-release-addr
|
||||
Usage: required for systems that have an "enable-method"
|
||||
|
@ -191,6 +195,21 @@ nodes to be present and contain the properties described below.
|
|||
property identifying a 64-bit zero-initialised
|
||||
memory location.
|
||||
|
||||
- qcom,saw
|
||||
Usage: required for systems that have an "enable-method"
|
||||
property value of "qcom,kpss-acc-v1" or
|
||||
"qcom,kpss-acc-v2"
|
||||
Value type: <phandle>
|
||||
Definition: Specifies the SAW[1] node associated with this CPU.
|
||||
|
||||
- qcom,acc
|
||||
Usage: required for systems that have an "enable-method"
|
||||
property value of "qcom,kpss-acc-v1" or
|
||||
"qcom,kpss-acc-v2"
|
||||
Value type: <phandle>
|
||||
Definition: Specifies the ACC[2] node associated with this CPU.
|
||||
|
||||
|
||||
Example 1 (dual-cluster big.LITTLE system 32-bit):
|
||||
|
||||
cpus {
|
||||
|
@ -382,3 +401,7 @@ cpus {
|
|||
cpu-release-addr = <0 0x20000000>;
|
||||
};
|
||||
};
|
||||
|
||||
--
|
||||
[1] arm/msm/qcom,saw2.txt
|
||||
[2] arm/msm/qcom,kpss-acc.txt
|
||||
|
|
|
@ -50,6 +50,11 @@ Optional
|
|||
regions, used when the GIC doesn't have banked registers. The offset is
|
||||
cpu-offset * cpu-nr.
|
||||
|
||||
- arm,routable-irqs : Total number of gic irq inputs which are not directly
|
||||
connected from the peripherals, but are routed dynamically
|
||||
by a crossbar/multiplexer preceding the GIC. The GIC irq
|
||||
input line is assigned dynamically when the corresponding
|
||||
peripheral's crossbar line is mapped.
|
||||
Example:
|
||||
|
||||
intc: interrupt-controller@fff11000 {
|
||||
|
@ -57,6 +62,7 @@ Example:
|
|||
#interrupt-cells = <3>;
|
||||
#address-cells = <1>;
|
||||
interrupt-controller;
|
||||
arm,routable-irqs = <160>;
|
||||
reg = <0xfff11000 0x1000>,
|
||||
<0xfff10100 0x100>;
|
||||
};
|
||||
|
|
|
@ -30,3 +30,17 @@ Example:
|
|||
resume-offset = <0x308>;
|
||||
reboot-offset = <0x4>;
|
||||
};
|
||||
|
||||
PCTRL: Peripheral misc control register
|
||||
|
||||
Required Properties:
|
||||
- compatible: "hisilicon,pctrl"
|
||||
- reg: Address and size of pctrl.
|
||||
|
||||
Example:
|
||||
|
||||
/* for Hi3620 */
|
||||
pctrl: pctrl@fca09000 {
|
||||
compatible = "hisilicon,pctrl";
|
||||
reg = <0xfca09000 0x1000>;
|
||||
};
|
||||
|
|
|
@ -8,3 +8,13 @@ Required properties:
|
|||
- compatible: All TI specific devices present in Keystone SOC should be in
|
||||
the form "ti,keystone-*". Generic devices like gic, arch_timers, ns16550
|
||||
type UART should use the specified compatible for those devices.
|
||||
|
||||
Boards:
|
||||
- Keystone 2 Hawking/Kepler EVM
|
||||
compatible = "ti,k2hk-evm","ti,keystone"
|
||||
|
||||
- Keystone 2 Lamarr EVM
|
||||
compatible = "ti,k2l-evm","ti,keystone"
|
||||
|
||||
- Keystone 2 Edison EVM
|
||||
compatible = "ti,k2e-evm","ti,keystone"
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
Marvell Dove Platforms Device Tree Bindings
|
||||
-----------------------------------------------
|
||||
|
||||
Boards with a Marvell Dove SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
- compatible: must contain "marvell,dove";
|
||||
|
||||
* Global Configuration registers
|
||||
|
||||
Global Configuration registers of Dove SoC are shared by a syscon node.
|
||||
|
||||
Required properties:
|
||||
- compatible: must contain "marvell,dove-global-config" and "syscon".
|
||||
- reg: base address and size of the Global Configuration registers.
|
||||
|
||||
Example:
|
||||
|
||||
gconf: global-config@e802c {
|
||||
compatible = "marvell,dove-global-config", "syscon";
|
||||
reg = <0xe802c 0x14>;
|
||||
};
|
|
@ -0,0 +1,97 @@
|
|||
Marvell Kirkwood SoC Family Device Tree Bindings
|
||||
------------------------------------------------
|
||||
|
||||
Boards with a SoC of the Marvell Kirkwook family, eg 88f6281
|
||||
|
||||
* Required root node properties:
|
||||
compatible: must contain "marvell,kirkwood"
|
||||
|
||||
In addition, the above compatible shall be extended with the specific
|
||||
SoC. Currently known SoC compatibles are:
|
||||
|
||||
"marvell,kirkwood-88f6192"
|
||||
"marvell,kirkwood-88f6281"
|
||||
"marvell,kirkwood-88f6282"
|
||||
"marvell,kirkwood-88f6283"
|
||||
"marvell,kirkwood-88f6702"
|
||||
"marvell,kirkwood-98DX4122"
|
||||
|
||||
And in addition, the compatible shall be extended with the specific
|
||||
board. Currently known boards are:
|
||||
|
||||
"buffalo,lschlv2"
|
||||
"buffalo,lsxhl"
|
||||
"buffalo,lsxl"
|
||||
"dlink,dns-320"
|
||||
"dlink,dns-320-a1"
|
||||
"dlink,dns-325"
|
||||
"dlink,dns-325-a1"
|
||||
"dlink,dns-kirkwood"
|
||||
"excito,b3"
|
||||
"globalscale,dreamplug-003-ds2001"
|
||||
"globalscale,guruplug"
|
||||
"globalscale,guruplug-server-plus"
|
||||
"globalscale,sheevaplug"
|
||||
"globalscale,sheevaplug"
|
||||
"globalscale,sheevaplug-esata"
|
||||
"globalscale,sheevaplug-esata-rev13"
|
||||
"iom,iconnect"
|
||||
"iom,iconnect-1.1"
|
||||
"iom,ix2-200"
|
||||
"keymile,km_kirkwood"
|
||||
"lacie,cloudbox"
|
||||
"lacie,inetspace_v2"
|
||||
"lacie,laplug"
|
||||
"lacie,netspace_lite_v2"
|
||||
"lacie,netspace_max_v2"
|
||||
"lacie,netspace_mini_v2"
|
||||
"lacie,netspace_v2"
|
||||
"marvell,db-88f6281-bp"
|
||||
"marvell,db-88f6282-bp"
|
||||
"marvell,mv88f6281gtw-ge"
|
||||
"marvell,rd88f6281"
|
||||
"marvell,rd88f6281"
|
||||
"marvell,rd88f6281-a0"
|
||||
"marvell,rd88f6281-a1"
|
||||
"mpl,cec4"
|
||||
"mpl,cec4-10"
|
||||
"netgear,readynas"
|
||||
"netgear,readynas"
|
||||
"netgear,readynas-duo-v2"
|
||||
"netgear,readynas-nv+-v2"
|
||||
"plathome,openblocks-a6"
|
||||
"plathome,openblocks-a7"
|
||||
"raidsonic,ib-nas6210"
|
||||
"raidsonic,ib-nas6210-b"
|
||||
"raidsonic,ib-nas6220"
|
||||
"raidsonic,ib-nas6220-b"
|
||||
"raidsonic,ib-nas62x0"
|
||||
"seagate,dockstar"
|
||||
"seagate,goflexnet"
|
||||
"synology,ds109"
|
||||
"synology,ds110jv10"
|
||||
"synology,ds110jv20"
|
||||
"synology,ds110jv30"
|
||||
"synology,ds111"
|
||||
"synology,ds209"
|
||||
"synology,ds210jv10"
|
||||
"synology,ds210jv20"
|
||||
"synology,ds212"
|
||||
"synology,ds212jv10"
|
||||
"synology,ds212jv20"
|
||||
"synology,ds212pv10"
|
||||
"synology,ds409"
|
||||
"synology,ds409slim"
|
||||
"synology,ds410j"
|
||||
"synology,ds411"
|
||||
"synology,ds411j"
|
||||
"synology,ds411slim"
|
||||
"synology,ds413jv10"
|
||||
"synology,rs212"
|
||||
"synology,rs409"
|
||||
"synology,rs411"
|
||||
"synology,rs812"
|
||||
"usi,topkick"
|
||||
"usi,topkick-1281P2"
|
||||
"zyxel,nsa310"
|
||||
"zyxel,nsa310a"
|
|
@ -0,0 +1,16 @@
|
|||
* Marvell Feroceon Cache
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be either "marvell,feroceon-cache" or
|
||||
"marvell,kirkwood-cache".
|
||||
|
||||
Optional properties:
|
||||
- reg : Address of the L2 cache control register. Mandatory for
|
||||
"marvell,kirkwood-cache", not used by "marvell,feroceon-cache"
|
||||
|
||||
|
||||
Example:
|
||||
l2: l2-cache@20128 {
|
||||
compatible = "marvell,kirkwood-cache";
|
||||
reg = <0x20128 0x4>;
|
||||
};
|
|
@ -0,0 +1,30 @@
|
|||
Krait Processor Sub-system (KPSS) Application Clock Controller (ACC)
|
||||
|
||||
The KPSS ACC provides clock, power domain, and reset control to a Krait CPU.
|
||||
There is one ACC register region per CPU within the KPSS remapped region as
|
||||
well as an alias register region that remaps accesses to the ACC associated
|
||||
with the CPU accessing the region.
|
||||
|
||||
PROPERTIES
|
||||
|
||||
- compatible:
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: should be one of:
|
||||
"qcom,kpss-acc-v1"
|
||||
"qcom,kpss-acc-v2"
|
||||
|
||||
- reg:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: the first element specifies the base address and size of
|
||||
the register region. An optional second element specifies
|
||||
the base address and size of the alias register region.
|
||||
|
||||
Example:
|
||||
|
||||
clock-controller@2088000 {
|
||||
compatible = "qcom,kpss-acc-v2";
|
||||
reg = <0x02088000 0x1000>,
|
||||
<0x02008000 0x1000>;
|
||||
};
|
|
@ -0,0 +1,35 @@
|
|||
SPM AVS Wrapper 2 (SAW2)
|
||||
|
||||
The SAW2 is a wrapper around the Subsystem Power Manager (SPM) and the
|
||||
Adaptive Voltage Scaling (AVS) hardware. The SPM is a programmable
|
||||
micro-controller that transitions a piece of hardware (like a processor or
|
||||
subsystem) into and out of low power modes via a direct connection to
|
||||
the PMIC. It can also be wired up to interact with other processors in the
|
||||
system, notifying them when a low power state is entered or exited.
|
||||
|
||||
PROPERTIES
|
||||
|
||||
- compatible:
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: shall contain "qcom,saw2". A more specific value should be
|
||||
one of:
|
||||
"qcom,saw2-v1"
|
||||
"qcom,saw2-v1.1"
|
||||
"qcom,saw2-v2"
|
||||
"qcom,saw2-v2.1"
|
||||
|
||||
- reg:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: the first element specifies the base address and size of
|
||||
the register region. An optional second element specifies
|
||||
the base address and size of the alias register region.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
regulator@2099000 {
|
||||
compatible = "qcom,saw2";
|
||||
reg = <0x02099000 0x1000>, <0x02009000 0x1000>;
|
||||
};
|
|
@ -1,12 +1,13 @@
|
|||
MVEBU System Controller
|
||||
-----------------------
|
||||
MVEBU (Marvell SOCs: Armada 370/XP, Dove, mv78xx0, Kirkwood, Orion5x)
|
||||
MVEBU (Marvell SOCs: Armada 370/375/XP, Dove, mv78xx0, Kirkwood, Orion5x)
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: one of:
|
||||
- "marvell,orion-system-controller"
|
||||
- "marvell,armada-370-xp-system-controller"
|
||||
- "marvell,armada-375-system-controller"
|
||||
- reg: Should contain system controller registers location and length.
|
||||
|
||||
Example:
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
Some socs have a large number of interrupts requests to service
|
||||
the needs of its many peripherals and subsystems. All of the
|
||||
interrupt lines from the subsystems are not needed at the same
|
||||
time, so they have to be muxed to the irq-controller appropriately.
|
||||
In such places a interrupt controllers are preceded by an CROSSBAR
|
||||
that provides flexibility in muxing the device requests to the controller
|
||||
inputs.
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "ti,irq-crossbar"
|
||||
- reg: Base address and the size of the crossbar registers.
|
||||
- ti,max-irqs: Total number of irqs available at the interrupt controller.
|
||||
- ti,reg-size: Size of a individual register in bytes. Every individual
|
||||
register is assumed to be of same size. Valid sizes are 1, 2, 4.
|
||||
- ti,irqs-reserved: List of the reserved irq lines that are not muxed using
|
||||
crossbar. These interrupt lines are reserved in the soc,
|
||||
so crossbar bar driver should not consider them as free
|
||||
lines.
|
||||
|
||||
Examples:
|
||||
crossbar_mpu: @4a020000 {
|
||||
compatible = "ti,irq-crossbar";
|
||||
reg = <0x4a002a48 0x130>;
|
||||
ti,max-irqs = <160>;
|
||||
ti,reg-size = <2>;
|
||||
ti,irqs-reserved = <0 1 2 3 5 6 131 132 139 140>;
|
||||
};
|
|
@ -0,0 +1,22 @@
|
|||
OMAP Dynamic Memory Manager (DMM) bindings
|
||||
|
||||
The dynamic memory manager (DMM) is a module located immediately in front of the
|
||||
SDRAM controllers (called EMIFs on OMAP). DMM manages various aspects of memory
|
||||
accesses such as priority generation amongst initiators, configuration of SDRAM
|
||||
interleaving, optimizing transfer of 2D block objects, and provide MMU-like page
|
||||
translation for initiators which need contiguous dma bus addresses.
|
||||
|
||||
Required properties:
|
||||
- compatible: Should contain "ti,omap4-dmm" for OMAP4 family
|
||||
Should contain "ti,omap5-dmm" for OMAP5 and DRA7x family
|
||||
- reg: Contains DMM register address range (base address and length)
|
||||
- interrupts: Should contain an interrupt-specifier for DMM_IRQ.
|
||||
- ti,hwmods: Name of the hwmod associated to DMM, which is typically "dmm"
|
||||
|
||||
Example:
|
||||
|
||||
dmm@4e000000 {
|
||||
compatible = "ti,omap4-dmm";
|
||||
reg = <0x4e000000 0x800>;
|
||||
ti,hwmods = "dmm";
|
||||
};
|
|
@ -99,6 +99,9 @@ Boards:
|
|||
- OMAP4 PandaBoard : Low cost community board
|
||||
compatible = "ti,omap4-panda", "ti,omap4430"
|
||||
|
||||
- OMAP4 DuoVero with Parlor : Commercial expansion board with daughter board
|
||||
compatible = "gumstix,omap4-duovero-parlor", "gumstix,omap4-duovero", "ti,omap4430", "ti,omap4";
|
||||
|
||||
- OMAP3 EVM : Software Development Board for OMAP35x, AM/DM37x
|
||||
compatible = "ti,omap3-evm", "ti,omap3"
|
||||
|
||||
|
@ -114,5 +117,8 @@ Boards:
|
|||
- AM43x EPOS EVM
|
||||
compatible = "ti,am43x-epos-evm", "ti,am4372", "ti,am43"
|
||||
|
||||
- AM437x GP EVM
|
||||
compatible = "ti,am437x-gp-evm", "ti,am4372", "ti,am43"
|
||||
|
||||
- DRA7 EVM: Software Developement Board for DRA7XX
|
||||
compatible = "ti,dra7-evm", "ti,dra7"
|
||||
|
|
|
@ -9,6 +9,7 @@ Required properties:
|
|||
- compatible : should be one of
|
||||
"arm,armv8-pmuv3"
|
||||
"arm,cortex-a15-pmu"
|
||||
"arm,cortex-a12-pmu"
|
||||
"arm,cortex-a9-pmu"
|
||||
"arm,cortex-a8-pmu"
|
||||
"arm,cortex-a7-pmu"
|
||||
|
@ -16,7 +17,14 @@ Required properties:
|
|||
"arm,arm11mpcore-pmu"
|
||||
"arm,arm1176-pmu"
|
||||
"arm,arm1136-pmu"
|
||||
- interrupts : 1 combined interrupt or 1 per core.
|
||||
"qcom,krait-pmu"
|
||||
- interrupts : 1 combined interrupt or 1 per core. If the interrupt is a per-cpu
|
||||
interrupt (PPI) then 1 interrupt should be specified.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- qcom,no-pc-write : Indicates that this PMU doesn't support the 0xc and 0xd
|
||||
events.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
Rockchip power-management-unit:
|
||||
-------------------------------
|
||||
|
||||
The pmu is used to turn off and on different power domains of the SoCs
|
||||
This includes the power to the CPU cores.
|
||||
|
||||
Required node properties:
|
||||
- compatible value : = "rockchip,rk3066-pmu";
|
||||
- reg : physical base address and the size of the registers window
|
||||
|
||||
Example:
|
||||
|
||||
pmu@20004000 {
|
||||
compatible = "rockchip,rk3066-pmu";
|
||||
reg = <0x20004000 0x100>;
|
||||
};
|
|
@ -0,0 +1,30 @@
|
|||
Rockchip SRAM for smp bringup:
|
||||
------------------------------
|
||||
|
||||
Rockchip's smp-capable SoCs use the first part of the sram for the bringup
|
||||
of the cores. Once the core gets powered up it executes the code that is
|
||||
residing at the very beginning of the sram.
|
||||
|
||||
Therefore a reserved section sub-node has to be added to the mmio-sram
|
||||
declaration.
|
||||
|
||||
Required sub-node properties:
|
||||
- compatible : should be "rockchip,rk3066-smp-sram"
|
||||
|
||||
The rest of the properties should follow the generic mmio-sram discription
|
||||
found in ../../misc/sram.txt
|
||||
|
||||
Example:
|
||||
|
||||
sram: sram@10080000 {
|
||||
compatible = "mmio-sram";
|
||||
reg = <0x10080000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
smp-sram@10080000 {
|
||||
compatible = "rockchip,rk3066-smp-sram";
|
||||
reg = <0x10080000 0x50>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,15 @@
|
|||
SAMSUNG Exynos SoC series PMU Registers
|
||||
|
||||
Properties:
|
||||
- compatible : should contain two values. First value must be one from following list:
|
||||
- "samsung,exynos5250-pmu" - for Exynos5250 SoC,
|
||||
- "samsung,exynos5420-pmu" - for Exynos5420 SoC.
|
||||
second value must be always "syscon".
|
||||
|
||||
- reg : offset and length of the register set.
|
||||
|
||||
Example :
|
||||
pmu_system_controller: system-controller@10040000 {
|
||||
compatible = "samsung,exynos5250-pmu", "syscon";
|
||||
reg = <0x10040000 0x5000>;
|
||||
};
|
|
@ -75,9 +75,10 @@ The cpu-map node can only contain three types of child nodes:
|
|||
|
||||
whose bindings are described in paragraph 3.
|
||||
|
||||
The nodes describing the CPU topology (cluster/core/thread) can only be
|
||||
defined within the cpu-map node.
|
||||
Any other configuration is consider invalid and therefore must be ignored.
|
||||
The nodes describing the CPU topology (cluster/core/thread) can only
|
||||
be defined within the cpu-map node and every core/thread in the system
|
||||
must be defined within the topology. Any other configuration is
|
||||
invalid and therefore must be ignored.
|
||||
|
||||
===========================================
|
||||
2.1 - cpu-map child nodes naming convention
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче