The Linux Kernel API

This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details see the file COPYING in the source distribution of Linux.

Table of Contents

1. Driver Basics
Driver Entry and Exit points
Atomic and pointer manipulation
Delaying, scheduling, and timer routines
High-resolution timers
Internal Functions
Kernel objects manipulation
Kernel utility functions
2. Data Types
Doubly Linked Lists
3. Basic C Library Functions
String Conversions
String Manipulation
Bit Operations
4. Memory Management in Linux
The Slab Cache
User Space Memory Access
More Memory Management Functions
5. Kernel IPC facilities
IPC utilities
6. FIFO Buffer
kfifo interface
7. The proc filesystem
sysctl interface
proc filesystem interface
8. The debugfs filesystem
debugfs interface
9. The Linux VFS
The Filesystem types
The Directory Cache
Inode Handling
Registration and Superblocks
File Locks
Other Functions
10. Linux Networking
Networking Base Types
Socket Buffer Functions
Socket Filter
Generic Network Statistics
SUN RPC subsystem
11. Network device support
Driver Support
Synchronous PPP
12. Module Support
Module Loading
Inter Module support
13. Hardware Interfaces
Interrupt Handling
Resources Management
MTRR Handling
PCI Support Library
PCI Hotplug Support Library
MCA Architecture
MCA Device Functions
14. The Device File System
devfs_mk_dir - Create a directory in the devfs namespace.
15. The Filesystem for Exporting Kernel Objects
sysfs_create_file - create an attribute file for an object.
sysfs_update_file - update the modified timestamp on an object attribute.
sysfs_chmod_file - update the modified mode value on an object attribute.
sysfs_remove_file - remove an object attribute.
sysfs_create_dir - create a directory for an object.
sysfs_remove_dir - remove an object's directory.
sysfs_create_link - create symlink between two objects.
sysfs_remove_link - remove symlink in object's directory.
sysfs_create_bin_file - create binary file for object.
sysfs_remove_bin_file - remove binary file for object.
16. Security Framework
register_security - registers a security framework with the kernel
unregister_security - unregisters a security framework with the kernel
mod_reg_security - allows security modules to be stacked
mod_unreg_security - allows a security module registered with mod_reg_security to be unloaded
capable - calls the currently loaded security module's capable function with the specified capability
17. Power Management
pm_register - register a device with power management
pm_unregister - unregister a device with power management
pm_unregister_all - unregister all devices with matching callback
pm_send_all - send request to all managed devices
18. Device drivers infrastructure
Device Drivers Base
Device Drivers Power Management
Device Drivers ACPI Support
Device drivers PnP support
19. Block Devices
blk_get_backing_dev_info - get the address of a queue's backing_dev_info
blk_queue_prep_rq - set a prepare_request function for queue
blk_queue_merge_bvec - set a merge_bvec function for queue
blk_queue_make_request - define an alternate make_request function for a device
blk_queue_ordered - does this queue support ordered writes
blk_queue_issue_flush_fn - set function for issuing a flush
blk_complete_barrier_rq - complete possible barrier request
blk_complete_barrier_rq_locked - complete possible barrier request
blk_queue_bounce_limit - set bounce buffer limit for queue
blk_queue_max_sectors - set max sectors for a request for this queue
blk_queue_max_phys_segments - set max phys segments for a request for this queue
blk_queue_max_hw_segments - set max hw segments for a request for this queue
blk_queue_max_segment_size - set max segment size for blk_rq_map_sg
blk_queue_hardsect_size - set hardware sector size for the queue
blk_queue_stack_limits - inherit underlying queue limits for stacked drivers
blk_queue_segment_boundary - set boundary rules for segment merging
blk_queue_dma_alignment - set dma length and memory alignment
blk_queue_find_tag - find a request by its tag and queue
blk_queue_free_tags - release tag maintenance info
blk_queue_init_tags - initialize the queue tag info
blk_queue_resize_tags - change the queueing depth
blk_queue_end_tag - end tag operations for a request
blk_queue_start_tag - find a free tag and assign it
blk_queue_invalidate_tags - invalidate all pending tags
generic_unplug_device - fire a request queue
blk_start_queue - restart a previously stopped queue
blk_stop_queue - stop a queue
blk_sync_queue - cancel any pending callbacks on a queue
blk_run_queue - run a single device queue
blk_cleanup_queue - release a &request_queue_t when it is no longer needed
blk_init_queue - prepare a request queue for use with a block device
blk_requeue_request - put a request back on queue
blk_insert_request - insert a special request in to a request queue
blk_rq_map_user - map user data to a request, for REQ_BLOCK_PC usage
blk_rq_map_user_iov - map user data to a request, for REQ_BLOCK_PC usage
blk_rq_unmap_user - unmap a request with user data
blk_rq_map_kern - map kernel data to a request, for REQ_BLOCK_PC usage
blk_execute_rq - insert a request into queue for execution
blkdev_issue_flush - queue a flush
blk_end_sync_rq - executes a completion event on a request
blk_congestion_wait - wait for a queue to become uncongested
blk_attempt_remerge - attempt to remerge active head with next request
submit_bio -
end_that_request_first - end I/O on a request
end_that_request_chunk - end I/O on a request
20. Miscellaneous Devices
misc_register - register a miscellaneous device
misc_deregister - unregister a miscellaneous device
21. Video4Linux
video_register_device - register video4linux devices
video_unregister_device - unregister a video4linux device
22. Sound Devices
snd_printk - printk wrapper
snd_printd - debug printk
snd_assert - run-time assertion macro
snd_printdd - debug printk
register_sound_special_device - register a special sound node
register_sound_mixer - register a mixer device
register_sound_midi - register a midi device
register_sound_dsp - register a DSP device
register_sound_synth - register a synth device
unregister_sound_special - unregister a special sound device
unregister_sound_mixer - unregister a mixer
unregister_sound_midi - unregister a midi device
unregister_sound_dsp - unregister a DSP device
unregister_sound_synth - unregister a synth device
snd_pcm_playback_ready - check whether the playback buffer is available
snd_pcm_capture_ready - check whether the capture buffer is available
snd_pcm_playback_data - check whether any data exists on the playback buffer
snd_pcm_playback_empty - check whether the playback buffer is empty
snd_pcm_capture_empty - check whether the capture buffer is empty
snd_pcm_format_cpu_endian - Check the PCM format is CPU-endian
snd_pcm_new_stream - create a new PCM stream
snd_pcm_new - create a new PCM instance
snd_device_new - create an ALSA device component
snd_device_free - release the device from the card
snd_device_register - register the device
snd_iprintf - printf on the procfs buffer
snd_info_get_line - read one line from the procfs buffer
snd_info_get_str - parse a string token
snd_info_create_module_entry - create an info entry for the given module
snd_info_create_card_entry - create an info entry for the given card
snd_card_proc_new - create an info entry for the given card
snd_info_free_entry - release the info entry
snd_info_register - register the info entry
snd_info_unregister - de-register the info entry
snd_rawmidi_receive - receive the input data from the device
snd_rawmidi_transmit_empty - check whether the output buffer is empty
snd_rawmidi_transmit_peek - copy data from the internal buffer
snd_rawmidi_transmit_ack - acknowledge the transmission
snd_rawmidi_transmit - copy from the buffer to the device
snd_rawmidi_new - create a rawmidi instance
snd_rawmidi_set_ops - set the rawmidi operators
snd_request_card - try to load the card module
snd_lookup_minor_data - get user data of a registered device
snd_register_device - Register the ALSA device file for the card
snd_unregister_device - unregister the device on the given card
copy_to_user_fromio - copy data from mmio-space to user-space
copy_from_user_toio - copy data from user-space to mmio-space
snd_pcm_lib_preallocate_free_for_all - release all pre-allocated buffers on the pcm
snd_pcm_lib_preallocate_pages - pre-allocation for the given DMA type
snd_pcm_lib_preallocate_pages_for_all - pre-allocation for continous memory type (all substreams)
snd_pcm_sgbuf_ops_page - get the page struct at the given offset
snd_pcm_lib_malloc_pages - allocate the DMA buffer
snd_pcm_lib_free_pages - release the allocated DMA buffer.
snd_card_new - create and initialize a soundcard structure
snd_card_disconnect - disconnect all APIs from the file-operations (user space)
snd_card_free - frees given soundcard structure
snd_card_free_in_thread - call snd_card_free in thread
snd_card_register - register the soundcard
snd_component_add - add a component string
snd_card_file_add - add the file to the file list of the card
snd_card_file_remove - remove the file from the file list
snd_power_wait - wait until the power-state is changed.
snd_dma_program - program an ISA DMA transfer
snd_dma_disable - stop the ISA DMA transfer
snd_dma_pointer - return the current pointer to DMA transfer buffer in bytes
snd_ctl_new - create a control instance from the template
snd_ctl_new1 - create a control instance from the template
snd_ctl_free_one - release the control instance
snd_ctl_add - add the control instance to the card
snd_ctl_remove - remove the control from the card and release it
snd_ctl_remove_id - remove the control of the given id and release it
snd_ctl_rename_id - replace the id of a control on the card
snd_ctl_find_numid - find the control instance with the given number-id
snd_ctl_find_id - find the control instance with the given id
snd_pcm_set_ops - set the PCM operators
snd_pcm_set_sync - set the PCM sync id
snd_interval_refine - refine the interval value of configurator
snd_interval_ratnum - refine the interval value
snd_interval_list - refine the interval value from the list
snd_pcm_hw_rule_add - add the hw-constraint rule
snd_pcm_hw_constraint_integer -
snd_pcm_hw_constraint_minmax -
snd_pcm_hw_constraint_list -
snd_pcm_hw_constraint_ratnums -
snd_pcm_hw_constraint_ratdens -
snd_pcm_hw_constraint_msbits -
snd_pcm_hw_constraint_step -
snd_pcm_hw_constraint_pow2 -
snd_pcm_hw_param_value_min -
snd_pcm_hw_param_value_max -
snd_pcm_hw_param_first -
snd_pcm_hw_param_last -
snd_pcm_hw_param_set -
snd_pcm_hw_param_mask -
snd_pcm_hw_param_near -
snd_pcm_lib_ioctl - a generic PCM ioctl callback
snd_pcm_period_elapsed - update the pcm status for the next period
snd_hwdep_new - create a new hwdep instance
snd_pcm_stop -
snd_pcm_suspend -
snd_pcm_suspend_all -
snd_malloc_pages - allocate pages with the given size
snd_free_pages - release the pages
snd_dma_alloc_pages - allocate the buffer area according to the given type
snd_dma_alloc_pages_fallback - allocate the buffer area according to the given type with fallback
snd_dma_free_pages - release the allocated buffer
snd_dma_get_reserved_buf - get the reserved buffer for the given device
snd_dma_reserve_buf - reserve the buffer
23. 16x50 UART Driver
uart_handle_dcd_change - handle a change of carrier detect state
uart_handle_cts_change - handle a change of clear-to-send state
uart_update_timeout - update per-port FIFO timeout.
uart_get_baud_rate - return baud rate for a particular port
uart_get_divisor - return uart clock divisor
uart_register_driver - register a driver with the uart core layer
uart_unregister_driver - remove a driver from the uart core layer
uart_add_one_port - attach a driver-defined port structure
uart_remove_one_port - detach a driver defined port structure
serial8250_suspend_port - suspend one serial port
serial8250_resume_port - resume one serial port
serial8250_register_port - register a serial port
serial8250_unregister_port - remove a 16x50 serial port at runtime
24. Z85230 Support Library
z8530_interrupt - Handle an interrupt from a Z8530
z8530_sync_open - Open a Z8530 channel for PIO
z8530_sync_close - Close a PIO Z8530 channel
z8530_sync_dma_open - Open a Z8530 for DMA I/O
z8530_sync_dma_close - Close down DMA I/O
z8530_sync_txdma_open - Open a Z8530 for TX driven DMA
z8530_sync_txdma_close - Close down a TX driven DMA channel
z8530_describe - Uniformly describe a Z8530 port
z8530_init - Initialise a Z8530 device
z8530_shutdown - Shutdown a Z8530 device
z8530_channel_load - Load channel data
z8530_null_rx - Discard a packet
z8530_queue_xmit - Queue a packet
z8530_get_stats - Get network statistics
25. Frame Buffer Library
Frame Buffer Memory
Frame Buffer Colormap
Frame Buffer Video Mode Database
Frame Buffer Macintosh Video Mode Database
Frame Buffer Fonts