0001 ====================
0002 The Linux Kernel API
0003 ====================
0004
0005
0006 List Management Functions
0007 =========================
0008
0009 .. kernel-doc:: include/linux/list.h
0010 :internal:
0011
0012 Basic C Library Functions
0013 =========================
0014
0015 When writing drivers, you cannot in general use routines which are from
0016 the C Library. Some of the functions have been found generally useful
0017 and they are listed below. The behaviour of these functions may vary
0018 slightly from those defined by ANSI, and these deviations are noted in
0019 the text.
0020
0021 String Conversions
0022 ------------------
0023
0024 .. kernel-doc:: lib/vsprintf.c
0025 :export:
0026
0027 .. kernel-doc:: include/linux/kstrtox.h
0028 :functions: kstrtol kstrtoul
0029
0030 .. kernel-doc:: lib/kstrtox.c
0031 :export:
0032
0033 .. kernel-doc:: lib/string_helpers.c
0034 :export:
0035
0036 String Manipulation
0037 -------------------
0038
0039 .. kernel-doc:: lib/string.c
0040 :export:
0041
0042 .. kernel-doc:: include/linux/string.h
0043 :internal:
0044
0045 .. kernel-doc:: mm/util.c
0046 :functions: kstrdup kstrdup_const kstrndup kmemdup kmemdup_nul memdup_user
0047 vmemdup_user strndup_user memdup_user_nul
0048
0049 Basic Kernel Library Functions
0050 ==============================
0051
0052 The Linux kernel provides more basic utility functions.
0053
0054 Bit Operations
0055 --------------
0056
0057 .. kernel-doc:: include/asm-generic/bitops/instrumented-atomic.h
0058 :internal:
0059
0060 .. kernel-doc:: include/asm-generic/bitops/instrumented-non-atomic.h
0061 :internal:
0062
0063 .. kernel-doc:: include/asm-generic/bitops/instrumented-lock.h
0064 :internal:
0065
0066 Bitmap Operations
0067 -----------------
0068
0069 .. kernel-doc:: lib/bitmap.c
0070 :doc: bitmap introduction
0071
0072 .. kernel-doc:: include/linux/bitmap.h
0073 :doc: declare bitmap
0074
0075 .. kernel-doc:: include/linux/bitmap.h
0076 :doc: bitmap overview
0077
0078 .. kernel-doc:: include/linux/bitmap.h
0079 :doc: bitmap bitops
0080
0081 .. kernel-doc:: lib/bitmap.c
0082 :export:
0083
0084 .. kernel-doc:: lib/bitmap.c
0085 :internal:
0086
0087 .. kernel-doc:: include/linux/bitmap.h
0088 :internal:
0089
0090 Command-line Parsing
0091 --------------------
0092
0093 .. kernel-doc:: lib/cmdline.c
0094 :export:
0095
0096 Sorting
0097 -------
0098
0099 .. kernel-doc:: lib/sort.c
0100 :export:
0101
0102 .. kernel-doc:: lib/list_sort.c
0103 :export:
0104
0105 Text Searching
0106 --------------
0107
0108 .. kernel-doc:: lib/textsearch.c
0109 :doc: ts_intro
0110
0111 .. kernel-doc:: lib/textsearch.c
0112 :export:
0113
0114 .. kernel-doc:: include/linux/textsearch.h
0115 :functions: textsearch_find textsearch_next \
0116 textsearch_get_pattern textsearch_get_pattern_len
0117
0118 CRC and Math Functions in Linux
0119 ===============================
0120
0121 CRC Functions
0122 -------------
0123
0124 .. kernel-doc:: lib/crc4.c
0125 :export:
0126
0127 .. kernel-doc:: lib/crc7.c
0128 :export:
0129
0130 .. kernel-doc:: lib/crc8.c
0131 :export:
0132
0133 .. kernel-doc:: lib/crc16.c
0134 :export:
0135
0136 .. kernel-doc:: lib/crc32.c
0137
0138 .. kernel-doc:: lib/crc-ccitt.c
0139 :export:
0140
0141 .. kernel-doc:: lib/crc-itu-t.c
0142 :export:
0143
0144 Base 2 log and power Functions
0145 ------------------------------
0146
0147 .. kernel-doc:: include/linux/log2.h
0148 :internal:
0149
0150 Integer power Functions
0151 -----------------------
0152
0153 .. kernel-doc:: lib/math/int_pow.c
0154 :export:
0155
0156 .. kernel-doc:: lib/math/int_sqrt.c
0157 :export:
0158
0159 Division Functions
0160 ------------------
0161
0162 .. kernel-doc:: include/asm-generic/div64.h
0163 :functions: do_div
0164
0165 .. kernel-doc:: include/linux/math64.h
0166 :internal:
0167
0168 .. kernel-doc:: lib/math/div64.c
0169 :functions: div_s64_rem div64_u64_rem div64_u64 div64_s64
0170
0171 .. kernel-doc:: lib/math/gcd.c
0172 :export:
0173
0174 UUID/GUID
0175 ---------
0176
0177 .. kernel-doc:: lib/uuid.c
0178 :export:
0179
0180 Kernel IPC facilities
0181 =====================
0182
0183 IPC utilities
0184 -------------
0185
0186 .. kernel-doc:: ipc/util.c
0187 :internal:
0188
0189 FIFO Buffer
0190 ===========
0191
0192 kfifo interface
0193 ---------------
0194
0195 .. kernel-doc:: include/linux/kfifo.h
0196 :internal:
0197
0198 relay interface support
0199 =======================
0200
0201 Relay interface support is designed to provide an efficient mechanism
0202 for tools and facilities to relay large amounts of data from kernel
0203 space to user space.
0204
0205 relay interface
0206 ---------------
0207
0208 .. kernel-doc:: kernel/relay.c
0209 :export:
0210
0211 .. kernel-doc:: kernel/relay.c
0212 :internal:
0213
0214 Module Support
0215 ==============
0216
0217 Module Loading
0218 --------------
0219
0220 .. kernel-doc:: kernel/kmod.c
0221 :export:
0222
0223 Inter Module support
0224 --------------------
0225
0226 Refer to the files in kernel/module/ for more information.
0227
0228 Hardware Interfaces
0229 ===================
0230
0231 DMA Channels
0232 ------------
0233
0234 .. kernel-doc:: kernel/dma.c
0235 :export:
0236
0237 Resources Management
0238 --------------------
0239
0240 .. kernel-doc:: kernel/resource.c
0241 :internal:
0242
0243 .. kernel-doc:: kernel/resource.c
0244 :export:
0245
0246 MTRR Handling
0247 -------------
0248
0249 .. kernel-doc:: arch/x86/kernel/cpu/mtrr/mtrr.c
0250 :export:
0251
0252 Security Framework
0253 ==================
0254
0255 .. kernel-doc:: security/security.c
0256 :internal:
0257
0258 .. kernel-doc:: security/inode.c
0259 :export:
0260
0261 Audit Interfaces
0262 ================
0263
0264 .. kernel-doc:: kernel/audit.c
0265 :export:
0266
0267 .. kernel-doc:: kernel/auditsc.c
0268 :internal:
0269
0270 .. kernel-doc:: kernel/auditfilter.c
0271 :internal:
0272
0273 Accounting Framework
0274 ====================
0275
0276 .. kernel-doc:: kernel/acct.c
0277 :internal:
0278
0279 Block Devices
0280 =============
0281
0282 .. kernel-doc:: include/linux/bio.h
0283 .. kernel-doc:: block/blk-core.c
0284 :export:
0285
0286 .. kernel-doc:: block/blk-core.c
0287 :internal:
0288
0289 .. kernel-doc:: block/blk-map.c
0290 :export:
0291
0292 .. kernel-doc:: block/blk-sysfs.c
0293 :internal:
0294
0295 .. kernel-doc:: block/blk-settings.c
0296 :export:
0297
0298 .. kernel-doc:: block/blk-flush.c
0299 :export:
0300
0301 .. kernel-doc:: block/blk-lib.c
0302 :export:
0303
0304 .. kernel-doc:: block/blk-integrity.c
0305 :export:
0306
0307 .. kernel-doc:: kernel/trace/blktrace.c
0308 :internal:
0309
0310 .. kernel-doc:: block/genhd.c
0311 :internal:
0312
0313 .. kernel-doc:: block/genhd.c
0314 :export:
0315
0316 .. kernel-doc:: block/bdev.c
0317 :export:
0318
0319 Char devices
0320 ============
0321
0322 .. kernel-doc:: fs/char_dev.c
0323 :export:
0324
0325 Clock Framework
0326 ===============
0327
0328 The clock framework defines programming interfaces to support software
0329 management of the system clock tree. This framework is widely used with
0330 System-On-Chip (SOC) platforms to support power management and various
0331 devices which may need custom clock rates. Note that these "clocks"
0332 don't relate to timekeeping or real time clocks (RTCs), each of which
0333 have separate frameworks. These :c:type:`struct clk <clk>`
0334 instances may be used to manage for example a 96 MHz signal that is used
0335 to shift bits into and out of peripherals or busses, or otherwise
0336 trigger synchronous state machine transitions in system hardware.
0337
0338 Power management is supported by explicit software clock gating: unused
0339 clocks are disabled, so the system doesn't waste power changing the
0340 state of transistors that aren't in active use. On some systems this may
0341 be backed by hardware clock gating, where clocks are gated without being
0342 disabled in software. Sections of chips that are powered but not clocked
0343 may be able to retain their last state. This low power state is often
0344 called a *retention mode*. This mode still incurs leakage currents,
0345 especially with finer circuit geometries, but for CMOS circuits power is
0346 mostly used by clocked state changes.
0347
0348 Power-aware drivers only enable their clocks when the device they manage
0349 is in active use. Also, system sleep states often differ according to
0350 which clock domains are active: while a "standby" state may allow wakeup
0351 from several active domains, a "mem" (suspend-to-RAM) state may require
0352 a more wholesale shutdown of clocks derived from higher speed PLLs and
0353 oscillators, limiting the number of possible wakeup event sources. A
0354 driver's suspend method may need to be aware of system-specific clock
0355 constraints on the target sleep state.
0356
0357 Some platforms support programmable clock generators. These can be used
0358 by external chips of various kinds, such as other CPUs, multimedia
0359 codecs, and devices with strict requirements for interface clocking.
0360
0361 .. kernel-doc:: include/linux/clk.h
0362 :internal:
0363
0364 Synchronization Primitives
0365 ==========================
0366
0367 Read-Copy Update (RCU)
0368 ----------------------
0369
0370 .. kernel-doc:: include/linux/rcupdate.h
0371
0372 .. kernel-doc:: kernel/rcu/tree.c
0373
0374 .. kernel-doc:: kernel/rcu/tree_exp.h
0375
0376 .. kernel-doc:: kernel/rcu/update.c
0377
0378 .. kernel-doc:: include/linux/srcu.h
0379
0380 .. kernel-doc:: kernel/rcu/srcutree.c
0381
0382 .. kernel-doc:: include/linux/rculist_bl.h
0383
0384 .. kernel-doc:: include/linux/rculist.h
0385
0386 .. kernel-doc:: include/linux/rculist_nulls.h
0387
0388 .. kernel-doc:: include/linux/rcu_sync.h
0389
0390 .. kernel-doc:: kernel/rcu/sync.c