Sophie

Sophie

distrib > Fedora > 18 > x86_64 > media > updates > by-pkgid > 1a595394b241504ff370a8d12ebfcea7 > files > 4956

kernel-doc-3.11.10-100.fc18.noarch.rpm

<?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="sh-drivers">
 <bookinfo>
  <title>SuperH Interfaces Guide</title>
  
  <authorgroup>
   <author>
    <firstname>Paul</firstname>
    <surname>Mundt</surname>
    <affiliation>
     <address>
      <email>lethal@linux-sh.org</email>
     </address>
    </affiliation>
   </author>
  </authorgroup>

  <copyright>
   <year>2008-2010</year>
   <holder>Paul Mundt</holder>
  </copyright>
  <copyright>
   <year>2008-2010</year>
   <holder>Renesas Technology Corp.</holder>
  </copyright>
  <copyright>
   <year>2010</year>
   <holder>Renesas Electronics Corp.</holder>
  </copyright>

  <legalnotice>
   <para>
     This documentation is free software; you can redistribute
     it and/or modify it under the terms of the GNU General Public
     License version 2 as published by the Free Software Foundation.
   </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="mm">
    <title>Memory Management</title>
    <sect1 id="sh4">
    <title>SH-4</title>
      <sect2 id="sq">
        <title>Store Queue API</title>
<!-- arch/sh/kernel/cpu/sh4/sq.c -->
<refentry id="API-sq-flush-range">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sq_flush_range</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sq_flush_range</refname>
 <refpurpose>
  Flush (prefetch) a specific SQ range
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>sq_flush_range </function></funcdef>
   <paramdef>unsigned long <parameter>start</parameter></paramdef>
   <paramdef>unsigned int <parameter>len</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>start</parameter></term>
   <listitem>
    <para>
     the store queue address to start flushing from
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>len</parameter></term>
   <listitem>
    <para>
     the length to flush
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Flushes the store queue cache from <parameter>start</parameter> to <parameter>start</parameter> + <parameter>len</parameter> in a
   linear fashion.
</para>
</refsect1>
</refentry>

<refentry id="API-sq-remap">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sq_remap</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sq_remap</refname>
 <refpurpose>
     Map a physical address through the Store Queues
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned long <function>sq_remap </function></funcdef>
   <paramdef>unsigned long <parameter>phys</parameter></paramdef>
   <paramdef>unsigned int <parameter>size</parameter></paramdef>
   <paramdef>const char * <parameter>name</parameter></paramdef>
   <paramdef>pgprot_t <parameter>prot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>phys</parameter></term>
   <listitem>
    <para>
     Physical address of mapping.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>size</parameter></term>
   <listitem>
    <para>
     Length of mapping.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>name</parameter></term>
   <listitem>
    <para>
     User invoking mapping.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>prot</parameter></term>
   <listitem>
    <para>
     Protection bits.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Remaps the physical address <parameter>phys</parameter> through the next available store queue
   address of <parameter>size</parameter> length. <parameter>name</parameter> is logged at boot time as well as through
   the sysfs interface.
</para>
</refsect1>
</refentry>

<refentry id="API-sq-unmap">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sq_unmap</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sq_unmap</refname>
 <refpurpose>
     Unmap a Store Queue allocation
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>sq_unmap </function></funcdef>
   <paramdef>unsigned long <parameter>vaddr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>vaddr</parameter></term>
   <listitem>
    <para>
     Pre-allocated Store Queue mapping.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Unmaps the store queue allocation <parameter>map</parameter> that was previously created by
   <function>sq_remap</function>. Also frees up the pte that was previously inserted into
   the kernel page table and discards the UTLB translation.
</para>
</refsect1>
</refentry>

      </sect2>
    </sect1>
    <sect1 id="sh5">
      <title>SH-5</title>
      <sect2 id="tlb">
	<title>TLB Interfaces</title>
<!-- arch/sh/mm/tlb-sh5.c -->
<refentry id="API-sh64-tlb-init">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_tlb_init</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_tlb_init</refname>
 <refpurpose>
  Perform initial setup for the DTLB and ITLB.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>sh64_tlb_init </function></funcdef>
   <paramdef> <parameter>void</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>void</parameter></term>
   <listitem>
    <para>
     no arguments
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API-sh64-next-free-dtlb-entry">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_next_free_dtlb_entry</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_next_free_dtlb_entry</refname>
 <refpurpose>
     Find the next available DTLB entry
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned long long <function>sh64_next_free_dtlb_entry </function></funcdef>
   <paramdef> <parameter>void</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>void</parameter></term>
   <listitem>
    <para>
     no arguments
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API-sh64-get-wired-dtlb-entry">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_get_wired_dtlb_entry</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_get_wired_dtlb_entry</refname>
 <refpurpose>
     Allocate a wired (locked-in) entry in the DTLB
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned long long <function>sh64_get_wired_dtlb_entry </function></funcdef>
   <paramdef> <parameter>void</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>void</parameter></term>
   <listitem>
    <para>
     no arguments
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API-sh64-put-wired-dtlb-entry">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_put_wired_dtlb_entry</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_put_wired_dtlb_entry</refname>
 <refpurpose>
     Free a wired (locked-in) entry in the DTLB.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>sh64_put_wired_dtlb_entry </function></funcdef>
   <paramdef>unsigned long long <parameter>entry</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>entry</parameter></term>
   <listitem>
    <para>
     Address of TLB slot.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Works like a stack, last one to allocate must be first one to free.
</para>
</refsect1>
</refentry>

<refentry id="API-sh64-setup-tlb-slot">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_setup_tlb_slot</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_setup_tlb_slot</refname>
 <refpurpose>
     Load up a translation in a wired slot.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>sh64_setup_tlb_slot </function></funcdef>
   <paramdef>unsigned long long <parameter>config_addr</parameter></paramdef>
   <paramdef>unsigned long <parameter>eaddr</parameter></paramdef>
   <paramdef>unsigned long <parameter>asid</parameter></paramdef>
   <paramdef>unsigned long <parameter>paddr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>config_addr</parameter></term>
   <listitem>
    <para>
     Address of TLB slot.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>eaddr</parameter></term>
   <listitem>
    <para>
     Virtual address.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>asid</parameter></term>
   <listitem>
    <para>
     Address Space Identifier.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>paddr</parameter></term>
   <listitem>
    <para>
     Physical address.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Load up a virtual&lt;-&gt;physical translation for <parameter>eaddr</parameter>&lt;-&gt;<parameter>paddr</parameter> in the
   pre-allocated TLB slot <parameter>config_addr</parameter> (see sh64_get_wired_dtlb_entry).
</para>
</refsect1>
</refentry>

<refentry id="API-sh64-teardown-tlb-slot">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>sh64_teardown_tlb_slot</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>sh64_teardown_tlb_slot</refname>
 <refpurpose>
     Teardown a translation.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>sh64_teardown_tlb_slot </function></funcdef>
   <paramdef>unsigned long long <parameter>config_addr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>config_addr</parameter></term>
   <listitem>
    <para>
     Address of TLB slot.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Teardown any existing mapping in the TLB slot <parameter>config_addr</parameter>.
</para>
</refsect1>
</refentry>

<!-- arch/sh/include/asm/tlb_64.h -->
<refentry id="API-for-each-dtlb-entry">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>for_each_dtlb_entry</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>for_each_dtlb_entry</refname>
 <refpurpose>
  Iterate over free (non-wired) DTLB entries
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef> <function>for_each_dtlb_entry </function></funcdef>
   <paramdef> <parameter>tlb</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>tlb</parameter></term>
   <listitem>
    <para>
     TLB entry
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API-for-each-itlb-entry">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>for_each_itlb_entry</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>for_each_itlb_entry</refname>
 <refpurpose>
     Iterate over free (non-wired) ITLB entries
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef> <function>for_each_itlb_entry </function></funcdef>
   <paramdef> <parameter>tlb</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>tlb</parameter></term>
   <listitem>
    <para>
     TLB entry
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API---flush-tlb-slot">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>__flush_tlb_slot</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>__flush_tlb_slot</refname>
 <refpurpose>
     Flushes TLB slot <parameter>slot</parameter>.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>__flush_tlb_slot </function></funcdef>
   <paramdef>unsigned long long <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
     Address of TLB slot.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

      </sect2>
    </sect1>
  </chapter>
  <chapter id="mach">
    <title>Machine Specific Interfaces</title>
    <sect1 id="dreamcast">
      <title>mach-dreamcast</title>
<!-- arch/sh/boards/mach-dreamcast/rtc.c -->
<refentry id="API-aica-rtc-gettimeofday">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>aica_rtc_gettimeofday</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>aica_rtc_gettimeofday</refname>
 <refpurpose>
  Get the time from the AICA RTC
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>aica_rtc_gettimeofday </function></funcdef>
   <paramdef>struct timespec * <parameter>ts</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>ts</parameter></term>
   <listitem>
    <para>
     pointer to resulting timespec
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Grabs the current RTC seconds counter and adjusts it to the Unix Epoch.
</para>
</refsect1>
</refentry>

<refentry id="API-aica-rtc-settimeofday">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>aica_rtc_settimeofday</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>aica_rtc_settimeofday</refname>
 <refpurpose>
     Set the AICA RTC to the current time
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>aica_rtc_settimeofday </function></funcdef>
   <paramdef>const time_t <parameter>secs</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>secs</parameter></term>
   <listitem>
    <para>
     contains the time_t to set
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Adjusts the given <parameter>tv</parameter> to the AICA Epoch and sets the RTC seconds counter.
</para>
</refsect1>
</refentry>

    </sect1>
    <sect1 id="x3proto">
      <title>mach-x3proto</title>
<!-- arch/sh/boards/mach-x3proto/ilsel.c -->
<refentry id="API-ilsel-enable">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>ilsel_enable</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>ilsel_enable</refname>
 <refpurpose>
  Enable an ILSEL set.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>ilsel_enable </function></funcdef>
   <paramdef>ilsel_source_t <parameter>set</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>set</parameter></term>
   <listitem>
    <para>
     ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h).
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Enables a given non-aliased ILSEL source (&lt;= ILSEL_KEY) at the highest
   available interrupt level. Callers should take care to order callsites
   noting descending interrupt levels. Aliasing FPGA and external board
   IRQs need to use <function>ilsel_enable_fixed</function>.
   </para><para>

   The return value is an IRQ number that can later be taken down with
   <function>ilsel_disable</function>.
</para>
</refsect1>
</refentry>

<refentry id="API-ilsel-enable-fixed">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>ilsel_enable_fixed</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>ilsel_enable_fixed</refname>
 <refpurpose>
     Enable an ILSEL set at a fixed interrupt level
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>ilsel_enable_fixed </function></funcdef>
   <paramdef>ilsel_source_t <parameter>set</parameter></paramdef>
   <paramdef>unsigned int <parameter>level</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>set</parameter></term>
   <listitem>
    <para>
     ILSEL source (see ilsel_source_t enum in include/asm-sh/ilsel.h).
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>level</parameter></term>
   <listitem>
    <para>
     Interrupt level (1 - 15)
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Enables a given ILSEL source at a fixed interrupt level. Necessary
   both for level reservation as well as for aliased sources that only
   exist on special ILSEL#s.
   </para><para>

   Returns an IRQ number (as <function>ilsel_enable</function>).
</para>
</refsect1>
</refentry>

<refentry id="API-ilsel-disable">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>ilsel_disable</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>ilsel_disable</refname>
 <refpurpose>
     Disable an ILSEL set
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>ilsel_disable </function></funcdef>
   <paramdef>unsigned int <parameter>irq</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>irq</parameter></term>
   <listitem>
    <para>
     Bit position for ILSEL set value (retval from enable routines)
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Disable a previously enabled ILSEL set.
</para>
</refsect1>
</refentry>

    </sect1>
  </chapter>
  <chapter id="busses">
    <title>Busses</title>
    <sect1 id="superhyway">
      <title>SuperHyway</title>
<!-- drivers/sh/superhyway/superhyway.c -->
<refentry id="API-superhyway-add-device">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>superhyway_add_device</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>superhyway_add_device</refname>
 <refpurpose>
  Add a SuperHyway module
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>superhyway_add_device </function></funcdef>
   <paramdef>unsigned long <parameter>base</parameter></paramdef>
   <paramdef>struct superhyway_device * <parameter>sdev</parameter></paramdef>
   <paramdef>struct superhyway_bus * <parameter>bus</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>base</parameter></term>
   <listitem>
    <para>
     Physical address where module is mapped.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>sdev</parameter></term>
   <listitem>
    <para>
     SuperHyway device to add, or NULL to allocate a new one.
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>bus</parameter></term>
   <listitem>
    <para>
     Bus where SuperHyway module resides.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   This is responsible for adding a new SuperHyway module. This sets up a new
   struct superhyway_device for the module being added if <parameter>sdev</parameter> == NULL.
   </para><para>

   Devices are initially added in the order that they are scanned (from the
   top-down of the memory map), and are assigned an ID based on the order that
   they are added. Any manual addition of a module will thus get the ID after
   the devices already discovered regardless of where it resides in memory.
   </para><para>

   Further work can and should be done in <function>superhyway_scan_bus</function>, to be sure
   that any new modules are properly discovered and subsequently registered.
</para>
</refsect1>
</refentry>

<refentry id="API-superhyway-register-driver">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>superhyway_register_driver</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>superhyway_register_driver</refname>
 <refpurpose>
     Register a new SuperHyway driver
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>superhyway_register_driver </function></funcdef>
   <paramdef>struct superhyway_driver * <parameter>drv</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>drv</parameter></term>
   <listitem>
    <para>
     SuperHyway driver to register.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   This registers the passed in <parameter>drv</parameter>. Any devices matching the id table will
   automatically be populated and handed off to the driver's specified probe
   routine.
</para>
</refsect1>
</refentry>

<refentry id="API-superhyway-unregister-driver">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>superhyway_unregister_driver</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>superhyway_unregister_driver</refname>
 <refpurpose>
     Unregister a SuperHyway driver
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>superhyway_unregister_driver </function></funcdef>
   <paramdef>struct superhyway_driver * <parameter>drv</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>drv</parameter></term>
   <listitem>
    <para>
     SuperHyway driver to unregister.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   This cleans up after <function>superhyway_register_driver</function>, and should be invoked in
   the exit path of any module drivers.
</para>
</refsect1>
</refentry>

    </sect1>

    <sect1 id="maple">
      <title>Maple</title>
<!-- drivers/sh/maple/maple.c -->
<refentry id="API-maple-driver-register">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>maple_driver_register</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>maple_driver_register</refname>
 <refpurpose>
  register a maple driver
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>maple_driver_register </function></funcdef>
   <paramdef>struct maple_driver * <parameter>drv</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>drv</parameter></term>
   <listitem>
    <para>
     maple driver to be registered.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Registers the passed in <parameter>drv</parameter>, while updating the bus type.
   Devices with matching function IDs will be automatically probed.
</para>
</refsect1>
</refentry>

<refentry id="API-maple-driver-unregister">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>maple_driver_unregister</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>maple_driver_unregister</refname>
 <refpurpose>
     unregister a maple driver.
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>maple_driver_unregister </function></funcdef>
   <paramdef>struct maple_driver * <parameter>drv</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>drv</parameter></term>
   <listitem>
    <para>
     maple driver to unregister.
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<para>
   Cleans up after <function>maple_driver_register</function>. To be invoked in the exit
   path of any module drivers.
</para>
</refsect1>
</refentry>

<refentry id="API-maple-getcond-callback">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>maple_getcond_callback</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>maple_getcond_callback</refname>
 <refpurpose>
     setup handling MAPLE_COMMAND_GETCOND
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>maple_getcond_callback </function></funcdef>
   <paramdef>struct maple_device * <parameter>dev</parameter></paramdef>
   <paramdef>void (*<parameter>callback</parameter>)
     <funcparams>struct mapleq *mq</funcparams></paramdef>
   <paramdef>unsigned long <parameter>interval</parameter></paramdef>
   <paramdef>unsigned long <parameter>function</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dev</parameter></term>
   <listitem>
    <para>
     device responding
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>callback</parameter></term>
   <listitem>
    <para>
     handler callback
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>interval</parameter></term>
   <listitem>
    <para>
     interval in jiffies between callbacks
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>function</parameter></term>
   <listitem>
    <para>
     the function code for the device
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

<refentry id="API-maple-add-packet">
<refentryinfo>
 <title>LINUX</title>
 <productname>Kernel Hackers Manual</productname>
 <date>December 2013</date>
</refentryinfo>
<refmeta>
 <refentrytitle><phrase>maple_add_packet</phrase></refentrytitle>
 <manvolnum>9</manvolnum>
 <refmiscinfo class="version">3.11.10</refmiscinfo>
</refmeta>
<refnamediv>
 <refname>maple_add_packet</refname>
 <refpurpose>
     add a single instruction to the maple bus queue
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Synopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>maple_add_packet </function></funcdef>
   <paramdef>struct maple_device * <parameter>mdev</parameter></paramdef>
   <paramdef>u32 <parameter>function</parameter></paramdef>
   <paramdef>u32 <parameter>command</parameter></paramdef>
   <paramdef>size_t <parameter>length</parameter></paramdef>
   <paramdef>void * <parameter>data</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Arguments</title>
 <variablelist>
  <varlistentry>
   <term><parameter>mdev</parameter></term>
   <listitem>
    <para>
     maple device
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>function</parameter></term>
   <listitem>
    <para>
     function on device being queried
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>command</parameter></term>
   <listitem>
    <para>
     maple command to add
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>length</parameter></term>
   <listitem>
    <para>
     length of command string (in 32 bit words)
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>data</parameter></term>
   <listitem>
    <para>
     remainder of command string
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
</refentry>

    </sect1>
  </chapter>
</book>