<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" 
              "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<book id="GuiaMCA" lang="es">
 <bookinfo>
  <title>Interfaz de Programación del Controlador MCA</title>
  
  <authorgroup>
   <author>
    <firstname>Alan</firstname>
    <surname>Cox</surname>
    <affiliation>
     <address>
      <email>alan@redhat.com</email>
     </address>
    </affiliation>
   </author>
   <author>
    <firstname>David</firstname>
    <surname>Weinehall</surname>
   </author>
   <author>
    <firstname>Chris</firstname>
    <surname>Beauregard</surname>
   </author>
  </authorgroup>

  <copyright>
   <year>2000</year>
   <holder>Alan Cox</holder>
   <holder>David Weinehall</holder>
   <holder>Chris Beauregard</holder>
  </copyright>

  <legalnotice>
  <para>
     Esta documentación es software libre; puedes redistrubuirla
     y/o modificarla bajo los términos de la GNU General Public
     License tal como ha sido publicada por la Free Software
     Foundation; por la versión 2 de la licencia, o (a tu elección)
     por cualquier versión posterior.
   </para>

   <para>
    Este programa es distribuido con la esperanza de que sea útil,
    pero SIN NINGUNA GARANTIA; sin incluso la garantía implicada
    de COMERCIABILIDAD o ADECUACCION PARA UN PROPOSITO PARTICULAR.
    Para más detalles refiérase a la GNU General Public License.
   </para>

   <para>
     Debería de haber recibido una copia de la GNU General Public
     License con este programa; si no es así, escriba a la Free
     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
     MA 02111-1307 USA
   </para>

   <para>
     Para más detalles véase el archivo COPYING en la
     distribución fuente de Linux.
   </para>
  </legalnotice>
 </bookinfo>

<toc></toc>

  <chapter id="intro">
      <title>Introducción</title>
  <para>
	Las funciones del bus MCA suministran una interfaz generalizada para
	encontrar tarjetas del bus MCA, pedirles un controlador, y para
	leer y manipular los registros POS sin ser conscientes de los entresijos
 	de la placa madre o de cierta magia profunda específica de los dispositivos
	de la placa.
  </para>
  <para>
	La interfaz básica de los dispositivos del bus MCA es el slot. Cada
	slot está numerado y los números de slots virtuales son asignados
	a los dispositivos internos. Realmente el usar pci_dev como con otros buses
	no tiene sentido en los contextos MCA, ya que los recursos
	del bus MCA requieren una interpretación específica de la tarjeta.
  </para>
  <para>
	Finalmente, las funciones del bus MCA suministran un conjunto paralelo
	de funciones DMA parecidas a las funciones DMA del bus ISA, tan
	cerradamente como es posible, aunque también soportan las funcionalidades
	adicionales DMA en las controladoras del bus MCA.
  </para>
  </chapter>
  <chapter id="bugs">
     <title>Bugs Conocidos Y Suposiciones</title>
  <para>
	Ninguno.	
  </para>
  </chapter>

  <chapter id="pubfunctions">
     <title>Funciones Públicas Suministradas</title>
<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-find-adapter">mca_find_adapter</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_find_adapter</refname>
 <refpurpose>
   busca adaptadores
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_find_adapter </function></funcdef>
   <paramdef>int <parameter>id</parameter></paramdef>
   <paramdef>int <parameter>start</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>id</parameter></term>
   <listitem>
    <para>
	Identificación del bus MCA en el que buscar
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>start</parameter></term>
   <listitem>
    <para>
     	slot de comienzo
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Busca en la configuración del MCA adaptadores que se 
   correspondan con la identificación de 16 bits. La primera
   vez debería de ser llamado para que empiece en cero, y entonces las
   llamadas posteriores que se harán pasando el valor de retorno de
   la llamada previa hasta que sea retornado <constant>MCA_NOTFOUND</constant>.
   </para><para>

   Los adaptadores deshabilitados no son reportados.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-find-unused-adapter">mca_find_unused_adapter</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_find_unused_adapter</refname>
 <refpurpose>
      busca adaptadores sin usar
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_find_unused_adapter </function></funcdef>
   <paramdef>int <parameter>id</parameter></paramdef>
   <paramdef>int <parameter>start</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>id</parameter></term>
   <listitem>
    <para>
        Identificación del bus MCA en el que buscar
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>start</parameter></term>
   <listitem>
    <para>
        slot de comienzo
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Busca en la configuración del MCA adaptadores que se
   correspondan con la identificación de 16 bits. La primera
   vez debería de ser llamado para que empiece en cero, y entonces las
   llamadas posteriores que se harán pasando el valor de retorno de
   la llamada previa hasta que sea retornado <constant>MCA_NOTFOUND</constant>.
   </para><para>

   Los adaptadores que han sido reclamados por controladores o que están
   deshabilitados no son reportados. Esta función permite a un controlador
   buscar tarjetas adicionales cuando quizás alguien ya las controle.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-read-stored-pos">mca_read_stored_pos</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_read_stored_pos</refname>
 <refpurpose>
      lee los registros POS de los datos de arranque
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned char <function>mca_read_stored_pos </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
   <paramdef>int <parameter>reg</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
      número de slot desde donde leer
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>reg</parameter></term>
   <listitem>
    <para>
       registro desde donde leer
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Obtiene un valor POS que fue almacenado en tiempo de arranque
   por el núcleo cuando este buscó en el espacio del MCA. Es retornado el valor
   del registro. Registros perdidos o inválidos devuelven un 0.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-read-pos">mca_read_pos</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_read_pos</refname>
 <refpurpose>
      lee el registro POS de la tarjeta
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned char <function>mca_read_pos </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
   <paramdef>int <parameter>reg</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
      número de slot desde donde leer
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>reg</parameter></term>
   <listitem>
    <para>
       registro de donde leer
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Obtiene un valor POS directamente del hardware para obtener el
   valor actual. Esto es mucho más lento que mca_read_stored_pos y
   quizás no sea llamado desde el contexto de interrupciones. Maneja
   la magia profunda requerida para los dispositivos en la placa de
   forma transparente.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-write-pos">mca_write_pos</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_write_pos</refname>
 <refpurpose>
      lee el registro POS de la tarjeta
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_write_pos </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
   <paramdef>int <parameter>reg</parameter></paramdef>
   <paramdef>unsigned char <parameter>byte</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
      número de slot desde donde leer
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>reg</parameter></term>
   <listitem>
    <para>
       registro de donde leer
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>byte</parameter></term>
   <listitem>
    <para>
      byte a escrigir en los registros POS
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Almacena un valor POS directamente al hardware. Normalmente no 
   necesitarías usar esta función y deberías de tener un muy buen
   conocimiento del bus MCA antes de hacerlo. Realizando esto de
   forma incorrecta puedes dañar el hardware.
   </para><para>

   Esta función quizás no sea usada desde un contexto de interrupciones.
   </para><para>

   Nota que esto es técnicamente Algo Malo, como dice el equipo técnico de
   IBM, sólo deberías de establecer valores POS a través de sus
   utilidades.
   En todo caso, algunos dispositivos como el 3c523 recomiendan que
   les escribas algunos datos para asegurarte de que la configuración
   es consistente. Yo diría que IBM está en lo cierto, pero me
   gusta que mis controladores funcionen.
   </para><para>

   Esta función no puede chequear para ver si múltiples dispositivos
   están con los mismos recursos, por lo tanto quizás veas humo mágico
   si alguien se lía.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-adapter-name">mca_set_adapter_name</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_adapter_name</refname>
 <refpurpose>
      Establece la descripción de la tarjeta
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_adapter_name </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
   <paramdef>char* <parameter>name</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
      slot a nombrar
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>name</parameter></term>
   <listitem>
    <para>
      cadena de texto para el nombre
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Esta función establece el nombre reportado a través de /proc
   para este slot adaptador. Esto es únicamente para información
   de usuario. Estableciendo un nombre borra cualquier nombre
   previo.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-adapter-procfn">mca_set_adapter_procfn</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_adapter_procfn</refname>
 <refpurpose>
      Establece la retrollamada /proc
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_adapter_procfn </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
   <paramdef>MCA_ProcFn <parameter>procfn</parameter></paramdef>
   <paramdef>void* <parameter>dev</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
      slot a configurar
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>procfn</parameter></term>
   <listitem>
    <para>
      función de retrollamada a llamar para /proc 
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>dev</parameter></term>
   <listitem>
    <para>
      información del dispositivo pasada a la retrollamada
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Establece una retrollamada de información para /proc/mca/slot?.
   La función es llamada con el buffer, slot y puntero al dispositivo (o
   alguna otra información igualmente informativa del contexto, o nada, si
   lo prefieres), y se espera que ponga información útil en el buffer.
   El nombre del adaptador, ID, y registros POS fueron imprimidos antes
   de esta llamada, por lo tanto no lo hagas otra vez.
   </para><para>

   Debería de ser llamada con un <parameter>procfn</parameter>
   <constant>NULL</constant> cuando un módulo se desregistra, entonces preveniendo
   que el núcleo rompa y otras semejantes cosas feas.
   
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-is-adapter-used">mca_is_adapter_used</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_is_adapter_used</refname>
 <refpurpose>
      chequea si fue pedido por un controlador
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_is_adapter_used </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
        slot a chequear
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Retorna 1 si el slot ha sido pedido por un controlador
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-mark-as-used">mca_mark_as_used</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_mark_as_used</refname>
 <refpurpose>
      pide un dispositivo MCA
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_mark_as_used </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
        slot a pedir
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>FIXME</title>
 <para>
     deberíamos hacer esto seguro para los threads
   </para><para>

   Pide un slot MCA para un controlador de dispositivo.
   Si el slot ya está tomado la función retorna 1, si no
   está tomado es pedido y es devuelto un 0. 
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-mark-as-unused">mca_mark_as_unused</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_mark_as_unused</refname>
 <refpurpose>
      libera un dispositivo MCA
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_mark_as_unused </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
        slot a pedir
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Libera el slot para que otros controladoras lo usen.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-get-adapter-name">mca_get_adapter_name</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_get_adapter_name</refname>
 <refpurpose>
      obtiene la descripción del adaptador
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>char * <function>mca_get_adapter_name </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
        slot al que preguntar
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Retorna la descripción del adaptador si está establecida. Si no
   ha sido establecida o el slot está fuera de rango entonces
   devuelve NULL.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-isadapter">mca_isadapter</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_isadapter</refname>
 <refpurpose>
      chequea si el slot mantiene un adaptador
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_isadapter </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
	slot al que preguntar
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Retorna cero si el slot no mantiene un adaptador, distinto de cero
   si lo mantiene.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-isenabled">mca_isenabled</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_isenabled</refname>
 <refpurpose>
      chequa si el slot mantiene un adaptador
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>int <function>mca_isenabled </function></funcdef>
   <paramdef>int <parameter>slot</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>slot</parameter></term>
   <listitem>
    <para>
        slot al que preguntar
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Retorna un valor distinto de cero si el slot mantiene un adaptador
   habilitado y cero para cualquier otro caso.
 </para>
</refsect1>
</refentry>

  </chapter>

  <chapter id="dmafunctions">
     <title>Funciones DMA Suministradas</title>
<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-enable-dma">mca_enable_dma</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_enable_dma</refname>
 <refpurpose>
	canal en el que habilitar el DMA
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_enable_dma </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Habilita en el bus MCA el DMA en un canal. Puede ser
   llamado desde un contexto IRQ. 
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-disable-dma">mca_disable_dma</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_disable_dma</refname>
 <refpurpose>
 	canal en el que deshabilitar el DMA
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_disable_dma </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Habilita en el bus MCA el DMA en un canal. Puede ser
   llamado desde un contexto IRQ.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-dma-addr">mca_set_dma_addr</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_dma_addr</refname>
 <refpurpose>
        carga una dirección DMA de 24 bits
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_dma_addr </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
   <paramdef>unsigned int <parameter>a</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>a</parameter></term>
   <listitem>
    <para>
      direcciones de bus de 24 bits
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Carga los registros de direcciones en el controlador DMA. Esto tiene
   una limitación de 24 bits (16Mb).
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-get-dma-addr">mca_get_dma_addr</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_get_dma_addr</refname>
 <refpurpose>
 	carga una dirección DMA de 24 bits
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned int <function>mca_get_dma_addr </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Lee los registros de direcciones en el controlador DMA. Esto tenía 
   una limitación de 24 bits (16Mb). El retorno es una dirección del bus.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-dma-count">mca_set_dma_count</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_dma_count</refname>
 <refpurpose>
  	carga una cuenta de transferencia de 16 bits
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_dma_count </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
   <paramdef>unsigned int <parameter>count</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>count</parameter></term>
   <listitem>
    <para>
      count
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Establece la cuenta DMA para este canal. Esto puede ser hasta
   64Kbytes. Estableciendo una cuenta a cero no hará lo que esperas.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-get-dma-residue">mca_get_dma_residue</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_get_dma_residue</refname>
 <refpurpose>
	obtiene los bytes que quedan por transferir
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>unsigned int <function>mca_get_dma_residue </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   Esta función retorna el número de bytes que quedan por 
   transferir en este canal DMA.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-dma-io">mca_set_dma_io</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_dma_io</refname>
 <refpurpose>
        establece el puerto para una transferencia de E/S
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_dma_io </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
   <paramdef>unsigned int <parameter>io_addr</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>io_addr</parameter></term>
   <listitem>
    <para>
      un número de puerto de E/S
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   A diferencia de los controladores DMA del bus ISA un bus MCA puede
   transferir con un puerto de E/S de destino.
 </para>
</refsect1>
</refentry>

<refentry>
<refmeta>
<refentrytitle><phrase id="API-mca-set-dma-mode">mca_set_dma_mode</phrase></refentrytitle>
</refmeta>
<refnamediv>
 <refname>mca_set_dma_mode</refname>
 <refpurpose>
	establece el modo de DMA
 </refpurpose>
</refnamediv>
<refsynopsisdiv>
 <title>Sinopsis</title>
  <funcsynopsis><funcprototype>
   <funcdef>void <function>mca_set_dma_mode </function></funcdef>
   <paramdef>unsigned int <parameter>dmanr</parameter></paramdef>
   <paramdef>unsigned int <parameter>mode</parameter></paramdef>
  </funcprototype></funcsynopsis>
</refsynopsisdiv>
<refsect1>
 <title>Argumentos</title>
 <variablelist>
  <varlistentry>
   <term><parameter>dmanr</parameter></term>
   <listitem>
    <para>
      canal DMA
    </para>
   </listitem>
  </varlistentry>
  <varlistentry>
   <term><parameter>mode</parameter></term>
   <listitem>
    <para>
      modo a establecer
    </para>
   </listitem>
  </varlistentry>
 </variablelist>
</refsect1>
<refsect1>
 <title>Descripción</title>
 <para>
   El controlador DMA soporta varios modos. Los modos que puedes tener son
 </para>
</refsect1>
<refsect1>
 <title>set are </title>
 <para>
   </para><para>

   <constant>MCA_DMA_MODE_READ</constant> para leer de un dispositivo DMA.
   </para><para>

   <constant>MCA_DMA_MODE_WRITE</constant> para escribir al dispositivo DMA.
   </para><para>

   <constant>MCA_DMA_MODE_IO</constant> para hacer DMA a o desde un puerto de E/S.
   </para><para>

   <constant>MCA_DMA_MODE_16</constant> para hacer transferencias de 16 bits.
 </para>
</refsect1>
</refentry>

  </chapter>

<chapter id="traduccion">
     <title>Sobre la Traducción</title>
        <para>
        Este documento es la traducción de "MCA Driver Programming Interface", documento que
        acompaña al código del núcleo de Linux, versión 2.4.18.
        </para>

        <para>
        Este documento ha sido traducido por Rubén Melcón
        <email>melkon@terra.es</email>; y es publicado por el <ulink
        url="http://lucas.hispalinux.es">Proyecto Lucas</ulink>
        </para>

        <para>
        Versión de la tradución 0.04 ( Julio de 2002 ).
        </para>

        <para>
        Si tienes comentarios sobre la traducción, ponte en contacto con Rubén Melcón
        <email>melkon@terra.es</email>
        </para>

  </chapter>

</book>
