]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - Documentation/DocBook/kernel-api.tmpl
[PATCH] enforce proper tlb flush in unmap_hugepage_range
[mirror_ubuntu-zesty-kernel.git] / Documentation / DocBook / kernel-api.tmpl
CommitLineData
1da177e4
LT
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
4
5<book id="LinuxKernelAPI">
6 <bookinfo>
7 <title>The Linux Kernel API</title>
8
9 <legalnotice>
10 <para>
11 This documentation is free software; you can redistribute
12 it and/or modify it under the terms of the GNU General Public
13 License as published by the Free Software Foundation; either
14 version 2 of the License, or (at your option) any later
15 version.
16 </para>
17
18 <para>
19 This program is distributed in the hope that it will be
20 useful, but WITHOUT ANY WARRANTY; without even the implied
21 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 See the GNU General Public License for more details.
23 </para>
24
25 <para>
26 You should have received a copy of the GNU General Public
27 License along with this program; if not, write to the Free
28 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 MA 02111-1307 USA
30 </para>
31
32 <para>
33 For more details see the file COPYING in the source
34 distribution of Linux.
35 </para>
36 </legalnotice>
37 </bookinfo>
38
39<toc></toc>
40
41 <chapter id="Basics">
42 <title>Driver Basics</title>
43 <sect1><title>Driver Entry and Exit points</title>
44!Iinclude/linux/init.h
45 </sect1>
46
47 <sect1><title>Atomic and pointer manipulation</title>
48!Iinclude/asm-i386/atomic.h
49!Iinclude/asm-i386/unaligned.h
50 </sect1>
51
1da177e4 52 <sect1><title>Delaying, scheduling, and timer routines</title>
4dc3b16b
PP
53!Iinclude/linux/sched.h
54!Ekernel/sched.c
55!Ekernel/timer.c
df78488d
TG
56 </sect1>
57 <sect1><title>High-resolution timers</title>
58!Iinclude/linux/ktime.h
59!Iinclude/linux/hrtimer.h
60!Ekernel/hrtimer.c
0fcb78c2
REB
61 </sect1>
62 <sect1><title>Workqueues and Kevents</title>
63!Ekernel/workqueue.c
1da177e4 64 </sect1>
4dc3b16b
PP
65 <sect1><title>Internal Functions</title>
66!Ikernel/exit.c
67!Ikernel/signal.c
9e37bd30
RD
68!Iinclude/linux/kthread.h
69!Ekernel/kthread.c
4dc3b16b
PP
70 </sect1>
71
72 <sect1><title>Kernel objects manipulation</title>
73<!--
74X!Iinclude/linux/kobject.h
75-->
76!Elib/kobject.c
77 </sect1>
78
79 <sect1><title>Kernel utility functions</title>
80!Iinclude/linux/kernel.h
ddad86c2 81!Ekernel/printk.c
4dc3b16b
PP
82!Ekernel/panic.c
83!Ekernel/sys.c
84!Ekernel/rcupdate.c
85 </sect1>
86
1da177e4
LT
87 </chapter>
88
89 <chapter id="adt">
90 <title>Data Types</title>
91 <sect1><title>Doubly Linked Lists</title>
92!Iinclude/linux/list.h
93 </sect1>
94 </chapter>
95
96 <chapter id="libc">
97 <title>Basic C Library Functions</title>
98
99 <para>
100 When writing drivers, you cannot in general use routines which are
101 from the C Library. Some of the functions have been found generally
102 useful and they are listed below. The behaviour of these functions
103 may vary slightly from those defined by ANSI, and these deviations
104 are noted in the text.
105 </para>
106
107 <sect1><title>String Conversions</title>
108!Ilib/vsprintf.c
109!Elib/vsprintf.c
110 </sect1>
111 <sect1><title>String Manipulation</title>
4dc3b16b
PP
112<!-- All functions are exported at now
113X!Ilib/string.c
114 -->
1da177e4
LT
115!Elib/string.c
116 </sect1>
117 <sect1><title>Bit Operations</title>
118!Iinclude/asm-i386/bitops.h
119 </sect1>
28e83baa
RD
120 </chapter>
121
122 <chapter id="kernel-lib">
123 <title>Basic Kernel Library Functions</title>
124
125 <para>
126 The Linux kernel provides more basic utility functions.
127 </para>
128
6e1907ff
RD
129 <sect1><title>Bitmap Operations</title>
130!Elib/bitmap.c
131!Ilib/bitmap.c
132 </sect1>
28e83baa
RD
133
134 <sect1><title>Command-line Parsing</title>
135!Elib/cmdline.c
136 </sect1>
2f72100c
RD
137
138 <sect1><title>CRC Functions</title>
139!Elib/crc16.c
140!Elib/crc32.c
141!Elib/crc-ccitt.c
142 </sect1>
1da177e4
LT
143 </chapter>
144
145 <chapter id="mm">
146 <title>Memory Management in Linux</title>
147 <sect1><title>The Slab Cache</title>
800590f5 148!Iinclude/linux/slab.h
1da177e4
LT
149!Emm/slab.c
150 </sect1>
151 <sect1><title>User Space Memory Access</title>
152!Iinclude/asm-i386/uaccess.h
8f2709b5 153!Earch/i386/lib/usercopy.c
1da177e4 154 </sect1>
4dc3b16b
PP
155 <sect1><title>More Memory Management Functions</title>
156!Iinclude/linux/rmap.h
157!Emm/readahead.c
158!Emm/filemap.c
159!Emm/memory.c
160!Emm/vmalloc.c
161!Emm/mempool.c
162!Emm/page-writeback.c
163!Emm/truncate.c
164 </sect1>
165 </chapter>
166
167
168 <chapter id="ipc">
169 <title>Kernel IPC facilities</title>
170
171 <sect1><title>IPC utilities</title>
172!Iipc/util.c
173 </sect1>
1da177e4
LT
174 </chapter>
175
176 <chapter id="kfifo">
177 <title>FIFO Buffer</title>
178 <sect1><title>kfifo interface</title>
179!Iinclude/linux/kfifo.h
180!Ekernel/kfifo.c
181 </sect1>
182 </chapter>
183
5b217fa7
RD
184 <chapter id="vfs">
185 <title>The Linux VFS</title>
186 <sect1><title>The Filesystem types</title>
187!Iinclude/linux/fs.h
188 </sect1>
189 <sect1><title>The Directory Cache</title>
190!Efs/dcache.c
191!Iinclude/linux/dcache.h
192 </sect1>
193 <sect1><title>Inode Handling</title>
194!Efs/inode.c
195!Efs/bad_inode.c
196 </sect1>
197 <sect1><title>Registration and Superblocks</title>
198!Efs/super.c
199 </sect1>
200 <sect1><title>File Locks</title>
201!Efs/locks.c
202!Ifs/locks.c
203 </sect1>
204 <sect1><title>Other Functions</title>
205!Efs/mpage.c
206!Efs/namei.c
207!Efs/buffer.c
208!Efs/bio.c
209!Efs/seq_file.c
210!Efs/filesystems.c
211!Efs/fs-writeback.c
212!Efs/block_dev.c
213 </sect1>
214 </chapter>
215
1da177e4
LT
216 <chapter id="proc">
217 <title>The proc filesystem</title>
218
219 <sect1><title>sysctl interface</title>
220!Ekernel/sysctl.c
221 </sect1>
4dc3b16b
PP
222
223 <sect1><title>proc filesystem interface</title>
224!Ifs/proc/base.c
225 </sect1>
1da177e4
LT
226 </chapter>
227
5b217fa7
RD
228 <chapter id="sysfs">
229 <title>The Filesystem for Exporting Kernel Objects</title>
230!Efs/sysfs/file.c
231!Efs/sysfs/symlink.c
232!Efs/sysfs/bin.c
233 </chapter>
234
1da177e4
LT
235 <chapter id="debugfs">
236 <title>The debugfs filesystem</title>
237
238 <sect1><title>debugfs interface</title>
239!Efs/debugfs/inode.c
240!Efs/debugfs/file.c
241 </sect1>
242 </chapter>
243
4c78a663
RD
244 <chapter id="relayfs">
245 <title>relay interface support</title>
246
247 <para>
248 Relay interface support
249 is designed to provide an efficient mechanism for tools and
250 facilities to relay large amounts of data from kernel space to
251 user space.
252 </para>
253
254 <sect1><title>relay interface</title>
255!Ekernel/relay.c
256!Ikernel/relay.c
257 </sect1>
258 </chapter>
259
1da177e4
LT
260 <chapter id="netcore">
261 <title>Linux Networking</title>
4dc3b16b
PP
262 <sect1><title>Networking Base Types</title>
263!Iinclude/linux/net.h
264 </sect1>
1da177e4
LT
265 <sect1><title>Socket Buffer Functions</title>
266!Iinclude/linux/skbuff.h
4dc3b16b
PP
267!Iinclude/net/sock.h
268!Enet/socket.c
1da177e4 269!Enet/core/skbuff.c
4dc3b16b
PP
270!Enet/core/sock.c
271!Enet/core/datagram.c
272!Enet/core/stream.c
1da177e4
LT
273 </sect1>
274 <sect1><title>Socket Filter</title>
275!Enet/core/filter.c
276 </sect1>
277 <sect1><title>Generic Network Statistics</title>
278!Iinclude/linux/gen_stats.h
279!Enet/core/gen_stats.c
280!Enet/core/gen_estimator.c
281 </sect1>
4dc3b16b
PP
282 <sect1><title>SUN RPC subsystem</title>
283<!-- The !D functionality is not perfect, garbage has to be protected by comments
284!Dnet/sunrpc/sunrpc_syms.c
285-->
286!Enet/sunrpc/xdr.c
287!Enet/sunrpc/svcsock.c
288!Enet/sunrpc/sched.c
289 </sect1>
1da177e4
LT
290 </chapter>
291
292 <chapter id="netdev">
293 <title>Network device support</title>
294 <sect1><title>Driver Support</title>
295!Enet/core/dev.c
c2da8aca 296!Enet/ethernet/eth.c
461ddf3b
RD
297!Iinclude/linux/etherdevice.h
298<!-- FIXME: Removed for now since no structured comments in source
299X!Enet/core/wireless.c
300-->
1da177e4
LT
301 </sect1>
302 <sect1><title>Synchronous PPP</title>
303!Edrivers/net/wan/syncppp.c
304 </sect1>
305 </chapter>
306
307 <chapter id="modload">
308 <title>Module Support</title>
309 <sect1><title>Module Loading</title>
310!Ekernel/kmod.c
311 </sect1>
312 <sect1><title>Inter Module support</title>
313 <para>
314 Refer to the file kernel/module.c for more information.
315 </para>
316<!-- FIXME: Removed for now since no structured comments in source
317X!Ekernel/module.c
318-->
319 </sect1>
320 </chapter>
321
322 <chapter id="hardware">
323 <title>Hardware Interfaces</title>
324 <sect1><title>Interrupt Handling</title>
8f2709b5 325!Ekernel/irq/manage.c
1da177e4
LT
326 </sect1>
327
eed34d0f
RD
328 <sect1><title>DMA Channels</title>
329!Ekernel/dma.c
330 </sect1>
331
4dc3b16b 332 <sect1><title>Resources Management</title>
2b54960b 333!Ikernel/resource.c
e1ca66d1 334!Ekernel/resource.c
4dc3b16b
PP
335 </sect1>
336
1da177e4
LT
337 <sect1><title>MTRR Handling</title>
338!Earch/i386/kernel/cpu/mtrr/main.c
339 </sect1>
b0ef371e 340
1da177e4
LT
341 <sect1><title>PCI Support Library</title>
342!Edrivers/pci/pci.c
4dc3b16b
PP
343!Edrivers/pci/pci-driver.c
344!Edrivers/pci/remove.c
345!Edrivers/pci/pci-acpi.c
d75763d2 346!Edrivers/pci/search.c
4dc3b16b
PP
347!Edrivers/pci/msi.c
348!Edrivers/pci/bus.c
f05aab8e
RD
349<!-- FIXME: Removed for now since no structured comments in source
350X!Edrivers/pci/hotplug.c
351-->
4dc3b16b
PP
352!Edrivers/pci/probe.c
353!Edrivers/pci/rom.c
1da177e4
LT
354 </sect1>
355 <sect1><title>PCI Hotplug Support Library</title>
356!Edrivers/pci/hotplug/pci_hotplug_core.c
357 </sect1>
358 <sect1><title>MCA Architecture</title>
359 <sect2><title>MCA Device Functions</title>
360 <para>
361 Refer to the file arch/i386/kernel/mca.c for more information.
362 </para>
363<!-- FIXME: Removed for now since no structured comments in source
364X!Earch/i386/kernel/mca.c
365-->
366 </sect2>
367 <sect2><title>MCA Bus DMA</title>
368!Iinclude/asm-i386/mca_dma.h
369 </sect2>
370 </sect1>
371 </chapter>
372
b0ef371e
RD
373 <chapter id="firmware">
374 <title>Firmware Interfaces</title>
375 <sect1><title>DMI Interfaces</title>
376!Edrivers/firmware/dmi_scan.c
377 </sect1>
378 </chapter>
379
1da177e4
LT
380 <chapter id="security">
381 <title>Security Framework</title>
382!Esecurity/security.c
383 </chapter>
384
862f5f01
RD
385 <chapter id="audit">
386 <title>Audit Interfaces</title>
387!Ekernel/audit.c
388!Ikernel/auditsc.c
389!Ikernel/auditfilter.c
390 </chapter>
391
392 <chapter id="accounting">
393 <title>Accounting Framework</title>
394!Ikernel/acct.c
395 </chapter>
396
1da177e4
LT
397 <chapter id="pmfuncs">
398 <title>Power Management</title>
399!Ekernel/power/pm.c
400 </chapter>
401
4dc3b16b
PP
402 <chapter id="devdrivers">
403 <title>Device drivers infrastructure</title>
404 <sect1><title>Device Drivers Base</title>
405<!--
406X!Iinclude/linux/device.h
407-->
408!Edrivers/base/driver.c
4dc3b16b 409!Edrivers/base/core.c
78b2290f 410!Edrivers/base/class.c
4dc3b16b
PP
411!Edrivers/base/firmware_class.c
412!Edrivers/base/transport_class.c
413!Edrivers/base/dmapool.c
414<!-- Cannot be included, because
415 attribute_container_add_class_device_adapter
416 and attribute_container_classdev_to_container
417 exceed allowed 44 characters maximum
418X!Edrivers/base/attribute_container.c
419-->
420!Edrivers/base/sys.c
421<!--
422X!Edrivers/base/interface.c
423-->
424!Edrivers/base/platform.c
425!Edrivers/base/bus.c
426 </sect1>
427 <sect1><title>Device Drivers Power Management</title>
428!Edrivers/base/power/main.c
429!Edrivers/base/power/resume.c
430!Edrivers/base/power/suspend.c
431 </sect1>
432 <sect1><title>Device Drivers ACPI Support</title>
433<!-- Internal functions only
434X!Edrivers/acpi/sleep/main.c
435X!Edrivers/acpi/sleep/wakeup.c
436X!Edrivers/acpi/motherboard.c
437X!Edrivers/acpi/bus.c
438-->
439!Edrivers/acpi/scan.c
d758a8fa 440!Idrivers/acpi/scan.c
4dc3b16b
PP
441<!-- No correct structured comments
442X!Edrivers/acpi/pci_bind.c
443-->
444 </sect1>
445 <sect1><title>Device drivers PnP support</title>
446!Edrivers/pnp/core.c
447<!-- No correct structured comments
448X!Edrivers/pnp/system.c
449 -->
450!Edrivers/pnp/card.c
451!Edrivers/pnp/driver.c
452!Edrivers/pnp/manager.c
453!Edrivers/pnp/support.c
454 </sect1>
455 </chapter>
456
1da177e4
LT
457 <chapter id="blkdev">
458 <title>Block Devices</title>
1d193f4f 459!Eblock/ll_rw_blk.c
1da177e4
LT
460 </chapter>
461
cf3e43db
JC
462 <chapter id="chrdev">
463 <title>Char devices</title>
464!Efs/char_dev.c
465 </chapter>
466
1da177e4
LT
467 <chapter id="miscdev">
468 <title>Miscellaneous Devices</title>
469!Edrivers/char/misc.c
470 </chapter>
471
7d469722
RD
472 <chapter id="parportdev">
473 <title>Parallel Port Devices</title>
474!Iinclude/linux/parport.h
475!Edrivers/parport/ieee1284.c
476!Edrivers/parport/share.c
477!Idrivers/parport/daisy.c
478 </chapter>
479
1da177e4
LT
480 <chapter id="viddev">
481 <title>Video4Linux</title>
482!Edrivers/media/video/videodev.c
483 </chapter>
484
485 <chapter id="snddev">
486 <title>Sound Devices</title>
4dc3b16b 487!Iinclude/sound/core.h
1da177e4 488!Esound/sound_core.c
4dc3b16b
PP
489!Iinclude/sound/pcm.h
490!Esound/core/pcm.c
491!Esound/core/device.c
492!Esound/core/info.c
493!Esound/core/rawmidi.c
494!Esound/core/sound.c
495!Esound/core/memory.c
496!Esound/core/pcm_memory.c
497!Esound/core/init.c
498!Esound/core/isadma.c
499!Esound/core/control.c
500!Esound/core/pcm_lib.c
501!Esound/core/hwdep.c
502!Esound/core/pcm_native.c
503!Esound/core/memalloc.c
1da177e4
LT
504<!-- FIXME: Removed for now since no structured comments in source
505X!Isound/sound_firmware.c
506-->
507 </chapter>
508
509 <chapter id="uart16x50">
510 <title>16x50 UART Driver</title>
4dc3b16b 511!Iinclude/linux/serial_core.h
1da177e4
LT
512!Edrivers/serial/serial_core.c
513!Edrivers/serial/8250.c
514 </chapter>
515
516 <chapter id="z85230">
517 <title>Z85230 Support Library</title>
518!Edrivers/net/wan/z85230.c
519 </chapter>
520
521 <chapter id="fbdev">
522 <title>Frame Buffer Library</title>
523
524 <para>
525 The frame buffer drivers depend heavily on four data structures.
526 These structures are declared in include/linux/fb.h. They are
527 fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
528 The last three can be made available to and from userland.
529 </para>
530
531 <para>
532 fb_info defines the current state of a particular video card.
533 Inside fb_info, there exists a fb_ops structure which is a
534 collection of needed functions to make fbdev and fbcon work.
535 fb_info is only visible to the kernel.
536 </para>
537
538 <para>
539 fb_var_screeninfo is used to describe the features of a video card
540 that are user defined. With fb_var_screeninfo, things such as
541 depth and the resolution may be defined.
542 </para>
543
544 <para>
545 The next structure is fb_fix_screeninfo. This defines the
546 properties of a card that are created when a mode is set and can't
547 be changed otherwise. A good example of this is the start of the
548 frame buffer memory. This "locks" the address of the frame buffer
549 memory, so that it cannot be changed or moved.
550 </para>
551
552 <para>
553 The last structure is fb_monospecs. In the old API, there was
554 little importance for fb_monospecs. This allowed for forbidden things
555 such as setting a mode of 800x600 on a fix frequency monitor. With
556 the new API, fb_monospecs prevents such things, and if used
557 correctly, can prevent a monitor from being cooked. fb_monospecs
558 will not be useful until kernels 2.5.x.
559 </para>
560
561 <sect1><title>Frame Buffer Memory</title>
562!Edrivers/video/fbmem.c
563 </sect1>
4dc3b16b 564<!--
1da177e4 565 <sect1><title>Frame Buffer Console</title>
4dc3b16b 566X!Edrivers/video/console/fbcon.c
1da177e4 567 </sect1>
4dc3b16b 568-->
1da177e4
LT
569 <sect1><title>Frame Buffer Colormap</title>
570!Edrivers/video/fbcmap.c
571 </sect1>
572<!-- FIXME:
573 drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
574 out until somebody adds docs. KAO
575 <sect1><title>Frame Buffer Generic Functions</title>
576X!Idrivers/video/fbgen.c
577 </sect1>
578KAO -->
579 <sect1><title>Frame Buffer Video Mode Database</title>
580!Idrivers/video/modedb.c
581!Edrivers/video/modedb.c
582 </sect1>
583 <sect1><title>Frame Buffer Macintosh Video Mode Database</title>
8f2709b5 584!Edrivers/video/macmodes.c
1da177e4
LT
585 </sect1>
586 <sect1><title>Frame Buffer Fonts</title>
587 <para>
588 Refer to the file drivers/video/console/fonts.c for more information.
589 </para>
590<!-- FIXME: Removed for now since no structured comments in source
591X!Idrivers/video/console/fonts.c
592-->
593 </sect1>
594 </chapter>
595</book>