The Linux Kernel
  • The Linux kernel user’s and administrator’s guide
    • Linux kernel release 4.x <http://kernel.org/>
      • What is Linux?
      • On what hardware does it run?
      • Documentation
      • Installing the kernel source
      • Software requirements
      • Build directory for the kernel
      • Configuring the kernel
      • Compiling the kernel
      • If something goes wrong
    • The kernel’s command-line parameters
      • cpu lists:
      • Todo
    • Linux allocated devices (4.x+ version)
      • Additional /dev/ directory entries
        • Compulsory links
        • Recommended links
        • Locally defined links
        • Sockets and pipes
        • Mount points
      • Terminal devices
        • Virtual consoles and the console device
        • Serial ports
        • Pseudoterminals (PTYs)
    • Reporting bugs
      • Background
      • How to report Linux kernel bugs
        • Identify the problematic subsystem
        • Identify who to notify
        • Tips for reporting bugs
        • Gather information
      • Follow up
        • Expectations for bug reporters
        • Expectations for kernel maintainers
    • Security bugs
      • Contact
      • Disclosure
      • Non-disclosure agreements
    • Bug hunting
      • Where is the Oops message is located?
      • Finding the bug’s location
        • gdb
        • objdump
      • Reporting the bug
      • Fixing the bug
      • Notes on Oops tracing with klogd
    • Bisecting a bug
      • Introduction
      • Devices not appearing
      • Finding patch that caused a bug
    • Tainted kernels
    • Ramoops oops/panic logger
      • Introduction
      • Ramoops concepts
      • Setting the parameters
      • Dump format
      • Reading the data
      • Persistent function tracing
    • Dynamic debug
      • Introduction
      • Controlling dynamic debug Behaviour
      • Viewing Dynamic Debug Behaviour
      • Command Language Reference
      • Debug messages during Boot Process
      • Debug Messages at Module Initialization Time
      • Examples
    • Explaining the dreaded “No init found.” boot hang message
    • Rules on how to access information in sysfs
    • Using the initial RAM disk (initrd)
      • Operation
      • Boot command-line options
      • Compressed cpio images
      • Installation
      • Changing the root device
      • Usage scenarios
      • Obsolete root change mechanism
      • Mixed change_root and pivot_root mechanism
      • Resources
    • Linux Serial Console
    • Linux Braille Console
    • Parport
      • Parport as modules
        • modprobe
        • Parport probe [optional]
      • Parport linked into the kernel statically
      • Files in /proc
      • Device drivers
      • Reporting printer problems with parport
    • RAID arrays
      • Boot time assembly of RAID arrays
        • md device no.
        • raid level
        • chunk size factor
        • fault level
        • dev0 to devn
      • Boot time autodetection of RAID arrays
      • Boot time assembly of degraded/dirty arrays
      • Superblock formats
      • General Rules - apply for all superblock formats
      • Specific Rules that apply to format-0 super block arrays, and arrays with no superblock (non-persistent)
      • MD devices in sysfs
    • Kernel module signing facility
      • Overview
      • Configuring module signing
      • Generating signing keys
      • Public keys in the kernel
      • Manually signing modules
      • Signed modules and stripping
      • Loading signed modules
      • Non-valid signatures and unsigned modules
      • Administering/protecting the private key
    • Linux Magic System Request Key Hacks
      • What is the magic SysRq key?
      • How do I enable the magic SysRq key?
      • How do I use the magic SysRq key?
      • What are the ‘command’ keys?
      • Okay, so what can I use them for?
      • Sometimes SysRq seems to get ‘stuck’ after using it, what can I do?
      • I hit SysRq, but nothing seems to happen, what’s wrong?
      • I want to add SysRQ key events to a module, how does it work?
      • When I hit a SysRq key combination only the header appears on the console?
      • I have more questions, who can I ask?
      • Credits
    • Unicode support
      • Introduction
      • Actual characters assigned in the Linux Zone
      • Klingon language support
      • Other Fictional and Artificial Scripts
    • Software cursor for VGA
      • Examples
    • Kernel Support for miscellaneous (your favourite) Binary Formats v1.1
      • Hints
    • Mono(tm) Binary Kernel Support for Linux
    • Java(tm) Binary Kernel Support for Linux v1.03
    • Reliability, Availability and Serviceability
      • RAS concepts
        • Improving RAS
        • Types of errors
        • Identifying a bad hardware component
        • ECC memory
      • EDAC - Error Detection And Correction
        • Purpose
        • Memory
        • Other hardware elements
        • PCI bus scanning
        • Versioning
        • Loading
        • Sysfs interface
        • Memory Controller (mc) Model
        • mcX directories
        • dimmX or rankX directories
        • csrowX directories
        • System Logging
        • PCI Bus Parity Detection
        • Sysfs configuration
        • Module parameters
        • EDAC device type
        • Instances
        • Blocks
        • Usage of EDAC APIs on Nehalem and newer Intel CPUs
        • Reference documents used on amd64_edac
  • Working with the kernel development community
    • HOWTO do Linux kernel development
      • Introduction
      • Legal Issues
      • Documentation
      • Becoming A Kernel Developer
      • The development process
        • 4.x kernel tree
        • 4.x.y -stable kernel tree
        • 4.x -git patches
        • Subsystem Specific kernel trees and patches
        • 4.x -next kernel tree for integration tests
      • Bug Reporting
      • Managing bug reports
      • Mailing lists
      • Working with the community
      • Differences between the kernel community and corporate structures
      • Break up your changes
      • Justify your change
      • Document your change
    • Code of Conflict
    • A guide to the Kernel Development Process
      • 1. Introduction
        • 1.1. Executive summary
        • 1.2. What this document is about
        • 1.3. Credits
        • 1.4. The importance of getting code into the mainline
        • 1.5. Licensing
      • 2. How the development process works
        • 2.1. The big picture
        • 2.2. The lifecycle of a patch
        • 2.3. How patches get into the Kernel
        • 2.4. Next trees
        • 2.5. Staging trees
        • 2.6. Tools
        • 2.7. Mailing lists
        • 2.8. Getting started with Kernel development
      • 3. Early-stage planning
        • 3.1. Specifying the problem
        • 3.2. Early discussion
        • 3.3. Who do you talk to?
        • 3.4. When to post?
        • 3.5. Getting official buy-in
      • 4. Getting the code right
        • 4.1. Pitfalls
        • 4.2. Code checking tools
        • 4.3. Documentation
        • 4.4. Internal API changes
      • 5. Posting patches
        • 5.1. When to post
        • 5.2. Before creating patches
        • 5.3. Patch preparation
        • 5.4. Patch formatting and changelogs
        • 5.5. Sending the patch
      • 6. Followthrough
        • 6.1. Working with reviewers
        • 6.2. What happens next
        • 6.3. Other things that can happen
      • 7. Advanced topics
        • 7.1. Managing patches with git
        • 7.2. Reviewing patches
      • 8. For more information
      • 9. Conclusion
    • Submitting patches: the essential guide to getting your code into the kernel
      • 0) Obtain a current source tree
      • 1) diff -up
      • 2) Describe your changes
      • 3) Separate your changes
      • 4) Style-check your changes
      • 5) Select the recipients for your patch
      • 6) No MIME, no links, no compression, no attachments. Just plain text
      • 7) E-mail size
      • 8) Respond to review comments
      • 9) Don’t get discouraged - or impatient
      • 10) Include PATCH in the subject
      • 11) Sign your work — the Developer’s Certificate of Origin
        • Developer’s Certificate of Origin 1.1
      • 12) When to use Acked-by: and Cc:
      • 13) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes:
        • Reviewer’s statement of oversight
      • 14) The canonical patch format
      • 15) Explicit In-Reply-To headers
      • 16) Sending git pull requests
      • References
    • Linux kernel coding style
      • 1) Indentation
      • 2) Breaking long lines and strings
      • 3) Placing Braces and Spaces
        • 3.1) Spaces
      • 4) Naming
      • 5) Typedefs
      • 6) Functions
      • 7) Centralized exiting of functions
      • 8) Commenting
      • 9) You’ve made a mess of it
      • 10) Kconfig configuration files
      • 11) Data structures
      • 12) Macros, Enums and RTL
      • 13) Printing kernel messages
      • 14) Allocating memory
      • 15) The inline disease
      • 16) Function return values and names
      • 17) Don’t re-invent the kernel macros
      • 18) Editor modelines and other cruft
      • 19) Inline assembly
      • 20) Conditional Compilation
      • Appendix I) References
    • Email clients info for Linux
      • Git
      • General Preferences
      • Some email client (MUA) hints
        • Alpine (TUI)
        • Claws Mail (GUI)
        • Evolution (GUI)
        • Kmail (GUI)
        • Lotus Notes (GUI)
        • Mutt (TUI)
        • Pine (TUI)
        • Sylpheed (GUI)
        • Thunderbird (GUI)
        • TkRat (GUI)
        • Gmail (Web GUI)
    • Minimal requirements to compile the Kernel
      • Intro
        • Current Minimal Requirements
        • Kernel compilation
        • System utilities
        • Networking
        • Kernel documentation
      • Getting updated software
        • Kernel compilation
        • System utilities
        • Networking
        • Kernel documentation
    • Submitting Drivers For The Linux Kernel
      • Allocating Device Numbers
      • Who To Submit Drivers To
      • What Criteria Determine Acceptance
      • What Criteria Do Not Determine Acceptance
      • Resources
    • The Linux Kernel Driver Interface
      • Executive Summary
      • Intro
      • Binary Kernel Interface
      • Stable Kernel Source Interfaces
      • What to do
    • Linux kernel management style
      • 1) Decisions
      • 2) People
      • 3) People II - the Good Kind
      • 4) Placing blame
      • 5) Things to avoid
      • 6) Why me?
    • Everything you ever wanted to know about Linux -stable releases
      • Procedure for submitting patches to the -stable tree
      • For all other submissions, choose one of the following procedures
        • Option 1
        • Option 2
        • Option 3
      • Review cycle
      • Trees
      • Review committee
    • Linux Kernel patch submission checklist
    • Index of Documentation for People Interested in Writing and/or Understanding the Linux Kernel
      • Docs at the Linux Kernel tree
      • On-line docs
      • Published books
      • Miscellaneous
    • Applying Patches To The Linux Kernel
      • What is a patch?
      • How do I apply or revert a patch?
      • How do I feed a patch/diff file to patch?
      • Common errors when patching
      • Are there any alternatives to patch?
      • Where can I download the patches?
      • The 4.x kernels
      • The 4.x.y kernels
      • The -rc kernels
      • The -git kernels
      • The -mm patches and the linux-next tree
    • Adding a New System Call
      • System Call Alternatives
      • Designing the API: Planning for Extension
      • Designing the API: Other Considerations
      • Proposing the API
      • Generic System Call Implementation
      • x86 System Call Implementation
      • Compatibility System Calls (Generic)
      • Compatibility System Calls (x86)
      • System Calls Returning Elsewhere
      • Other Details
      • Testing
      • Man Page
      • References and Sources
    • Linux magic numbers
    • Why the “volatile” type class should not be used
      • References
      • Credits
  • Development tools for the kernel
    • Coccinelle
      • Getting Coccinelle
      • Supplemental documentation
      • Using Coccinelle on the Linux kernel
        • Examples
      • Coccinelle parallelization
      • Using Coccinelle with a single semantic patch
      • Controlling Which Files are Processed by Coccinelle
      • Debugging Coccinelle SmPL patches
      • .cocciconfig support
      • Additional flags
      • SmPL patch specific options
      • SmPL patch Coccinelle requirements
      • Proposing new semantic patches
      • Detailed description of the report mode
        • Example
      • Detailed description of the patch mode
        • Example
      • Detailed description of the context mode
        • Example
      • Detailed description of the org mode
        • Example
    • Sparse
      • Using sparse for typechecking
      • Using sparse for lock checking
      • Getting sparse
      • Using sparse
        • Checking RCU annotations
    • kcov: code coverage for fuzzing
      • Usage
    • Using gcov with the Linux kernel
      • Preparation
      • Customization
      • Files
      • Modules
      • Separated build and test machines
      • Troubleshooting
      • Appendix A: gather_on_build.sh
      • Appendix B: gather_on_test.sh
    • The Kernel Address Sanitizer (KASAN)
      • Overview
      • Usage
        • Error reports
      • Implementation details
    • The Undefined Behavior Sanitizer - UBSAN
      • Report example
      • Usage
      • References
    • Kernel Memory Leak Detector
      • Usage
      • Basic Algorithm
      • Testing specific sections with kmemleak
      • Freeing kmemleak internal objects
      • Kmemleak API
      • Dealing with false positives/negatives
      • Limitations and Drawbacks
    • Getting started with kmemcheck
      • Introduction
      • Downloading
      • Configuring and compiling
      • How to use
        • Booting
        • Run-time enable/disable
        • Debugging
        • Annotating false positives
      • Reporting errors
      • Technical description
    • Debugging kernel and modules via gdb
      • Requirements
      • Setup
      • Examples of using the Linux-provided gdb helpers
      • List of commands and functions
  • How to write kernel documentation
    • Introduction
    • Sphinx Build
    • Writing Documentation
      • Specific guidelines for the kernel documentation
      • the C domain
      • list tables
    • Including kernel-doc comments
    • Writing kernel-doc comments
      • How to format kernel-doc comments
      • Highlights and cross-references
        • Cross-referencing from reStructuredText
      • Function documentation
      • Structure, union, and enumeration documentation
        • In-line member documentation comments
        • Private members
      • Typedef documentation
      • Overview documentation comments
      • Recommendations
    • Including uAPI header files
      • parse_headers.pl
        • NAME
        • SYNOPSIS
        • OPTIONS
        • DESCRIPTION
        • EXAMPLES
        • BUGS
        • COPYRIGHT
    • DocBook XML [DEPRECATED]
      • Converting DocBook to Sphinx
      • Components of the kernel-doc system
      • How to use kernel-doc comments in DocBook XML template files
  • The Linux driver implementer’s API guide
    • Driver Basics
      • Driver Entry and Exit points
      • Atomic and pointer manipulation
      • Delaying, scheduling, and timer routines
      • Wait queues and Wake events
      • High-resolution timers
      • Workqueues and Kevents
      • Internal Functions
      • Kernel objects manipulation
      • Kernel utility functions
      • Device Resource Management
    • Device drivers infrastructure
      • The Basic Device Driver-Model Structures
      • Device Drivers Base
      • Device Drivers DMA Management
      • Device drivers PnP support
      • Userspace IO devices
    • Device Power Management
      • Device Power Management Basics
        • Two Models for Device Power Management
        • Interfaces for Entering System Sleep States
        • Calling Drivers to Enter and Leave System Sleep States
        • Power Management Notifiers
        • Device Low-Power (suspend) States
        • Device Power Management Domains
        • Runtime Power Management
      • Suspend/Hibernation Notifiers
      • Device Power Management Data Types
    • Bus-Independent Device Accesses
      • Introduction
      • Memory Mapped IO
        • Getting Access to the Device
        • Accessing the device
      • Port Space Accesses
        • Port Space Explained
        • Accessing Port Space
      • Public Functions Provided
    • Buffer Sharing and Synchronization
      • Shared DMA Buffers
        • Userspace Interface Notes
        • Basic Operation and Device DMA Access
        • CPU Access to DMA Buffer Objects
        • Fence Poll Support
        • Kernel Functions and Structures Reference
      • Reservation Objects
      • DMA Fences
        • Seqno Hardware Fences
        • DMA Fence Array
        • DMA Fence uABI/Sync File
    • Device links
      • Usage
      • Limitations
      • Examples
      • Alternatives
      • Implementation
      • State machine
      • API
    • Message-based devices
      • Fusion message devices
    • Sound Devices
    • Frame Buffer Library
      • Frame Buffer Memory
      • Frame Buffer Colormap
      • Frame Buffer Video Mode Database
      • Frame Buffer Macintosh Video Mode Database
      • Frame Buffer Fonts
    • Voltage and current regulator API
      • Introduction
        • Glossary
      • Consumer driver interface
        • Enabling and disabling
        • Configuration
        • Callbacks
      • Regulator driver interface
      • Machine interface
        • Supplies
        • Constraints
      • API reference
    • Industrial I/O
      • Introduction
      • Core elements
        • Industrial I/O Devices
      • Buffers
        • IIO buffer sysfs interface
        • IIO buffer setup
        • More details
      • Triggers
        • IIO trigger sysfs interface
        • IIO trigger setup
        • IIO trigger ops
        • More details
      • Triggered Buffers
        • IIO triggered buffer setup
        • More details
    • Input Subsystem
      • Input core
      • Multitouch Library
      • Polled input devices
      • Matrix keyboards/keypads
      • Sparse keymap support
    • The Linux-USB Host Side API
      • Introduction to USB on Linux
      • USB Host-Side API Model
      • USB-Standard Types
      • Host-Side Data Types and Macros
      • USB Core APIs
      • Host Controller APIs
      • The USB Filesystem (usbfs)
        • What files are in “usbfs”?
        • Mounting and Access Control
        • /proc/bus/usb/devices
        • /proc/bus/usb/BBB/DDD
        • Life Cycle of User Mode Drivers
        • The ioctl() Requests
    • Serial Peripheral Interface (SPI)
    • I2C and SMBus Subsystem
    • High Speed Synchronous Serial Interface (HSI)
      • Introduction
      • HSI Subsystem in Linux
      • hsi-char Device
      • The kernel HSI API
    • Error Detection And Correction (EDAC) Devices
      • Main Concepts used at the EDAC subsystem
      • Memory Controllers
      • PCI Controllers
      • EDAC Blocks
    • Parallel Port Devices
    • 16x50 UART Driver
    • Pulse-Width Modulation (PWM)
    • VME Device Drivers
      • Driver registration
      • Resource management
      • Master windows
        • Master window configuration
        • Master window access
      • Slave windows
        • Slave window configuration
        • Slave window buffer allocation
        • Slave window access
      • DMA channels
        • List Management
        • List Population
        • Transfer Attributes
        • List Execution
      • Interrupts
        • Attaching Interrupt Handlers
        • Interrupt Generation
      • Location monitors
        • Location Monitor Management
        • Location Monitor Configuration
        • Location Monitor Use
      • Slot Detection
      • Bus Detection
    • Linux 802.11 Driver Developer’s Guide
      • Introduction
      • cfg80211 subsystem
        • Device registration
        • Actions and configuration
        • Scanning and BSS list handling
        • Utility functions
        • Data path helpers
        • Regulatory enforcement infrastructure
        • RFkill integration
        • Test mode
      • mac80211 subsystem (basics)
        • Basic hardware handling
        • PHY configuration
        • Virtual interfaces
        • Receive and transmit processing
        • Frame filtering
        • The mac80211 workqueue
      • mac80211 subsystem (advanced)
        • LED support
        • Hardware crypto acceleration
        • Powersave support
        • Beacon filter support
        • Multiple queues and QoS support
        • Access point mode support
        • Supporting multiple virtual interfaces
        • Station handling
        • Hardware scan offload
        • Aggregation
        • Spatial Multiplexing Powersave (SMPS)
        • Rate Control API
        • Key handling
        • Receive processing
        • Transmit processing
        • Station info handling
        • Aggregation
        • Synchronisation
    • The Userspace I/O HOWTO
      • About this document
        • Translations
        • Preface
        • Acknowledgments
        • Feedback
      • About UIO
        • How UIO works
      • Writing your own kernel module
        • struct uio_info
        • Adding an interrupt handler
        • Using uio_pdrv for platform devices
        • Using uio_pdrv_genirq for platform devices
        • Using uio_dmem_genirq for platform devices
      • Writing a driver in userspace
        • Getting information about your UIO device
        • mmap() device memory
        • Waiting for interrupts
      • Generic PCI UIO driver
        • Making the driver recognize the device
        • Things to know about uio_pci_generic
        • Writing userspace driver using uio_pci_generic
        • Example code using uio_pci_generic
      • Generic Hyper-V UIO driver
        • Making the driver recognize the device
        • Things to know about uio_hv_generic
      • Further information
    • Linux Firmware API
      • Introduction
        • Types of firmware requests
      • Firmware API core features
        • Firmware search paths
        • Built-in firmware
        • Firmware cache
        • Direct filesystem lookup
        • Fallback mechanisms
        • Firmware lookup order
      • request_firmware API
        • Synchronous firmware requests
        • Asynchronous firmware requests
        • request firmware API expected driver use
  • Core API Documentation
    • Core utilities
      • Generic Associative Array Implementation
        • Overview
        • The Public API
        • Internal Workings
      • Semantics and Behavior of Atomic and Bitmask Operations
        • Atomic Type And Operations
        • Atomic Bitmask
      • CPU hotplug in the Kernel
        • Introduction
        • Command Line Switches
        • CPU maps
        • Using CPU hotplug
        • The CPU hotplug coordination
        • Testing of hotplug states
        • Architecture’s requirements
        • User Space Notification
        • Kernel Inline Documentations Reference
      • Semantics and Behavior of Local Atomic Operations
        • Purpose of local atomic operations
        • Implementation for a given architecture
        • Rules to follow when using local atomic operations
        • How to use local atomic operations
        • Counting
        • Reading the counters
      • Concurrency Managed Workqueue (cmwq)
        • Introduction
        • Why cmwq?
        • The Design
        • Application Programming Interface (API)
        • Example Execution Scenarios
        • Guidelines
        • Debugging
        • Kernel Inline Documentations Reference
    • Interfaces for kernel debugging
      • The object-lifetime debugging infrastructure
        • Introduction
        • Howto use debugobjects
        • Debug functions
        • Fixup functions
        • Known Bugs And Assumptions
      • The Linux Kernel Tracepoint API
        • Introduction
        • IRQ
        • SIGNAL
        • Block IO
        • Workqueue
  • Linux Media Subsystem Documentation
    • Linux Media Infrastructure userspace API
      • Introduction
      • Part I - Video for Linux API
        • 1. Common API Elements
        • 2. Image Formats
        • 3. Input/Output
        • 4. Interfaces
        • 5. V4L2 Driver Programming
        • 6. Libv4l Userspace Library
        • 7. Changes
        • 8. Function Reference
        • 9. Common definitions for V4L2 and V4L2 subdev interfaces
        • 10. Video For Linux Two Header File
        • 11. Video Capture Example
        • 12. Video Grabber example using libv4l
        • 13. References
        • Revision and Copyright
        • Revision History
      • Part II - Digital TV API
        • 1. Introduction
        • 2. DVB Frontend API
        • 3. DVB Demux Device
        • 4. DVB CA Device
        • 5. DVB Network API
        • 6. DVB net Function Calls
        • 7. DVB Deprecated APIs
        • 8. Examples
        • 9. DVB Audio Header File
        • 10. DVB Conditional Access Header File
        • 11. DVB Demux Header File
        • 12. DVB Frontend Header File
        • 13. DVB Network Header File
        • 14. DVB Video Header File
        • Revision and Copyright
        • Revision History
      • Part III - Remote Controller API
        • 1. Introduction
        • 2. Remote Controller’s sysfs nodes
        • 3. Remote controller tables
        • 4. Changing default Remote Controller mappings
        • 5. LIRC Device Interface
        • Revision and Copyright
        • Revision History
      • Part IV - Media Controller API
        • 1. Introduction
        • 2. Media device model
        • 3. Types and flags used to represent the media graph elements
        • 4. Function Reference
        • 5. Media Controller Header File
        • Revision and Copyright
        • Revision History
      • Part V - Consumer Electronics Control API
        • 1. Introduction
        • 2. Function Reference
        • 3. CEC Header File
        • Revision and Copyright
        • Revision History
      • Generic Error Codes
      • GNU Free Documentation License
        • 0. PREAMBLE
        • 1. APPLICABILITY AND DEFINITIONS
        • 2. VERBATIM COPYING
        • 3. COPYING IN QUANTITY
        • 4. MODIFICATIONS
        • 5. COMBINING DOCUMENTS
        • 6. COLLECTIONS OF DOCUMENTS
        • 7. AGGREGATION WITH INDEPENDENT WORKS
        • 8. TRANSLATION
        • 9. TERMINATION
        • 10. FUTURE REVISIONS OF THIS LICENSE
        • Addendum
    • Media subsystem kernel internal API
      • 1. Video2Linux devices
        • 1.1. Introduction
        • 1.2. Structure of a V4L driver
        • 1.3. Structure of the V4L2 framework
        • 1.4. Video device’ s internal representation
        • 1.5. V4L2 device instance
        • 1.6. V4L2 File handlers
        • 1.7. V4L2 sub-devices
        • 1.8. V4L2 sub-device userspace API
        • 1.9. I2C sub-device drivers
        • 1.10. V4L2 sub-device functions and data structures
        • 1.11. V4L2 events
        • 1.12. V4L2 Controls
        • 1.13. Videobuf Framework
        • 1.14. V4L2 videobuf2 functions and data structures
        • 1.15. V4L2 clocks
        • 1.16. V4L2 DV Timings functions
        • 1.17. V4L2 flash functions and data structures
        • 1.18. V4L2 Media Controller functions and data structures
        • 1.19. V4L2 Media Bus functions and data structures
        • 1.20. V4L2 Memory to Memory functions and data structures
        • 1.21. V4L2 Open Firmware kAPI
        • 1.22. V4L2 rect helper functions
        • 1.23. Tuner functions and data structures
        • 1.24. V4L2 common functions and data structures
        • 1.25. Hauppauge TV EEPROM functions and data structures
      • 2. Digital TV (DVB) devices
      • 3. Digital TV Common functions
      • 4. Digital TV Ring buffer
      • 5. Digital TV Frontend kABI
        • 5.1. Digital TV Frontend
      • 6. Digital TV Demux kABI
        • 6.1. Digital TV Demux
      • 7. Demux Callback API
        • 7.1. Demux Callback
      • 8. Digital TV Conditional Access kABI
      • 9. Remote Controller devices
        • 9.1. Remote Controller core
        • 9.2. LIRC
      • 10. Media Controller devices
        • 10.1. Media Controller
      • 11. CEC Kernel Support
        • 11.1. The CEC Protocol
      • 12. The Kernel Interface
        • 12.1. CEC Adapter
        • 12.2. Implementing the Low-Level CEC Adapter
        • 12.3. Implementing the interrupt handler
        • 12.4. Implementing the High-Level CEC Adapter
        • 12.5. CEC framework functions
      • 13. MIPI CSI-2
        • 13.1. Transmitter drivers
        • 13.2. Receiver drivers
    • Linux Digital TV driver-specific documentation
      • 1. Introduction
      • 2. HOWTO: Get An Avermedia DVB-T working under Linux
        • 2.1. Assumptions and Introduction
        • 2.2. The Avermedia DVB-T
        • 2.3. Getting the card going
        • 2.4. Receiving DVB-T in Australia
        • 2.5. Known Limitations
        • 2.6. Further Update
      • 3. How to get the bt8xx cards working
        • 3.1. General information
        • 3.2. Loading Modules
      • 4. Hardware supported by the linuxtv.org DVB drivers
      • 5. Digital TV Conditional Access Interface (CI API)
        • 5.1. ca_zap
        • 5.2. Cards that fall in this category
        • 5.3. CI modules that are supported
        • 5.4. The High level CI API
        • 5.5. Why the need for another CI interface?
      • 6. Idea behind the dvb-usb-framework
        • 6.1. Supported devices
        • 6.2. How to use?
        • 6.3. Known problems and bugs
        • 6.4. 3. Acknowledgements
      • 7. FAQ
      • 8. Firmware files for lmedm04 cards
        • 8.1. For DM04+/QQBOX LME2510C (Sharp 7395 Tuner)
        • 8.2. For DM04 LME2510 (LG Tuner)
        • 8.3. For DM04 LME2510C (LG Tuner)
        • 8.4. For LME2510
        • 8.5. For LME2510C
      • 9. Opera firmware
      • 10. How to set up the Technisat/B2C2 Flexcop devices
        • 10.1. Find out what device you have
        • 10.2. Kernel compilation:
      • 11. TechnoTrend/Hauppauge DEC USB Driver
        • 11.1. Driver Status
        • 11.2. Getting the Firmware
        • 11.3. Hotplug Firmware Loading
      • 12. UDEV rules for DVB
      • 13. Contributors
    • Video4Linux (V4L) driver-specific documentation
      • 1. Guidelines for Video4Linux pixel format 4CCs
        • 1.1. Raw bayer
      • 2. Infrared remote control support in video4linux drivers
        • 2.1. Basics
        • 2.2. How it works
      • 3. Using with lircd
      • 4. Using without lircd
      • 5. Tuner drivers
        • 5.1. Simple tuner Programming
        • 5.2. Tuner Manufacturers
      • 6. Cards List
        • 6.1. AU0828 cards list
        • 6.2. BTTV cards list
        • 6.3. cx23885 cards list
        • 6.4. CX88 cards list
        • 6.5. EM28xx cards list
        • 6.6. IVTV cards list
        • 6.7. SAA7134 cards list
        • 6.8. SAA7164 cards list
        • 6.9. TM6000 cards list
        • 6.10. Tuner cards list
        • 6.11. USBvision cards list
        • 6.12. The gspca cards list
      • 7. The bttv driver
        • 7.1. Release notes for bttv
        • 7.2. Make bttv work with your card
        • 7.3. Autodetecting cards
        • 7.4. Still doesn’t work?
        • 7.5. Modprobe options
        • 7.6. If the box freezes hard with bttv
        • 7.7. Bttv quirks
        • 7.8. bttv and sound mini howto
        • 7.9. Cards
        • 7.10. Chips used at bttv devices
        • 7.11. Specs
        • 7.12. Thanks
        • 7.13. Contributors
      • 8. The cafe_ccic driver
        • 8.1. Introduction
        • 8.2. Load time options
      • 9. The cpia2 driver
        • 9.1. Introduction
        • 9.2. Features
        • 9.3. Making and installing the stv672 driver modules
      • 10. The cx18 driver
      • 11. The cx2341x driver
        • 11.1. Memory at cx2341x chips
        • 11.2. Missing documentation
        • 11.3. The cx2341x firmware upload
        • 11.4. How to call the firmware API
        • 11.5. OSD firmware API description
        • 11.6. Encoder firmware API description
        • 11.7. Decoder firmware API description
        • 11.8. PVR350 Video decoder registers 0x02002800 -> 0x02002B00
        • 11.9. The cx231xx DMA engine
        • 11.10. Non-compressed file format
        • 11.11. Format of embedded V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI data
      • 12. The cx88 driver
        • 12.1. Current status
        • 12.2. How to add support for new cards
        • 12.3. Documentation missing at the cx88 datasheet
        • 12.4. Hauppauge WinTV cx88 IR information
      • 13. The VPBE V4L2 driver design
        • 13.1. File partitioning
        • 13.2. Functional partitioning
        • 13.3. Current status
        • 13.4. To be done
      • 14. The Samsung S5P/EXYNOS4 FIMC driver
        • 14.1. Supported SoCs
        • 14.2. Supported features
        • 14.3. Not currently supported
        • 14.4. Files partitioning
        • 14.5. User space interfaces
        • 14.6. 5. Device mapping to video and subdev device nodes
        • 14.7. 7. Build
      • 15. The ivtv driver
        • 15.1. Features
        • 15.2. Additional features for the PVR-350 (CX23415 based)
        • 15.3. See also
        • 15.4. IRC
        • 15.5. Devices
        • 15.6. Base devices
      • 16. Vaio Picturebook Motion Eye Camera Driver
        • 16.1. Hardware supported
        • 16.2. Driver options
        • 16.3. Module use
        • 16.4. Usage:
        • 16.5. Private API
        • 16.6. Bugs / Todo
      • 17. OMAP 3 Image Signal Processor (ISP) driver
        • 17.1. Introduction
        • 17.2. Split to subdevs
        • 17.3. Controlling the OMAP 3 ISP
        • 17.4. Events
        • 17.5. Private IOCTLs
        • 17.6. CCDC and preview block IOCTLs
        • 17.7. Statistic blocks IOCTLs
        • 17.8. VIDIOC_OMAP3ISP_STAT_EN
        • 17.9. VIDIOC_OMAP3ISP_AEWB_CFG, VIDIOC_OMAP3ISP_HIST_CFG and VIDIOC_OMAP3ISP_AF_CFG
        • 17.10. VIDIOC_OMAP3ISP_STAT_REQ
        • 17.11. Technical reference manuals (TRMs) and other documentation
        • 17.12. References
      • 18. OMAP4 ISS Driver
        • 18.1. Introduction
        • 18.2. Tested platforms
        • 18.3. File list
        • 18.4. References
      • 19. The pvrusb2 driver
        • 19.1. Background
        • 19.2. Building
        • 19.3. Source file list / functional overview
      • 20. PXA-Camera Host Driver
        • 20.1. Constraints
        • 20.2. Global video workflow
        • 20.3. DMA usage
      • 21. The Radiotrack radio driver
        • 21.1. ACKNOWLEDGMENTS
        • 21.2. WHY THIS DOCUMENT?
        • 21.3. PHYSICAL DESCRIPTION
        • 21.4. CONTROLLING THE CARD WITH IOPORT
        • 21.5. PROGRAMMING EXAMPLES
      • 22. Renesas R-Car Fine Display Processor (FDP1) Driver
      • 23. The saa7134 driver
        • 23.1. Status
        • 23.2. Build
        • 23.3. Changes / Fixes
        • 23.4. Known Problems
        • 23.5. Card Variations:
        • 23.6. LifeView GPIOs
        • 23.7. Credits
      • 24. Cropping and Scaling algorithm, used in the sh_mobile_ceu_camera driver
        • 24.1. Terminology
        • 24.2. Generic scaling / cropping scheme
        • 24.3. S_FMT
        • 24.4. S_CROP
      • 25. The Silicon Labs Si470x FM Radio Receivers driver
        • 25.1. Information from Silicon Labs
        • 25.2. Supported ICs
        • 25.3. Supported USB devices
        • 25.4. Software
        • 25.5. Audio Listing
        • 25.6. Module Parameters
        • 25.7. Errors
        • 25.8. Open Issues
        • 25.9. Other useful information and links
      • 26. The Silicon Labs Si4713 FM Radio Transmitter Driver
        • 26.1. Information about the Device
        • 26.2. Device driver description
        • 26.3. Properties description
        • 26.4. RNL
        • 26.5. Stereo/Mono and RDS subchannels
        • 26.6. Testing
      • 27. The SI476x Driver
        • 27.1. TODO for the driver
        • 27.2. Parameters exposed over debugfs
      • 28. The Soc-Camera Drivers
        • 28.1. Terminology
        • 28.2. Purpose of the soc-camera subsystem
        • 28.3. Existing drivers
        • 28.4. Camera host API
        • 28.5. Camera API
        • 28.6. VIDIOC_S_CROP and VIDIOC_S_FMT behaviour
        • 28.7. Format conversion
      • 29. The Linux USB Video Class (UVC) driver
        • 29.1. Extension Unit (XU) support
      • 30. The Virtual Video Test Driver (vivid)
        • 30.1. Configuring the driver
        • 30.2. Video Capture
        • 30.3. Video Output
        • 30.4. VBI Capture
        • 30.5. VBI Output
        • 30.6. Radio Receiver
        • 30.7. Radio Transmitter
        • 30.8. Software Defined Radio Receiver
        • 30.9. Controls
        • 30.10. Video, VBI and RDS Looping
        • 30.11. Cropping, Composing, Scaling
        • 30.12. Formats
        • 30.13. Capture Overlay
        • 30.14. Output Overlay
        • 30.15. CEC (Consumer Electronics Control)
        • 30.16. Some Future Improvements
      • 31. The Zoran driver
        • 31.1. Frequently Asked Questions
        • 31.2. What cards are supported
        • 31.3. 1.1 What the TV decoder can do an what not
        • 31.4. What the TV encoder can do an what not
        • 31.5. How do I get this damn thing to work
        • 31.6. What mainboard should I use (or why doesn’t my card work)
        • 31.7. Programming interface
        • 31.8. Applications
        • 31.9. Concerning buffer sizes, quality, output size etc.
        • 31.10. It hangs/crashes/fails/whatevers! Help!
        • 31.11. Maintainers/Contacting
        • 31.12. Driver’s License
      • 32. Zoran 364xx based USB webcam module
        • 32.1. Introduction
        • 32.2. Install
        • 32.3. Usage
        • 32.4. links
        • 32.5. Supported devices
  • Linux GPU Driver Developer’s Guide
    • Introduction
      • Style Guidelines
    • DRM Internals
      • Driver Initialization
        • Driver Information
        • Device Instance and Driver Handling
        • Driver Load
        • Bus-specific Device Registration and PCI Support
      • Open/Close, File Operations and IOCTLs
        • Open and Close
        • File Operations
        • IOCTLs
      • Misc Utilities
        • Printer
      • Legacy Support Code
        • Legacy Suspend/Resume
        • Legacy DMA Services
    • DRM Memory Management
      • The Translation Table Manager (TTM)
        • TTM initialization
      • The Graphics Execution Manager (GEM)
        • GEM Initialization
        • GEM Objects Creation
        • GEM Objects Lifetime
        • GEM Objects Naming
        • GEM Objects Mapping
        • Memory Coherency
        • Command Execution
        • GEM Function Reference
        • GEM CMA Helper Functions Reference
      • VMA Offset Manager
      • PRIME Buffer Sharing
        • Overview and Driver Interface
        • PRIME Helper Functions
        • PRIME Function References
      • DRM MM Range Allocator
        • Overview
        • LRU Scan/Eviction Support
        • DRM MM Range Allocator Function References
      • DRM Cache Handling
    • Kernel Mode Setting (KMS)
      • KMS Core Structures and Functions
      • Modeset Base Object Abstraction
      • Atomic Mode Setting Function Reference
      • CRTC Abstraction
        • CRTC Functions Reference
      • Frame Buffer Abstraction
        • Frame Buffer Functions Reference
      • DRM Format Handling
      • Dumb Buffer Objects
      • Plane Abstraction
        • Plane Functions Reference
      • Display Modes Function Reference
      • Connector Abstraction
        • Connector Functions Reference
      • Encoder Abstraction
        • Encoder Functions Reference
      • KMS Initialization and Cleanup
        • CRTCs (struct drm_crtc)
        • Cleanup
        • Output discovery and initialization example
      • KMS Locking
      • KMS Properties
        • Property Types and Blob Property Support
        • Standard Connector Properties
        • Plane Composition Properties
        • Color Management Properties
        • Tile Group Property
        • Explicit Fencing Properties
        • Existing KMS Properties
      • Vertical Blanking
        • Vertical Blanking and Interrupt Handling Functions Reference
    • Mode Setting Helper Functions
      • Modeset Helper Reference for Common Vtables
      • Atomic Modeset Helper Functions Reference
        • Overview
        • Implementing Asynchronous Atomic Commit
        • Atomic State Reset and Initialization
        • Helper Functions Reference
      • Legacy CRTC/Modeset Helper Functions Reference
      • Simple KMS Helper Reference
      • fbdev Helper Functions Reference
      • Framebuffer CMA Helper Functions Reference
      • Bridges
        • Overview
        • Default bridge callback sequence
        • Bridge Helper Reference
      • Panel Helper Reference
      • Display Port Helper Functions Reference
      • Display Port Dual Mode Adaptor Helper Functions Reference
      • Display Port MST Helper Functions Reference
      • MIPI DSI Helper Functions Reference
      • Output Probing Helper Functions Reference
      • EDID Helper Functions Reference
      • Rectangle Utilities Reference
      • HDMI Infoframes Helper Reference
      • Flip-work Helper Reference
      • Plane Helper Reference
      • Auxiliary Modeset Helpers
    • Userland interfaces
      • libdrm Device Lookup
      • Primary Nodes, DRM Master and Authentication
      • Open-Source Userspace Requirements
      • Render nodes
      • Testing and validation
        • Validating changes with IGT
        • Display CRC Support
      • VBlank event handling
    • drm/i915 Intel GFX Driver
      • Core Driver Infrastructure
        • Runtime Power Management
        • Interrupt Handling
        • Intel GVT-g Guest Support(vGPU)
        • Intel GVT-g Host Support(vGPU device model)
      • Display Hardware Handling
        • Mode Setting Infrastructure
        • Frontbuffer Tracking
        • Display FIFO Underrun Reporting
        • Plane Configuration
        • Atomic Plane Helpers
        • Output Probing
        • Hotplug
        • High Definition Audio
        • Intel HDMI LPE Audio Support
        • Panel Self Refresh PSR (PSR/SRD)
        • Frame Buffer Compression (FBC)
        • Display Refresh Rate Switching (DRRS)
        • DPIO
        • CSR firmware support for DMC
        • Video BIOS Table (VBT)
        • Display PLLs
      • Memory Management and Command Submission
        • Batchbuffer Parsing
        • Batchbuffer Pools
        • Logical Rings, Logical Ring Contexts and Execlists
        • Global GTT views
        • GTT Fences and Swizzling
        • Object Tiling IOCTLs
        • Buffer Object Eviction
        • Buffer Object Memory Shrinking
      • GuC
        • GuC-specific firmware loader
        • GuC-based command submission
        • GuC Firmware Layout
      • Tracing
        • i915_ppgtt_create and i915_ppgtt_release
        • i915_context_create and i915_context_free
        • switch_mm
      • Perf
        • Overview
        • Comparison with Core Perf
        • i915 Driver Entry Points
        • i915 Perf Stream
        • i915 Perf Observation Architecture Stream
        • All i915 Perf Internals
    • drm/tinydrm Driver library
      • Core functionality
      • Additional helpers
      • MIPI DBI Compatible Controllers
    • VGA Switcheroo
      • Modes of Use
        • Manual switching and manual power control
        • Driver power control
      • API
        • Public functions
        • Public structures
        • Public constants
        • Private structures
      • Handlers
        • apple-gmux Handler
    • VGA Arbiter
      • vgaarb kernel/userspace ABI
      • In-kernel interface
      • libpciaccess
      • xf86VGAArbiter (X server implementation)
      • References
  • Security documentation
    • Trusted Platform Module documentation
      • Virtual TPM Proxy Driver for Linux Containers
        • Introduction
        • Design
        • UAPI
  • Linux Sound Subsystem Documentation
    • ALSA Kernel API Documentation
      • The ALSA Driver API
        • Management of Cards and Devices
        • PCM API
        • Control/Mixer API
        • MIDI API
        • Proc Info API
        • Compress Offload
        • ASoC
        • Miscellaneous Functions
      • Writing an ALSA Driver
        • Preface
        • File Tree Structure
        • Basic Flow for PCI Drivers
        • Management of Cards and Components
        • PCI Resource Management
        • PCM Interface
        • Control Interface
        • API for AC97 Codec
        • MIDI (MPU401-UART) Interface
        • RawMIDI Interface
        • Miscellaneous Devices
        • Buffer and Memory Management
        • Proc Interface
        • Power Management
        • Module Parameters
        • How To Put Your Driver Into ALSA Tree
        • Useful Functions
        • Acknowledgments
    • Designs and Implementations
      • Standard ALSA Control Names
        • Standard Syntax
        • Exceptions (deprecated)
        • PCM interface
        • IEC958 (S/PDIF) interface
      • ALSA PCM channel-mapping API
        • General
        • Design
      • ALSA Compress-Offload API
        • Overview
        • Requirements
        • Design
        • Gapless Playback
        • Not supported
        • Credits
      • ALSA PCM Timestamping
      • ALSA Jack Controls
        • Why we need Jack kcontrols
        • Jack Kcontrol Internals
        • How to use jack kcontrols
      • Proc Files of ALSA Drivers
        • General
        • Global Information
        • Card Specific Files
        • PCM Proc Files
        • AC97 Codec Information
        • USB Audio Streams
        • HD-Audio Codecs
        • Sequencer Information
        • Help For Debugging?
      • Notes on Power-Saving Mode
      • Notes on Kernel OSS-Emulation
        • Modules
        • Device Mapping
        • PCM Mode
        • Mixer Elements
        • Duplex Streams
        • Unsupported Features
      • OSS Sequencer Emulation on ALSA
        • Description
        • Installation
        • Using Synthesizer Devices
        • Using MIDI Devices
        • Module Options
        • Queue Mechanism
        • Interface to Synthesizer Device
        • Events
        • Interface to MIDI Device
        • Known Problems / TODO’s
    • ALSA SoC Layer
      • ALSA SoC Layer Overview
        • ASoC Design
      • ASoC Codec Class Driver
        • ASoC Codec driver breakdown
      • ASoC Digital Audio Interface (DAI)
        • AC97
        • I2S
        • PCM
      • Dynamic Audio Power Management for Portable Devices
        • Description
        • DAPM Widgets
        • Codec/DSP Widget Interconnections
        • Endpoint Widgets
        • DAPM Widget Events
      • ASoC Platform Driver
        • Audio DMA
        • SoC DAI Drivers
        • SoC DSP Drivers
      • ASoC Machine Driver
        • probe()/remove()
        • suspend()/resume()
        • Machine DAI Configuration
        • Machine Power Map
        • Machine Controls
      • Audio Pops and Clicks
        • Minimising Playback Pops and Clicks
        • Minimising Capture Pops and Clicks
        • Zipper Noise
      • Audio Clocking
        • Master Clock
        • DAI Clocks
      • ASoC jack detection
        • The jack - struct snd_soc_jack
        • snd_soc_jack_pin
        • Jack detection methods
        • Machine drivers
      • Dynamic PCM
        • Description
        • DPCM machine driver
        • Writing a DPCM DSP driver
        • Hostless PCM streams
      • Creating codec to codec dai link for ALSA dapm
    • Advanced Linux Sound Architecture - Driver Configuration guide
      • Kernel Configuration
      • Module parameters
        • Module snd
        • Module snd-pcm-oss
        • Module snd-rawmidi
        • Common parameters for top sound card modules
        • Module snd-adlib
        • Module snd-ad1816a
        • Module snd-ad1848
        • Module snd-ad1889
        • Module snd-ali5451
        • Module snd-als100
        • Module snd-als300
        • Module snd-als4000
        • Module snd-asihpi
        • Module snd-atiixp
        • Module snd-atiixp-modem
        • Module snd-au8810, snd-au8820, snd-au8830
        • Module snd-azt1605
        • Module snd-azt2316
        • Module snd-aw2
        • Module snd-azt2320
        • Module snd-azt3328
        • Module snd-bt87x
        • Module snd-ca0106
        • Module snd-cmi8330
        • Module snd-cmipci
        • Module snd-cs4231
        • Module snd-cs4236
        • Module snd-cs4281
        • Module snd-cs46xx
        • Module snd-cs5530
        • Module snd-cs5535audio
        • Module snd-ctxfi
        • Module snd-darla20
        • Module snd-darla24
        • Module snd-dt019x
        • Module snd-dummy
        • Module snd-echo3g
        • Module snd-emu10k1
        • Module snd-emu10k1x
        • Module snd-ens1370
        • Module snd-ens1371
        • Module snd-es1688
        • Module snd-es18xx
        • Module snd-es1938
        • Module snd-es1968
        • Module snd-fm801
        • Module snd-gina20
        • Module snd-gina24
        • Module snd-gusclassic
        • Module snd-gusextreme
        • Module snd-gusmax
        • Module snd-hda-intel
        • Module snd-hdsp
        • Module snd-hdspm
        • Module snd-ice1712
        • Module snd-ice1724
        • Module snd-indigo
        • Module snd-indigodj
        • Module snd-indigoio
        • Module snd-intel8x0
        • Module snd-intel8x0m
        • Module snd-interwave
        • Module snd-interwave-stb
        • Module snd-jazz16
        • Module snd-korg1212
        • Module snd-layla20
        • Module snd-layla24
        • Module snd-lola
        • Module snd-lx6464es
        • Module snd-maestro3
        • Module snd-mia
        • Module snd-miro
        • Module snd-mixart
        • Module snd-mona
        • Module snd-mpu401
        • Module snd-msnd-classic
        • Module snd-msnd-pinnacle
        • Module snd-mtpav
        • Module snd-mts64
        • Module snd-nm256
        • Module snd-opl3sa2
        • Module snd-opti92x-ad1848
        • Module snd-opti92x-cs4231
        • Module snd-opti93x
        • Module snd-oxygen
        • Module snd-pcsp
        • Module snd-pcxhr
        • Module snd-portman2x4
        • Module snd-powermac (on ppc only)
        • Module snd-pxa2xx-ac97 (on arm only)
        • Module snd-riptide
        • Module snd-rme32
        • Module snd-rme96
        • Module snd-rme9652
        • Module snd-sa11xx-uda1341 (on arm only)
        • Module snd-sb8
        • Module snd-sb16 and snd-sbawe
        • Module snd-sc6000
        • Module snd-sscape
        • Module snd-sun-amd7930 (on sparc only)
        • Module snd-sun-cs4231 (on sparc only)
        • Module snd-sun-dbri (on sparc only)
        • Module snd-wavefront
        • Module snd-sonicvibes
        • Module snd-serial-u16550
        • Module snd-trident
        • Module snd-ua101
        • Module snd-usb-audio
        • Module snd-usb-caiaq
        • Module snd-usb-usx2y
        • Module snd-via82xx
        • Module snd-via82xx-modem
        • Module snd-virmidi
        • Module snd-virtuoso
        • Module snd-vx222
        • Module snd-vxpocket
        • Module snd-ymfpci
        • Module snd-pdaudiocf
      • AC97 Quirk Option
      • Configuring Non-ISAPNP Cards
      • Module Autoloading Support
      • ALSA PCM devices to OSS devices mapping
      • Proc interfaces (/proc/asound)
        • /proc/asound/card#/pcm#[cp]/oss
      • Early Buffer Allocation
      • Links and Addresses
    • HD-Audio
      • More Notes on HD-Audio Driver
        • General
        • HD-Audio Controller
        • HD-Audio Codec
        • Other Issues
        • Debug Tools
      • HD-Audio Codec-Specific Models
        • ALC880
        • ALC260
        • ALC262
        • ALC267/268
        • ALC22x/23x/25x/269/27x/28x/29x (and vendor-specific ALC3xxx models)
        • ALC66x/67x/892
        • ALC680
        • ALC88x/898/1150
        • ALC861/660
        • ALC861VD/660VD
        • CMI9880
        • AD1882 / AD1882A
        • AD1884A / AD1883 / AD1984A / AD1984B
        • AD1884
        • AD1981
        • AD1983
        • AD1984
        • AD1986A
        • AD1988/AD1988B/AD1989A/AD1989B
        • Conexant 5045
        • Conexant 5047
        • Conexant 5051
        • Conexant 5066
        • STAC9200
        • STAC9205/9254
        • STAC9220/9221
        • STAC9202/9250/9251
        • STAC9227/9228/9229/927x
        • STAC92HD71B*
        • STAC92HD73*
        • STAC92HD83*
        • STAC92HD95
        • STAC9872
        • Cirrus Logic CS4206/4207
        • Cirrus Logic CS4208
        • VIA VT17xx/VT18xx/VT20xx
      • HD-Audio Codec-Specific Mixer Controls
        • Realtek codecs
        • IDT/Sigmatel codecs
        • VIA codecs
        • Conexant codecs
        • Analog codecs
      • HD-Audio DP-MST Support
        • PCM
        • Pin Initialization
        • Connection list
        • Jack
        • Others to be added later
    • Card-Specific Information
      • Analog Joystick Support on ALSA Drivers
        • General
        • PCI Cards
        • ISA Cards
      • Brief Notes on C-Media 8338/8738/8768/8770 Driver
        • Front/Rear Multi-channel Playback
        • 4/6 Multi-Channel Playback
        • Digital I/O
        • The AC3 (RAW DIGITAL) OUTPUT
        • ANALOG MIXER INTERFACE
        • MIDI CONTROLLER
        • FM OPL/3 Synth
        • Joystick and Modem
        • Debugging Information
      • Sound Blaster Live mixer / default DSP code
        • IEC958 (S/PDIF) raw PCM
        • Digital mixer controls
        • PCM stream related controls
        • MANUALS/PATENTS
      • Sound Blaster Audigy mixer / default DSP code
        • Digital mixer controls
        • PCM stream related controls
        • MANUALS/PATENTS
      • Low latency, multichannel audio with JACK and the emu10k1/emu10k2
      • VIA82xx mixer
      • Guide to using M-Audio Audiophile USB with ALSA and Jack
        • History
        • Audiophile USB Specs and correct usage
        • Audiophile USB MIDI support in ALSA
        • Audiophile USB Audio support in ALSA
        • Audiophile USB and Jack support
      • Alsa driver for Digigram miXart8 and miXart8AES/EBU soundcards
        • GENERAL
        • VERSION 0.1.0
        • NOT YET IMPLEMENTED
        • FIRMWARE
        • COPYRIGHT
      • ALSA BT87x Driver
        • Intro
        • Driver Status
        • Audio modes
        • Digital audio mode
        • Analog audio mode (A/D)
      • Notes on Maya44 USB Audio Support
        • STATE OF DEVELOPMENT
        • DRIVER DETAILS
        • SAMPLING RATES
        • SOUND DEVICES
        • NAMING OF MIXER CONTROLS
      • Software Interface ALSA-DSP MADI Driver
        • Hardware functionality
        • Calling Parameter
      • Serial UART 16450/16550 MIDI driver
      • Imagination Technologies SPDIF Input Controllers
  • Linux Kernel Crypto API
    • Kernel Crypto API Interface Specification
      • Introduction
      • Terminology
    • Kernel Crypto API Architecture
      • Cipher algorithm types
      • Ciphers And Templates
      • Synchronous And Asynchronous Operation
      • Crypto API Cipher References And Priority
      • Key Sizes
      • Cipher Allocation Type And Masks
      • Internal Structure of Kernel Crypto API
        • Generic AEAD Cipher Structure
        • Generic Block Cipher Structure
        • Generic Keyed Message Digest Structure
    • Developing Cipher Algorithms
      • Registering And Unregistering Transformation
      • Single-Block Symmetric Ciphers [CIPHER]
        • Registration specifics
        • Cipher Definition With struct cipher_alg
      • Multi-Block Ciphers
        • Registration Specifics
        • Cipher Definition With struct blkcipher_alg and ablkcipher_alg
        • Specifics Of Asynchronous Multi-Block Cipher
      • Hashing [HASH]
        • Registering And Unregistering The Transformation
        • Cipher Definition With struct shash_alg and ahash_alg
        • Specifics Of Asynchronous HASH Transformation
    • User Space Interface
      • Introduction
      • User Space API General Remarks
      • In-place Cipher operation
      • Message Digest API
      • Symmetric Cipher API
      • AEAD Cipher API
        • AEAD Memory Structure
      • Random Number Generator API
      • Zero-Copy Interface
      • Setsockopt Interface
      • User space API example
    • Programming Interface
      • Block Cipher Algorithm Definitions
      • Symmetric Key Cipher API
      • Symmetric Key Cipher Request Handle
      • Single Block Cipher API
      • Asynchronous Block Cipher API - Deprecated
      • Asynchronous Cipher Request Handle - Deprecated
      • Synchronous Block Cipher API - Deprecated
      • Authenticated Encryption With Associated Data (AEAD) Algorithm Definitions
      • Authenticated Encryption With Associated Data (AEAD) Cipher API
      • Asynchronous AEAD Request Handle
      • Message Digest Algorithm Definitions
      • Asynchronous Message Digest API
      • Asynchronous Hash Request Handle
      • Synchronous Message Digest API
      • Random Number Algorithm Definitions
      • Crypto API Random Number API
      • Asymmetric Cipher Algorithm Definitions
      • Asymmetric Cipher API
      • Asymmetric Cipher Request Handle
      • Key-agreement Protocol Primitives (KPP) Cipher Algorithm Definitions
      • Key-agreement Protocol Primitives (KPP) Cipher API
      • Key-agreement Protocol Primitives (KPP) Cipher Request Handle
      • ECDH Helper Functions
      • DH Helper Functions
    • Code Examples
      • Code Example For Symmetric Key Cipher Operation
      • Code Example For Use of Operational State Memory With SHASH
      • Code Example For Random Number Generator Usage
  • Korean translations
    • 어떻게 리눅스 커널 개발을 하는가
      • 소개
      • 법적 문제
      • 문서
      • 커널 개발자가 되는 것
      • 개발 프로세스
        • 4.x 커널 트리
        • 4.x.y - 안정 커널 트리
        • 4.x -git 패치들
        • 서브시스템 커널 트리들과 패치들
      • 4.x - 통합 테스트를 위한 next 커널 트리
      • 버그 보고
      • 버그 리포트들의 관리
      • 메일링 리스트들
      • 커뮤니티와 협력하는 법
      • 커널 커뮤니티와 기업 조직간의 차이점
      • 여러분의 변경을 나누어라
      • 변경을 정당화해라
      • 변경을 문서화해라
  • Chinese translations
    • Linux 内核代码风格
      • 1) 缩进
      • 2) 把长的行和字符串打散
      • 3) 大括号和空格的放置
        • 3.1) 空格
      • 4) 命名
      • 5) Typedef
      • 6) 函数
      • 7) 集中的函数退出途径
      • 8) 注释
      • 9) 你已经把事情弄糟了
      • 10) Kconfig 配置文件
      • 11) 数据结构
      • 12) 宏,枚举和RTL
      • 13) 打印内核消息
      • 14) 分配内存
      • 15) 内联弊病
      • 16) 函数返回值及命名
      • 17) 不要重新发明内核宏
      • 18) 编辑器模式行和其他需要罗嗦的事情
      • 19) 内联汇编
      • 20) 条件编译
      • 附录 I) 参考
 
The Linux Kernel
  • Docs »
  • Linux Media Subsystem Documentation »
  • Linux Media Infrastructure userspace API »
  • Part IV - Media Controller API »
  • 4. Function Reference »
  • 4.8. ioctl MEDIA_IOC_SETUP_LINK
  • View page source

4.8. ioctl MEDIA_IOC_SETUP_LINK¶

4.8.1. Name¶

MEDIA_IOC_SETUP_LINK - Modify the properties of a link

4.8.2. Synopsis¶

int ioctl(int fd, MEDIA_IOC_SETUP_LINK, struct media_link_desc *argp)¶

4.8.3. Arguments¶

fd
File descriptor returned by open().

argp

4.8.4. Description¶

To change link properties applications fill a struct media_link_desc with link identification information (source and sink pad) and the new requested link flags. They then call the MEDIA_IOC_SETUP_LINK ioctl with a pointer to that structure.

The only configurable property is the ENABLED link flag to enable/disable a link. Links marked with the IMMUTABLE link flag can not be enabled or disabled.

Link configuration has no side effect on other links. If an enabled link at the sink pad prevents the link from being enabled, the driver returns with an EBUSY error code.

Only links marked with the DYNAMIC link flag can be enabled/disabled while streaming media data. Attempting to enable or disable a streaming non-dynamic link will return an EBUSY error code.

If the specified link can’t be found the driver returns with an EINVAL error code.

4.8.5. Return Value¶

On success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter.

EINVAL
The struct media_link_desc references a non-existing link, or the link is immutable and an attempt to modify its configuration was made.
Next Previous

© Copyright The kernel development community.

Built with Sphinx using a theme provided by Read the Docs.