xref: /OK3568_Linux_fs/kernel/Documentation/core-api/kernel-api.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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