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