| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | <?xml version="1.0" encoding="UTF-8"?>
 | 
					
						
							|  |  |  | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 | 
					
						
							|  |  |  | 	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <book id="LinuxKernelAPI">
 | 
					
						
							|  |  |  |  <bookinfo>
 | 
					
						
							|  |  |  |   <title>The Linux Kernel API</title>
 | 
					
						
							|  |  |  |   
 | 
					
						
							|  |  |  |   <legalnotice>
 | 
					
						
							|  |  |  |    <para>
 | 
					
						
							|  |  |  |      This documentation is free software; you can redistribute
 | 
					
						
							|  |  |  |      it and/or modify it under the terms of the GNU General Public
 | 
					
						
							|  |  |  |      License as published by the Free Software Foundation; either
 | 
					
						
							|  |  |  |      version 2 of the License, or (at your option) any later
 | 
					
						
							|  |  |  |      version.
 | 
					
						
							|  |  |  |    </para>
 | 
					
						
							|  |  |  |       
 | 
					
						
							|  |  |  |    <para>
 | 
					
						
							|  |  |  |      This program is distributed in the hope that it will be
 | 
					
						
							|  |  |  |      useful, but WITHOUT ANY WARRANTY; without even the implied
 | 
					
						
							|  |  |  |      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
					
						
							|  |  |  |      See the GNU General Public License for more details.
 | 
					
						
							|  |  |  |    </para>
 | 
					
						
							|  |  |  |       
 | 
					
						
							|  |  |  |    <para>
 | 
					
						
							|  |  |  |      You should have received a copy of the GNU General Public
 | 
					
						
							|  |  |  |      License along with this program; if not, write to the Free
 | 
					
						
							|  |  |  |      Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | 
					
						
							|  |  |  |      MA 02111-1307 USA
 | 
					
						
							|  |  |  |    </para>
 | 
					
						
							|  |  |  |       
 | 
					
						
							|  |  |  |    <para>
 | 
					
						
							|  |  |  |      For more details see the file COPYING in the source
 | 
					
						
							|  |  |  |      distribution of Linux.
 | 
					
						
							|  |  |  |    </para>
 | 
					
						
							|  |  |  |   </legalnotice>
 | 
					
						
							|  |  |  |  </bookinfo>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <toc></toc>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="adt">
 | 
					
						
							|  |  |  |      <title>Data Types</title>
 | 
					
						
							|  |  |  |      <sect1><title>Doubly Linked Lists</title>
 | 
					
						
							|  |  |  | !Iinclude/linux/list.h
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="libc">
 | 
					
						
							|  |  |  |      <title>Basic C Library Functions</title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  |        When writing drivers, you cannot in general use routines which are
 | 
					
						
							|  |  |  |        from the C Library.  Some of the functions have been found generally
 | 
					
						
							|  |  |  |        useful and they are listed below.  The behaviour of these functions
 | 
					
						
							|  |  |  |        may vary slightly from those defined by ANSI, and these deviations
 | 
					
						
							|  |  |  |        are noted in the text.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <sect1><title>String Conversions</title>
 | 
					
						
							|  |  |  | !Elib/vsprintf.c
 | 
					
						
							| 
									
										
										
										
											2012-12-17 16:03:04 -08:00
										 |  |  | !Finclude/linux/kernel.h kstrtol
 | 
					
						
							|  |  |  | !Finclude/linux/kernel.h kstrtoul
 | 
					
						
							|  |  |  | !Elib/kstrtox.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							|  |  |  |      <sect1><title>String Manipulation</title>
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | <!-- All functions are exported at now
 | 
					
						
							|  |  |  | X!Ilib/string.c
 | 
					
						
							|  |  |  |  -->
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | !Elib/string.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |      <sect1><title>Bit Operations</title>
 | 
					
						
							| 
									
										
										
										
											2008-10-25 17:24:36 -07:00
										 |  |  | !Iarch/x86/include/asm/bitops.h
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:58 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="kernel-lib">
 | 
					
						
							|  |  |  |      <title>Basic Kernel Library Functions</title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  |        The Linux kernel provides more basic utility functions.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:57 -07:00
										 |  |  |      <sect1><title>Bitmap Operations</title>
 | 
					
						
							|  |  |  | !Elib/bitmap.c
 | 
					
						
							|  |  |  | !Ilib/bitmap.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:58 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |      <sect1><title>Command-line Parsing</title>
 | 
					
						
							|  |  |  | !Elib/cmdline.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:59 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-17 04:04:03 -07:00
										 |  |  |      <sect1 id="crc"><title>CRC Functions</title>
 | 
					
						
							|  |  |  | !Elib/crc7.c
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:59 -07:00
										 |  |  | !Elib/crc16.c
 | 
					
						
							| 
									
										
										
										
											2007-07-17 04:04:03 -07:00
										 |  |  | !Elib/crc-itu-t.c
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:48:59 -07:00
										 |  |  | !Elib/crc32.c
 | 
					
						
							|  |  |  | !Elib/crc-ccitt.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2010-10-26 14:19:08 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |      <sect1 id="idr"><title>idr/ida Functions</title>
 | 
					
						
							|  |  |  | !Pinclude/linux/idr.h idr sync
 | 
					
						
							|  |  |  | !Plib/idr.c IDA description
 | 
					
						
							|  |  |  | !Elib/idr.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="mm">
 | 
					
						
							|  |  |  |      <title>Memory Management in Linux</title>
 | 
					
						
							|  |  |  |      <sect1><title>The Slab Cache</title>
 | 
					
						
							| 
									
										
										
										
											2006-06-23 02:03:48 -07:00
										 |  |  | !Iinclude/linux/slab.h
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | !Emm/slab.c
 | 
					
						
							| 
									
										
										
										
											2013-11-06 13:18:25 -08:00
										 |  |  | !Emm/util.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							|  |  |  |      <sect1><title>User Space Memory Access</title>
 | 
					
						
							| 
									
										
										
										
											2008-10-25 17:24:36 -07:00
										 |  |  | !Iarch/x86/include/asm/uaccess_32.h
 | 
					
						
							| 
									
										
										
										
											2007-10-12 21:17:23 -07:00
										 |  |  | !Earch/x86/lib/usercopy_32.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  |      <sect1><title>More Memory Management Functions</title>
 | 
					
						
							|  |  |  | !Emm/readahead.c
 | 
					
						
							|  |  |  | !Emm/filemap.c
 | 
					
						
							|  |  |  | !Emm/memory.c
 | 
					
						
							|  |  |  | !Emm/vmalloc.c
 | 
					
						
							| 
									
										
										
										
											2006-10-04 02:15:25 -07:00
										 |  |  | !Imm/page_alloc.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Emm/mempool.c
 | 
					
						
							| 
									
										
										
										
											2008-02-06 16:29:55 -08:00
										 |  |  | !Emm/dmapool.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Emm/page-writeback.c
 | 
					
						
							|  |  |  | !Emm/truncate.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="ipc">
 | 
					
						
							|  |  |  |      <title>Kernel IPC facilities</title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <sect1><title>IPC utilities</title>
 | 
					
						
							|  |  |  | !Iipc/util.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="kfifo">
 | 
					
						
							|  |  |  |      <title>FIFO Buffer</title>
 | 
					
						
							|  |  |  |      <sect1><title>kfifo interface</title>
 | 
					
						
							|  |  |  | !Iinclude/linux/kfifo.h
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-29 01:59:10 -07:00
										 |  |  |   <chapter id="relayfs">
 | 
					
						
							|  |  |  |      <title>relay interface support</title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  | 	Relay interface support
 | 
					
						
							|  |  |  | 	is designed to provide an efficient mechanism for tools and
 | 
					
						
							|  |  |  | 	facilities to relay large amounts of data from kernel space to
 | 
					
						
							|  |  |  | 	user space.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <sect1><title>relay interface</title>
 | 
					
						
							|  |  |  | !Ekernel/relay.c
 | 
					
						
							|  |  |  | !Ikernel/relay.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   <chapter id="modload">
 | 
					
						
							|  |  |  |      <title>Module Support</title>
 | 
					
						
							|  |  |  |      <sect1><title>Module Loading</title>
 | 
					
						
							|  |  |  | !Ekernel/kmod.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |      <sect1><title>Inter Module support</title>
 | 
					
						
							|  |  |  |         <para>
 | 
					
						
							|  |  |  |            Refer to the file kernel/module.c for more information.
 | 
					
						
							|  |  |  |         </para>
 | 
					
						
							|  |  |  | <!-- FIXME: Removed for now since no structured comments in source
 | 
					
						
							|  |  |  | X!Ekernel/module.c
 | 
					
						
							|  |  |  | -->
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="hardware">
 | 
					
						
							|  |  |  |      <title>Hardware Interfaces</title>
 | 
					
						
							|  |  |  |      <sect1><title>Interrupt Handling</title>
 | 
					
						
							| 
									
										
										
										
											2005-11-07 01:01:05 -08:00
										 |  |  | !Ekernel/irq/manage.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-03 01:13:50 -07:00
										 |  |  |      <sect1><title>DMA Channels</title>
 | 
					
						
							|  |  |  | !Ekernel/dma.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  |      <sect1><title>Resources Management</title>
 | 
					
						
							| 
									
										
										
										
											2006-07-30 03:03:40 -07:00
										 |  |  | !Ikernel/resource.c
 | 
					
						
							| 
									
										
										
										
											2006-10-03 01:13:51 -07:00
										 |  |  | !Ekernel/resource.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  |      </sect1>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      <sect1><title>MTRR Handling</title>
 | 
					
						
							| 
									
										
										
										
											2007-10-12 21:17:23 -07:00
										 |  |  | !Earch/x86/kernel/cpu/mtrr/main.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:49:18 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      <sect1><title>PCI Support Library</title>
 | 
					
						
							|  |  |  | !Edrivers/pci/pci.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Edrivers/pci/pci-driver.c
 | 
					
						
							|  |  |  | !Edrivers/pci/remove.c
 | 
					
						
							| 
									
										
										
										
											2006-07-30 03:03:41 -07:00
										 |  |  | !Edrivers/pci/search.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Edrivers/pci/msi.c
 | 
					
						
							|  |  |  | !Edrivers/pci/bus.c
 | 
					
						
							| 
									
										
										
										
											2009-04-10 15:17:50 -07:00
										 |  |  | !Edrivers/pci/access.c
 | 
					
						
							|  |  |  | !Edrivers/pci/irq.c
 | 
					
						
							|  |  |  | !Edrivers/pci/htirq.c
 | 
					
						
							| 
									
										
										
										
											2005-10-23 11:58:19 -07:00
										 |  |  | <!-- FIXME: Removed for now since no structured comments in source
 | 
					
						
							|  |  |  | X!Edrivers/pci/hotplug.c
 | 
					
						
							|  |  |  | -->
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Edrivers/pci/probe.c
 | 
					
						
							| 
									
										
										
										
											2009-04-10 15:17:50 -07:00
										 |  |  | !Edrivers/pci/slot.c
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:25 -07:00
										 |  |  | !Edrivers/pci/rom.c
 | 
					
						
							| 
									
										
										
										
											2009-03-20 11:25:18 +08:00
										 |  |  | !Edrivers/pci/iov.c
 | 
					
						
							| 
									
										
										
										
											2009-04-10 15:17:50 -07:00
										 |  |  | !Idrivers/pci/pci-sysfs.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |      </sect1>
 | 
					
						
							|  |  |  |      <sect1><title>PCI Hotplug Support Library</title>
 | 
					
						
							|  |  |  | !Edrivers/pci/hotplug/pci_hotplug_core.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:49:18 -07:00
										 |  |  |   <chapter id="firmware">
 | 
					
						
							|  |  |  |      <title>Firmware Interfaces</title>
 | 
					
						
							|  |  |  |      <sect1><title>DMI Interfaces</title>
 | 
					
						
							|  |  |  | !Edrivers/firmware/dmi_scan.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2007-02-10 01:46:03 -08:00
										 |  |  |      <sect1><title>EDD Interfaces</title>
 | 
					
						
							|  |  |  | !Idrivers/firmware/edd.c
 | 
					
						
							|  |  |  |      </sect1>
 | 
					
						
							| 
									
										
										
										
											2006-06-25 05:49:18 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   <chapter id="security">
 | 
					
						
							|  |  |  |      <title>Security Framework</title>
 | 
					
						
							| 
									
										
										
										
											2007-10-16 23:31:32 -07:00
										 |  |  | !Isecurity/security.c
 | 
					
						
							| 
									
										
										
										
											2008-08-17 21:44:22 -07:00
										 |  |  | !Esecurity/inode.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-23 02:05:52 -07:00
										 |  |  |   <chapter id="audit">
 | 
					
						
							|  |  |  |      <title>Audit Interfaces</title>
 | 
					
						
							|  |  |  | !Ekernel/audit.c
 | 
					
						
							|  |  |  | !Ikernel/auditsc.c
 | 
					
						
							|  |  |  | !Ikernel/auditfilter.c
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <chapter id="accounting">
 | 
					
						
							|  |  |  |      <title>Accounting Framework</title>
 | 
					
						
							|  |  |  | !Ikernel/acct.c
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   <chapter id="blkdev">
 | 
					
						
							|  |  |  |      <title>Block Devices</title>
 | 
					
						
							| 
									
										
										
										
											2008-01-30 11:51:00 -08:00
										 |  |  | !Eblock/blk-core.c
 | 
					
						
							| 
									
										
										
										
											2008-02-20 09:01:22 +01:00
										 |  |  | !Iblock/blk-core.c
 | 
					
						
							| 
									
										
										
										
											2008-01-30 11:51:00 -08:00
										 |  |  | !Eblock/blk-map.c
 | 
					
						
							|  |  |  | !Iblock/blk-sysfs.c
 | 
					
						
							|  |  |  | !Eblock/blk-settings.c
 | 
					
						
							|  |  |  | !Eblock/blk-exec.c
 | 
					
						
							| 
									
										
										
										
											2010-10-21 14:54:19 +02:00
										 |  |  | !Eblock/blk-flush.c
 | 
					
						
							|  |  |  | !Eblock/blk-lib.c
 | 
					
						
							| 
									
										
										
										
											2008-01-30 11:51:00 -08:00
										 |  |  | !Eblock/blk-tag.c
 | 
					
						
							| 
									
										
										
										
											2008-02-20 09:01:22 +01:00
										 |  |  | !Iblock/blk-tag.c
 | 
					
						
							| 
									
										
										
										
											2008-08-19 20:13:11 +02:00
										 |  |  | !Eblock/blk-integrity.c
 | 
					
						
							| 
									
										
										
										
											2009-04-05 15:45:34 -07:00
										 |  |  | !Ikernel/trace/blktrace.c
 | 
					
						
							| 
									
										
										
										
											2008-08-19 20:13:11 +02:00
										 |  |  | !Iblock/genhd.c
 | 
					
						
							|  |  |  | !Eblock/genhd.c
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-29 02:00:44 -07:00
										 |  |  |   <chapter id="chrdev">
 | 
					
						
							|  |  |  | 	<title>Char devices</title>
 | 
					
						
							|  |  |  | !Efs/char_dev.c
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   <chapter id="miscdev">
 | 
					
						
							|  |  |  |      <title>Miscellaneous Devices</title>
 | 
					
						
							|  |  |  | !Edrivers/char/misc.c
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-28 02:11:56 -07:00
										 |  |  |   <chapter id="clk">
 | 
					
						
							|  |  |  |      <title>Clock Framework</title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  | 	The clock framework defines programming interfaces to support
 | 
					
						
							|  |  |  | 	software management of the system clock tree.
 | 
					
						
							|  |  |  | 	This framework is widely used with System-On-Chip (SOC) platforms
 | 
					
						
							|  |  |  | 	to support power management and various devices which may need
 | 
					
						
							|  |  |  | 	custom clock rates.
 | 
					
						
							|  |  |  | 	Note that these "clocks" don't relate to timekeeping or real
 | 
					
						
							|  |  |  | 	time clocks (RTCs), each of which have separate frameworks.
 | 
					
						
							|  |  |  | 	These <structname>struct clk</structname> instances may be used
 | 
					
						
							|  |  |  | 	to manage for example a 96 MHz signal that is used to shift bits
 | 
					
						
							|  |  |  | 	into and out of peripherals or busses, or otherwise trigger
 | 
					
						
							|  |  |  | 	synchronous state machine transitions in system hardware.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  | 	Power management is supported by explicit software clock gating:
 | 
					
						
							|  |  |  | 	unused clocks are disabled, so the system doesn't waste power
 | 
					
						
							|  |  |  | 	changing the state of transistors that aren't in active use.
 | 
					
						
							|  |  |  | 	On some systems this may be backed by hardware clock gating,
 | 
					
						
							|  |  |  | 	where clocks are gated without being disabled in software.
 | 
					
						
							|  |  |  | 	Sections of chips that are powered but not clocked may be able
 | 
					
						
							|  |  |  | 	to retain their last state.
 | 
					
						
							|  |  |  | 	This low power state is often called a <emphasis>retention
 | 
					
						
							|  |  |  | 	mode</emphasis>.
 | 
					
						
							|  |  |  | 	This mode still incurs leakage currents, especially with finer
 | 
					
						
							|  |  |  | 	circuit geometries, but for CMOS circuits power is mostly used
 | 
					
						
							|  |  |  | 	by clocked state changes.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  | 	Power-aware drivers only enable their clocks when the device
 | 
					
						
							|  |  |  | 	they manage is in active use.  Also, system sleep states often
 | 
					
						
							|  |  |  | 	differ according to which clock domains are active:  while a
 | 
					
						
							|  |  |  | 	"standby" state may allow wakeup from several active domains, a
 | 
					
						
							|  |  |  | 	"mem" (suspend-to-RAM) state may require a more wholesale shutdown
 | 
					
						
							|  |  |  | 	of clocks derived from higher speed PLLs and oscillators, limiting
 | 
					
						
							|  |  |  | 	the number of possible wakeup event sources.  A driver's suspend
 | 
					
						
							|  |  |  | 	method may need to be aware of system-specific clock constraints
 | 
					
						
							|  |  |  | 	on the target sleep state.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      <para>
 | 
					
						
							|  |  |  |         Some platforms support programmable clock generators.  These
 | 
					
						
							|  |  |  | 	can be used by external chips of various kinds, such as other
 | 
					
						
							|  |  |  | 	CPUs, multimedia codecs, and devices with strict requirements
 | 
					
						
							|  |  |  | 	for interface clocking.
 | 
					
						
							|  |  |  |      </para>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | !Iinclude/linux/clk.h
 | 
					
						
							|  |  |  |   </chapter>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | </book>
 |