1*4882a593Smuzhiyun==================== 2*4882a593SmuzhiyunThe Linux Kernel API 3*4882a593Smuzhiyun==================== 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunList Management Functions 7*4882a593Smuzhiyun========================= 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun.. kernel-doc:: include/linux/list.h 10*4882a593Smuzhiyun :internal: 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunBasic C Library Functions 13*4882a593Smuzhiyun========================= 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunWhen writing drivers, you cannot in general use routines which are from 16*4882a593Smuzhiyunthe C Library. Some of the functions have been found generally useful 17*4882a593Smuzhiyunand they are listed below. The behaviour of these functions may vary 18*4882a593Smuzhiyunslightly from those defined by ANSI, and these deviations are noted in 19*4882a593Smuzhiyunthe text. 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunString Conversions 22*4882a593Smuzhiyun------------------ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun.. kernel-doc:: lib/vsprintf.c 25*4882a593Smuzhiyun :export: 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun.. kernel-doc:: include/linux/kernel.h 28*4882a593Smuzhiyun :functions: kstrtol 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun.. kernel-doc:: include/linux/kernel.h 31*4882a593Smuzhiyun :functions: kstrtoul 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun.. kernel-doc:: lib/kstrtox.c 34*4882a593Smuzhiyun :export: 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun.. kernel-doc:: lib/string_helpers.c 37*4882a593Smuzhiyun :export: 38*4882a593Smuzhiyun 39*4882a593SmuzhiyunString Manipulation 40*4882a593Smuzhiyun------------------- 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun.. kernel-doc:: lib/string.c 43*4882a593Smuzhiyun :export: 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun.. kernel-doc:: include/linux/string.h 46*4882a593Smuzhiyun :internal: 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun.. kernel-doc:: mm/util.c 49*4882a593Smuzhiyun :functions: kstrdup kstrdup_const kstrndup kmemdup kmemdup_nul memdup_user 50*4882a593Smuzhiyun vmemdup_user strndup_user memdup_user_nul 51*4882a593Smuzhiyun 52*4882a593SmuzhiyunBasic Kernel Library Functions 53*4882a593Smuzhiyun============================== 54*4882a593Smuzhiyun 55*4882a593SmuzhiyunThe Linux kernel provides more basic utility functions. 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunBit Operations 58*4882a593Smuzhiyun-------------- 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun.. kernel-doc:: include/asm-generic/bitops/instrumented-atomic.h 61*4882a593Smuzhiyun :internal: 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun.. kernel-doc:: include/asm-generic/bitops/instrumented-non-atomic.h 64*4882a593Smuzhiyun :internal: 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun.. kernel-doc:: include/asm-generic/bitops/instrumented-lock.h 67*4882a593Smuzhiyun :internal: 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunBitmap Operations 70*4882a593Smuzhiyun----------------- 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun.. kernel-doc:: lib/bitmap.c 73*4882a593Smuzhiyun :doc: bitmap introduction 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun.. kernel-doc:: include/linux/bitmap.h 76*4882a593Smuzhiyun :doc: declare bitmap 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun.. kernel-doc:: include/linux/bitmap.h 79*4882a593Smuzhiyun :doc: bitmap overview 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun.. kernel-doc:: include/linux/bitmap.h 82*4882a593Smuzhiyun :doc: bitmap bitops 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun.. kernel-doc:: lib/bitmap.c 85*4882a593Smuzhiyun :export: 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun.. kernel-doc:: lib/bitmap.c 88*4882a593Smuzhiyun :internal: 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun.. kernel-doc:: include/linux/bitmap.h 91*4882a593Smuzhiyun :internal: 92*4882a593Smuzhiyun 93*4882a593SmuzhiyunCommand-line Parsing 94*4882a593Smuzhiyun-------------------- 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun.. kernel-doc:: lib/cmdline.c 97*4882a593Smuzhiyun :export: 98*4882a593Smuzhiyun 99*4882a593SmuzhiyunSorting 100*4882a593Smuzhiyun------- 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun.. kernel-doc:: lib/sort.c 103*4882a593Smuzhiyun :export: 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun.. kernel-doc:: lib/list_sort.c 106*4882a593Smuzhiyun :export: 107*4882a593Smuzhiyun 108*4882a593SmuzhiyunText Searching 109*4882a593Smuzhiyun-------------- 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun.. kernel-doc:: lib/textsearch.c 112*4882a593Smuzhiyun :doc: ts_intro 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun.. kernel-doc:: lib/textsearch.c 115*4882a593Smuzhiyun :export: 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun.. kernel-doc:: include/linux/textsearch.h 118*4882a593Smuzhiyun :functions: textsearch_find textsearch_next \ 119*4882a593Smuzhiyun textsearch_get_pattern textsearch_get_pattern_len 120*4882a593Smuzhiyun 121*4882a593SmuzhiyunCRC and Math Functions in Linux 122*4882a593Smuzhiyun=============================== 123*4882a593Smuzhiyun 124*4882a593SmuzhiyunCRC Functions 125*4882a593Smuzhiyun------------- 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun.. kernel-doc:: lib/crc4.c 128*4882a593Smuzhiyun :export: 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun.. kernel-doc:: lib/crc7.c 131*4882a593Smuzhiyun :export: 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun.. kernel-doc:: lib/crc8.c 134*4882a593Smuzhiyun :export: 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun.. kernel-doc:: lib/crc16.c 137*4882a593Smuzhiyun :export: 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun.. kernel-doc:: lib/crc32.c 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun.. kernel-doc:: lib/crc-ccitt.c 142*4882a593Smuzhiyun :export: 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun.. kernel-doc:: lib/crc-itu-t.c 145*4882a593Smuzhiyun :export: 146*4882a593Smuzhiyun 147*4882a593SmuzhiyunBase 2 log and power Functions 148*4882a593Smuzhiyun------------------------------ 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun.. kernel-doc:: include/linux/log2.h 151*4882a593Smuzhiyun :internal: 152*4882a593Smuzhiyun 153*4882a593SmuzhiyunInteger power Functions 154*4882a593Smuzhiyun----------------------- 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun.. kernel-doc:: lib/math/int_pow.c 157*4882a593Smuzhiyun :export: 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun.. kernel-doc:: lib/math/int_sqrt.c 160*4882a593Smuzhiyun :export: 161*4882a593Smuzhiyun 162*4882a593SmuzhiyunDivision Functions 163*4882a593Smuzhiyun------------------ 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun.. kernel-doc:: include/asm-generic/div64.h 166*4882a593Smuzhiyun :functions: do_div 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun.. kernel-doc:: include/linux/math64.h 169*4882a593Smuzhiyun :internal: 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun.. kernel-doc:: lib/math/div64.c 172*4882a593Smuzhiyun :functions: div_s64_rem div64_u64_rem div64_u64 div64_s64 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun.. kernel-doc:: lib/math/gcd.c 175*4882a593Smuzhiyun :export: 176*4882a593Smuzhiyun 177*4882a593SmuzhiyunUUID/GUID 178*4882a593Smuzhiyun--------- 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun.. kernel-doc:: lib/uuid.c 181*4882a593Smuzhiyun :export: 182*4882a593Smuzhiyun 183*4882a593SmuzhiyunKernel IPC facilities 184*4882a593Smuzhiyun===================== 185*4882a593Smuzhiyun 186*4882a593SmuzhiyunIPC utilities 187*4882a593Smuzhiyun------------- 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun.. kernel-doc:: ipc/util.c 190*4882a593Smuzhiyun :internal: 191*4882a593Smuzhiyun 192*4882a593SmuzhiyunFIFO Buffer 193*4882a593Smuzhiyun=========== 194*4882a593Smuzhiyun 195*4882a593Smuzhiyunkfifo interface 196*4882a593Smuzhiyun--------------- 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun.. kernel-doc:: include/linux/kfifo.h 199*4882a593Smuzhiyun :internal: 200*4882a593Smuzhiyun 201*4882a593Smuzhiyunrelay interface support 202*4882a593Smuzhiyun======================= 203*4882a593Smuzhiyun 204*4882a593SmuzhiyunRelay interface support is designed to provide an efficient mechanism 205*4882a593Smuzhiyunfor tools and facilities to relay large amounts of data from kernel 206*4882a593Smuzhiyunspace to user space. 207*4882a593Smuzhiyun 208*4882a593Smuzhiyunrelay interface 209*4882a593Smuzhiyun--------------- 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun.. kernel-doc:: kernel/relay.c 212*4882a593Smuzhiyun :export: 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun.. kernel-doc:: kernel/relay.c 215*4882a593Smuzhiyun :internal: 216*4882a593Smuzhiyun 217*4882a593SmuzhiyunModule Support 218*4882a593Smuzhiyun============== 219*4882a593Smuzhiyun 220*4882a593SmuzhiyunModule Loading 221*4882a593Smuzhiyun-------------- 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun.. kernel-doc:: kernel/kmod.c 224*4882a593Smuzhiyun :export: 225*4882a593Smuzhiyun 226*4882a593SmuzhiyunInter Module support 227*4882a593Smuzhiyun-------------------- 228*4882a593Smuzhiyun 229*4882a593SmuzhiyunRefer to the file kernel/module.c for more information. 230*4882a593Smuzhiyun 231*4882a593SmuzhiyunHardware Interfaces 232*4882a593Smuzhiyun=================== 233*4882a593Smuzhiyun 234*4882a593SmuzhiyunDMA Channels 235*4882a593Smuzhiyun------------ 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun.. kernel-doc:: kernel/dma.c 238*4882a593Smuzhiyun :export: 239*4882a593Smuzhiyun 240*4882a593SmuzhiyunResources Management 241*4882a593Smuzhiyun-------------------- 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun.. kernel-doc:: kernel/resource.c 244*4882a593Smuzhiyun :internal: 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun.. kernel-doc:: kernel/resource.c 247*4882a593Smuzhiyun :export: 248*4882a593Smuzhiyun 249*4882a593SmuzhiyunMTRR Handling 250*4882a593Smuzhiyun------------- 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun.. kernel-doc:: arch/x86/kernel/cpu/mtrr/mtrr.c 253*4882a593Smuzhiyun :export: 254*4882a593Smuzhiyun 255*4882a593SmuzhiyunSecurity Framework 256*4882a593Smuzhiyun================== 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun.. kernel-doc:: security/security.c 259*4882a593Smuzhiyun :internal: 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun.. kernel-doc:: security/inode.c 262*4882a593Smuzhiyun :export: 263*4882a593Smuzhiyun 264*4882a593SmuzhiyunAudit Interfaces 265*4882a593Smuzhiyun================ 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun.. kernel-doc:: kernel/audit.c 268*4882a593Smuzhiyun :export: 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun.. kernel-doc:: kernel/auditsc.c 271*4882a593Smuzhiyun :internal: 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun.. kernel-doc:: kernel/auditfilter.c 274*4882a593Smuzhiyun :internal: 275*4882a593Smuzhiyun 276*4882a593SmuzhiyunAccounting Framework 277*4882a593Smuzhiyun==================== 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun.. kernel-doc:: kernel/acct.c 280*4882a593Smuzhiyun :internal: 281*4882a593Smuzhiyun 282*4882a593SmuzhiyunBlock Devices 283*4882a593Smuzhiyun============= 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun.. kernel-doc:: block/blk-core.c 286*4882a593Smuzhiyun :export: 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun.. kernel-doc:: block/blk-core.c 289*4882a593Smuzhiyun :internal: 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun.. kernel-doc:: block/blk-map.c 292*4882a593Smuzhiyun :export: 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun.. kernel-doc:: block/blk-sysfs.c 295*4882a593Smuzhiyun :internal: 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun.. kernel-doc:: block/blk-settings.c 298*4882a593Smuzhiyun :export: 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun.. kernel-doc:: block/blk-exec.c 301*4882a593Smuzhiyun :export: 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun.. kernel-doc:: block/blk-flush.c 304*4882a593Smuzhiyun :export: 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun.. kernel-doc:: block/blk-lib.c 307*4882a593Smuzhiyun :export: 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun.. kernel-doc:: block/blk-integrity.c 310*4882a593Smuzhiyun :export: 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun.. kernel-doc:: kernel/trace/blktrace.c 313*4882a593Smuzhiyun :internal: 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun.. kernel-doc:: block/genhd.c 316*4882a593Smuzhiyun :internal: 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun.. kernel-doc:: block/genhd.c 319*4882a593Smuzhiyun :export: 320*4882a593Smuzhiyun 321*4882a593SmuzhiyunChar devices 322*4882a593Smuzhiyun============ 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun.. kernel-doc:: fs/char_dev.c 325*4882a593Smuzhiyun :export: 326*4882a593Smuzhiyun 327*4882a593SmuzhiyunClock Framework 328*4882a593Smuzhiyun=============== 329*4882a593Smuzhiyun 330*4882a593SmuzhiyunThe clock framework defines programming interfaces to support software 331*4882a593Smuzhiyunmanagement of the system clock tree. This framework is widely used with 332*4882a593SmuzhiyunSystem-On-Chip (SOC) platforms to support power management and various 333*4882a593Smuzhiyundevices which may need custom clock rates. Note that these "clocks" 334*4882a593Smuzhiyundon't relate to timekeeping or real time clocks (RTCs), each of which 335*4882a593Smuzhiyunhave separate frameworks. These :c:type:`struct clk <clk>` 336*4882a593Smuzhiyuninstances may be used to manage for example a 96 MHz signal that is used 337*4882a593Smuzhiyunto shift bits into and out of peripherals or busses, or otherwise 338*4882a593Smuzhiyuntrigger synchronous state machine transitions in system hardware. 339*4882a593Smuzhiyun 340*4882a593SmuzhiyunPower management is supported by explicit software clock gating: unused 341*4882a593Smuzhiyunclocks are disabled, so the system doesn't waste power changing the 342*4882a593Smuzhiyunstate of transistors that aren't in active use. On some systems this may 343*4882a593Smuzhiyunbe backed by hardware clock gating, where clocks are gated without being 344*4882a593Smuzhiyundisabled in software. Sections of chips that are powered but not clocked 345*4882a593Smuzhiyunmay be able to retain their last state. This low power state is often 346*4882a593Smuzhiyuncalled a *retention mode*. This mode still incurs leakage currents, 347*4882a593Smuzhiyunespecially with finer circuit geometries, but for CMOS circuits power is 348*4882a593Smuzhiyunmostly used by clocked state changes. 349*4882a593Smuzhiyun 350*4882a593SmuzhiyunPower-aware drivers only enable their clocks when the device they manage 351*4882a593Smuzhiyunis in active use. Also, system sleep states often differ according to 352*4882a593Smuzhiyunwhich clock domains are active: while a "standby" state may allow wakeup 353*4882a593Smuzhiyunfrom several active domains, a "mem" (suspend-to-RAM) state may require 354*4882a593Smuzhiyuna more wholesale shutdown of clocks derived from higher speed PLLs and 355*4882a593Smuzhiyunoscillators, limiting the number of possible wakeup event sources. A 356*4882a593Smuzhiyundriver's suspend method may need to be aware of system-specific clock 357*4882a593Smuzhiyunconstraints on the target sleep state. 358*4882a593Smuzhiyun 359*4882a593SmuzhiyunSome platforms support programmable clock generators. These can be used 360*4882a593Smuzhiyunby external chips of various kinds, such as other CPUs, multimedia 361*4882a593Smuzhiyuncodecs, and devices with strict requirements for interface clocking. 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun.. kernel-doc:: include/linux/clk.h 364*4882a593Smuzhiyun :internal: 365*4882a593Smuzhiyun 366*4882a593SmuzhiyunSynchronization Primitives 367*4882a593Smuzhiyun========================== 368*4882a593Smuzhiyun 369*4882a593SmuzhiyunRead-Copy Update (RCU) 370*4882a593Smuzhiyun---------------------- 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun.. kernel-doc:: include/linux/rcupdate.h 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun.. kernel-doc:: kernel/rcu/tree.c 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun.. kernel-doc:: kernel/rcu/tree_exp.h 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun.. kernel-doc:: kernel/rcu/update.c 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun.. kernel-doc:: include/linux/srcu.h 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun.. kernel-doc:: kernel/rcu/srcutree.c 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun.. kernel-doc:: include/linux/rculist_bl.h 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun.. kernel-doc:: include/linux/rculist.h 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun.. kernel-doc:: include/linux/rculist_nulls.h 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun.. kernel-doc:: include/linux/rcu_sync.h 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun.. kernel-doc:: kernel/rcu/sync.c 393