[PATCH] tty: make termios_sem a mutex
[deliverable/linux.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
4dc3b16b 328 <sect1><title>Resources Management</title>
2b54960b 329!Ikernel/resource.c
4dc3b16b
PP
330 </sect1>
331
1da177e4
LT
332 <sect1><title>MTRR Handling</title>
333!Earch/i386/kernel/cpu/mtrr/main.c
334 </sect1>
b0ef371e 335
1da177e4
LT
336 <sect1><title>PCI Support Library</title>
337!Edrivers/pci/pci.c
4dc3b16b
PP
338!Edrivers/pci/pci-driver.c
339!Edrivers/pci/remove.c
340!Edrivers/pci/pci-acpi.c
d75763d2 341!Edrivers/pci/search.c
4dc3b16b
PP
342!Edrivers/pci/msi.c
343!Edrivers/pci/bus.c
f05aab8e
RD
344<!-- FIXME: Removed for now since no structured comments in source
345X!Edrivers/pci/hotplug.c
346-->
4dc3b16b
PP
347!Edrivers/pci/probe.c
348!Edrivers/pci/rom.c
1da177e4
LT
349 </sect1>
350 <sect1><title>PCI Hotplug Support Library</title>
351!Edrivers/pci/hotplug/pci_hotplug_core.c
352 </sect1>
353 <sect1><title>MCA Architecture</title>
354 <sect2><title>MCA Device Functions</title>
355 <para>
356 Refer to the file arch/i386/kernel/mca.c for more information.
357 </para>
358<!-- FIXME: Removed for now since no structured comments in source
359X!Earch/i386/kernel/mca.c
360-->
361 </sect2>
362 <sect2><title>MCA Bus DMA</title>
363!Iinclude/asm-i386/mca_dma.h
364 </sect2>
365 </sect1>
366 </chapter>
367
b0ef371e
RD
368 <chapter id="firmware">
369 <title>Firmware Interfaces</title>
370 <sect1><title>DMI Interfaces</title>
371!Edrivers/firmware/dmi_scan.c
372 </sect1>
373 </chapter>
374
1da177e4
LT
375 <chapter id="security">
376 <title>Security Framework</title>
377!Esecurity/security.c
378 </chapter>
379
862f5f01
RD
380 <chapter id="audit">
381 <title>Audit Interfaces</title>
382!Ekernel/audit.c
383!Ikernel/auditsc.c
384!Ikernel/auditfilter.c
385 </chapter>
386
387 <chapter id="accounting">
388 <title>Accounting Framework</title>
389!Ikernel/acct.c
390 </chapter>
391
1da177e4
LT
392 <chapter id="pmfuncs">
393 <title>Power Management</title>
394!Ekernel/power/pm.c
395 </chapter>
396
4dc3b16b
PP
397 <chapter id="devdrivers">
398 <title>Device drivers infrastructure</title>
399 <sect1><title>Device Drivers Base</title>
400<!--
401X!Iinclude/linux/device.h
402-->
403!Edrivers/base/driver.c
4dc3b16b 404!Edrivers/base/core.c
78b2290f 405!Edrivers/base/class.c
4dc3b16b
PP
406!Edrivers/base/firmware_class.c
407!Edrivers/base/transport_class.c
408!Edrivers/base/dmapool.c
409<!-- Cannot be included, because
410 attribute_container_add_class_device_adapter
411 and attribute_container_classdev_to_container
412 exceed allowed 44 characters maximum
413X!Edrivers/base/attribute_container.c
414-->
415!Edrivers/base/sys.c
416<!--
417X!Edrivers/base/interface.c
418-->
419!Edrivers/base/platform.c
420!Edrivers/base/bus.c
421 </sect1>
422 <sect1><title>Device Drivers Power Management</title>
423!Edrivers/base/power/main.c
424!Edrivers/base/power/resume.c
425!Edrivers/base/power/suspend.c
426 </sect1>
427 <sect1><title>Device Drivers ACPI Support</title>
428<!-- Internal functions only
429X!Edrivers/acpi/sleep/main.c
430X!Edrivers/acpi/sleep/wakeup.c
431X!Edrivers/acpi/motherboard.c
432X!Edrivers/acpi/bus.c
433-->
434!Edrivers/acpi/scan.c
d758a8fa 435!Idrivers/acpi/scan.c
4dc3b16b
PP
436<!-- No correct structured comments
437X!Edrivers/acpi/pci_bind.c
438-->
439 </sect1>
440 <sect1><title>Device drivers PnP support</title>
441!Edrivers/pnp/core.c
442<!-- No correct structured comments
443X!Edrivers/pnp/system.c
444 -->
445!Edrivers/pnp/card.c
446!Edrivers/pnp/driver.c
447!Edrivers/pnp/manager.c
448!Edrivers/pnp/support.c
449 </sect1>
450 </chapter>
451
1da177e4
LT
452 <chapter id="blkdev">
453 <title>Block Devices</title>
1d193f4f 454!Eblock/ll_rw_blk.c
1da177e4
LT
455 </chapter>
456
457 <chapter id="miscdev">
458 <title>Miscellaneous Devices</title>
459!Edrivers/char/misc.c
460 </chapter>
461
7d469722
RD
462 <chapter id="parportdev">
463 <title>Parallel Port Devices</title>
464!Iinclude/linux/parport.h
465!Edrivers/parport/ieee1284.c
466!Edrivers/parport/share.c
467!Idrivers/parport/daisy.c
468 </chapter>
469
1da177e4
LT
470 <chapter id="viddev">
471 <title>Video4Linux</title>
472!Edrivers/media/video/videodev.c
473 </chapter>
474
475 <chapter id="snddev">
476 <title>Sound Devices</title>
4dc3b16b 477!Iinclude/sound/core.h
1da177e4 478!Esound/sound_core.c
4dc3b16b
PP
479!Iinclude/sound/pcm.h
480!Esound/core/pcm.c
481!Esound/core/device.c
482!Esound/core/info.c
483!Esound/core/rawmidi.c
484!Esound/core/sound.c
485!Esound/core/memory.c
486!Esound/core/pcm_memory.c
487!Esound/core/init.c
488!Esound/core/isadma.c
489!Esound/core/control.c
490!Esound/core/pcm_lib.c
491!Esound/core/hwdep.c
492!Esound/core/pcm_native.c
493!Esound/core/memalloc.c
1da177e4
LT
494<!-- FIXME: Removed for now since no structured comments in source
495X!Isound/sound_firmware.c
496-->
497 </chapter>
498
499 <chapter id="uart16x50">
500 <title>16x50 UART Driver</title>
4dc3b16b 501!Iinclude/linux/serial_core.h
1da177e4
LT
502!Edrivers/serial/serial_core.c
503!Edrivers/serial/8250.c
504 </chapter>
505
506 <chapter id="z85230">
507 <title>Z85230 Support Library</title>
508!Edrivers/net/wan/z85230.c
509 </chapter>
510
511 <chapter id="fbdev">
512 <title>Frame Buffer Library</title>
513
514 <para>
515 The frame buffer drivers depend heavily on four data structures.
516 These structures are declared in include/linux/fb.h. They are
517 fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
518 The last three can be made available to and from userland.
519 </para>
520
521 <para>
522 fb_info defines the current state of a particular video card.
523 Inside fb_info, there exists a fb_ops structure which is a
524 collection of needed functions to make fbdev and fbcon work.
525 fb_info is only visible to the kernel.
526 </para>
527
528 <para>
529 fb_var_screeninfo is used to describe the features of a video card
530 that are user defined. With fb_var_screeninfo, things such as
531 depth and the resolution may be defined.
532 </para>
533
534 <para>
535 The next structure is fb_fix_screeninfo. This defines the
536 properties of a card that are created when a mode is set and can't
537 be changed otherwise. A good example of this is the start of the
538 frame buffer memory. This "locks" the address of the frame buffer
539 memory, so that it cannot be changed or moved.
540 </para>
541
542 <para>
543 The last structure is fb_monospecs. In the old API, there was
544 little importance for fb_monospecs. This allowed for forbidden things
545 such as setting a mode of 800x600 on a fix frequency monitor. With
546 the new API, fb_monospecs prevents such things, and if used
547 correctly, can prevent a monitor from being cooked. fb_monospecs
548 will not be useful until kernels 2.5.x.
549 </para>
550
551 <sect1><title>Frame Buffer Memory</title>
552!Edrivers/video/fbmem.c
553 </sect1>
4dc3b16b 554<!--
1da177e4 555 <sect1><title>Frame Buffer Console</title>
4dc3b16b 556X!Edrivers/video/console/fbcon.c
1da177e4 557 </sect1>
4dc3b16b 558-->
1da177e4
LT
559 <sect1><title>Frame Buffer Colormap</title>
560!Edrivers/video/fbcmap.c
561 </sect1>
562<!-- FIXME:
563 drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
564 out until somebody adds docs. KAO
565 <sect1><title>Frame Buffer Generic Functions</title>
566X!Idrivers/video/fbgen.c
567 </sect1>
568KAO -->
569 <sect1><title>Frame Buffer Video Mode Database</title>
570!Idrivers/video/modedb.c
571!Edrivers/video/modedb.c
572 </sect1>
573 <sect1><title>Frame Buffer Macintosh Video Mode Database</title>
8f2709b5 574!Edrivers/video/macmodes.c
1da177e4
LT
575 </sect1>
576 <sect1><title>Frame Buffer Fonts</title>
577 <para>
578 Refer to the file drivers/video/console/fonts.c for more information.
579 </para>
580<!-- FIXME: Removed for now since no structured comments in source
581X!Idrivers/video/console/fonts.c
582-->
583 </sect1>
584 </chapter>
585</book>
This page took 0.17937 seconds and 5 git commands to generate.