changeset 212:94b558c9fb67

Merge from eCos master repository on 2002-05-31-00:05:29-BST
author jlarmour
date Fri, 31 May 2002 01:05:53 +0000
parents 6eb55882e01c
children 3a5832bf0564
files packages/compat/uitron/current/doc/uitron.sgml packages/devs/eth/arm/ks32c5000/current/ChangeLog packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c packages/devs/eth/cf/current/ChangeLog packages/devs/eth/cf/current/src/if_sc_lpe.c packages/devs/eth/cl/cs8900a/current/ChangeLog packages/devs/eth/cl/cs8900a/current/include/cs8900.h packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c packages/devs/eth/frv/frv400/current/ChangeLog packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl packages/devs/eth/h8300/aki3068net/current/ChangeLog packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c packages/devs/eth/ns/dp83902a/current/ChangeLog packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c packages/devs/eth/powerpc/fec/current/ChangeLog packages/devs/eth/powerpc/fec/current/src/fec.h packages/devs/eth/powerpc/fec/current/src/if_fec.c packages/devs/eth/powerpc/quicc/current/ChangeLog packages/devs/eth/powerpc/quicc/current/src/if_quicc.c packages/hal/arm/arch/current/ChangeLog packages/hal/arm/arch/current/cdl/hal_arm.cdl packages/hal/arm/arch/current/src/redboot_linux_exec.c packages/hal/arm/iq80310/current/ChangeLog packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl packages/hal/arm/iq80310/current/include/hal_iq80310.h packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm packages/hal/arm/xscale/iq80321/current/ChangeLog packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm packages/hal/arm/xscale/verde/current/ChangeLog packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl packages/hal/arm/xscale/verde/current/include/hal_verde.h packages/hal/powerpc/quicc/current/ChangeLog packages/hal/powerpc/quicc/current/src/quicc_smc1.c packages/hal/powerpc/viper/current/ChangeLog packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt packages/io/eth/current/ChangeLog packages/io/eth/current/cdl/eth_drivers.cdl packages/net/common/current/ChangeLog packages/net/common/current/src/inet_pton.c packages/net/common/current/tests/bridge.c packages/net/common/current/tests/flood.c packages/net/common/current/tests/tcp_echo.c packages/net/ns/dns/current/ChangeLog packages/net/ns/dns/current/src/dns.c packages/redboot/current/doc/redboot_cmds.sgml
diffstat 56 files changed, 1870 insertions(+), 357 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/compat/uitron/current/doc/uitron.sgml
@@ -0,0 +1,1354 @@
+<part id="compat-uitron">
+  <title>&micro;ITRON</title>
+<CHAPTER id="compat-uitron-microitron-api">
+<TITLE><!-- <xref> -->&micro;ITRON API</TITLE>
+<SECT1 id="compat-uitron-introduction">
+<TITLE><!-- <index></index> -->Introduction to &micro;ITRON</TITLE>
+<PARA>The <!-- <index></index> -->&micro;ITRON specification
+defines a highly flexible operating system architecture designed
+specifically for application in embedded systems. The specification addresses
+features which are common to the majority of processor architectures and
+deliberately avoids virtualization which would adversely impact
+real-time performance. The &micro;ITRON specification
+may be implemented on many hardware platforms and provides significant
+advantages by reducing the effort involved in understanding and
+porting application software to new processor architectures. </PARA>
+<PARA>Several revisions of the &micro;ITRON specification exist.
+	In this release, <EMPHASIS>eCos</EMPHASIS> supports the
+	&micro;ITRON version 3.02 specification, with complete
+	&ldquo;Standard functionality&rdquo; (level S), plus many
+	&ldquo;Extended&rdquo; (level E) functions. The definitive
+	reference on &micro;ITRON is Dr. Sakamura&rsquo;s book:
+	  <CITETITLE>&micro;ITRON 3.0, An Open and Portable Real-Time Operating
+	  System for Embedded Systems</CITETITLE>. 
+	The book can be purchased from the IEEE Press, and
+	an ASCII version of the standard can be found online at
+<ulink url="http://www.itron.gr.jp/">http://www.itron.gr.jp/</ulink>.
+The old address 
+<ulink url="http://tron.um.u-tokyo.ac.jp/TRON/ITRON/">
+http://tron.um.u-tokyo.ac.jp/TRON/ITRON/</ulink>
+still exists as a mirror site. </PARA>
+</SECT1>
+<SECT1 id="compat-uitron-over-ecos">
+<TITLE><!-- <index></index> -->&micro;ITRON and <EMPHASIS>eCos</EMPHASIS></TITLE>
+<PARA>The <EMPHASIS>eCos</EMPHASIS> kernel implements the functionality
+used by the &micro;ITRON compatibility subsystem.
+The configuration of the kernel influences the behavior of &micro;ITRON
+programs.</PARA>
+<PARA>In particular, the default configuration has time slicing
+(also known as round-robin scheduling) switched on; this means that
+a task can be moved from <varname>RUN</varname> state
+to <varname>READY</varname> state at any time, in
+order that one of its peers may run. This is not strictly conformant
+to the &micro;ITRON specification, which
+states that timeslicing may be implemented by periodically issuing
+a <literal>rot_rdq(0)</literal> call from
+within a periodic task or cyclic handler; otherwise it is expected
+that a task runs until it is pre-empted in consequence of synchronization
+or communication calls it makes, or the effects of an interrupt
+or other external event on a higher priority task cause that task
+to become <varname>READY</varname>. To disable timeslicing
+functionality in the kernel and &micro;ITRON
+compatibility environment, please disable the 
+<LITERAL>CYGSEM_KERNEL_SCHED_TIMESLICE</LITERAL>
+configuration option in the kernel package. A description of kernel
+scheduling is in <xref linkend="kernel-overview">. </PARA>
+<PARA>For another example, the semantics of task queueing when waiting
+on a synchronization object depend solely on the way the underlying
+kernel is configured. As discussed above, the multi-level queue
+scheduler is the only one which is &micro;ITRON
+compliant, and it queues waiting tasks in FIFO order. Future releases
+of that scheduler might be configurable to support priority ordering
+of task queues. Other schedulers might be different again: for example
+the bitmap scheduler can be used with the &micro;ITRON
+compatibility layer, even though it only allows one task at each
+priority and as such is not &micro;ITRON
+compliant, but it supports only priority ordering of task queues.
+So which queueing scheme is supported is not really a property of
+the &micro;ITRON compatibility layer; it
+depends on the kernel. </PARA>
+<PARA>In this version of the &micro;ITRON
+compatibility layer, the calls to disable and enable scheduling
+and interrupts (<FUNCTION>dis_dsp()</FUNCTION>,
+<FUNCTION>ena_dsp()</FUNCTION>, <FUNCTION>loc_cpu()</FUNCTION>
+and <FUNCTION>unl_cpu()</FUNCTION>)
+call underlying kernel functions; in particular, the <FUNCTION>xxx_dsp()</FUNCTION> functions
+lock the scheduler entirely, which prevents dispatching of DSRs; functions
+implemented by DSRs include clock counters and alarm timers. Thus time &ldquo;stops&rdquo; while
+dispatching is disabled with <FUNCTION>dis_dsp()</FUNCTION>. </PARA>
+<PARA>Like all parts of the <EMPHASIS>eCos</EMPHASIS> system, the
+detailed semantics of the &micro;ITRON layer
+are dependent on its configuration and the configuration of other components
+that it uses. The &micro;ITRON configuration
+options are all defined in the file <filename>pkgconf/uitron.h</filename>,
+and can be set using the configuration tool or editing the
+<filename>.ecc</filename>
+file in your build directory by hand. </PARA>
+<PARA>An important configuration option for the &micro;ITRON
+compatibility layer is &ldquo;Option: Return Error Codes for Bad Params&rdquo;
+(
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+), which allows a lot of the error
+checking code in the &micro;ITRON compatibility layer to
+be removed. Of course this leaves a program open to undetected errors,
+so it should only be used once an application is fully debugged and
+tested. Its benefits include reduced code size and faster execution.
+However, it affects the API significantly, in that with this option
+enabled, bad calls do not return errors, but cause an assert
+failure (if that is itself enabled) or malfunction internally. There
+is discussion in more detail about this in each section below.</PARA>
+<PARA>We now give a brief description of the &micro;ITRON
+functions which are implemented in this release. Note that all C
+and C&plus;&plus; source files should have the following <literal>#include</literal> statement: </PARA>
+<PROGRAMLISTING>#include &lt;cyg/compat/uitron/uit_func.h&gt;</PROGRAMLISTING>
+</SECT1>
+<SECT1 id="compat-uitron-task-management-functions">
+<TITLE><!-- <index></index> -->Task Management Functions</TITLE>
+<PARA>The following functions are fully supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>sta_tsk</FUNCTION>( 
+  ID <EMPHASIS>tskid,</EMPHASIS>
+  INT <EMPHASIS>stacd</EMPHASIS> )</programlisting>
+	<programlisting>
+void <FUNCTION>ext_tsk</FUNCTION>( void )</programlisting>
+	<programlisting>
+void <FUNCTION>exd_tsk</FUNCTION>( void )</programlisting>
+	<programlisting>
+ER <FUNCTION>dis_dsp</FUNCTION>( void )</programlisting>
+	<programlisting>
+ER <FUNCTION>ena_dsp</FUNCTION>( void )</programlisting>
+	<programlisting>
+ER <FUNCTION>chg_pri</FUNCTION>( 
+  ID <EMPHASIS>tskid,</EMPHASIS>
+  PRI <EMPHASIS>tskpri</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>rot_rdq</FUNCTION>( 
+  PRI <EMPHASIS>tskpri</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>get_tid</FUNCTION>( 
+  ID *<EMPHASIS>p_tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>ref_tsk</FUNCTION>( 
+  T_RTSK *<EMPHASIS>pk_rtsk,</EMPHASIS>
+  ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>ter_tsk</FUNCTION>( 
+  ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>rel_wai</FUNCTION>( 
+  ID <EMPHASIS>tskid</EMPHASIS> )</PROGRAMLISTING>
+<PARA>The following two functions are supported in this release,
+when enabled with the configuration option 
+<LITERAL>CYGPKG_UITRON_TASKS_CREATE_DELETE</LITERAL>
+with some restrictions:</PARA>
+<PROGRAMLISTING>ER <FUNCTION>cre_tsk</FUNCTION>( 
+  ID <EMPHASIS>tskid,</EMPHASIS>
+  T_CTSK *<EMPHASIS>pk_ctsk</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>del_tsk</FUNCTION>( 
+  ID <EMPHASIS>tskid</EMPHASIS> )</PROGRAMLISTING>
+<PARA>These functions are restricted as follows:</PARA>
+<PARA>Because of the static initialization facilities provided for
+system objects, a task is allocated stack space statically in the
+configuration. So while tasks can be created and deleted, the same
+stack space is used for that task (task ID number) each time. Thus
+the stack size (pk_ctsk-&gt;stksz) requested in <FUNCTION>cre_tsk()</FUNCTION> is
+checked for being less than that which was statically allocated,
+and otherwise ignored. This ensures that the new task will have
+enough stack to run. For this reason <FUNCTION>del_tsk()</FUNCTION> does
+not in any sense free the memory that was in use for the task's
+stack. </PARA>
+<PARA>The task attributes (pk_ctsk-&gt;tskatr) are
+ignored; current versions of <EMPHASIS>eCos</EMPHASIS> do not need
+to know whether a task is written in assembler or C/C&plus;&plus; so
+long as the procedure call standard appropriate to the CPU is followed.</PARA>
+<PARA>Extended information (pk_ctsk-&gt;exinf) is
+	  ignored.</PARA>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>For all these calls, an invalid task id (tskid) (less than
+1 or greater than the number of configured tasks) only returns E_ID
+when bad params return errors (
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled, see above).</PARA>
+<PARA>Similarly, the following conditions are only checked for,
+and only return errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>pk_crtk in 
+<FUNCTION>cre_tsk()</FUNCTION>
+ is a valid pointer, otherwise return E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>ter_tsk()</FUNCTION>
+ or 
+<FUNCTION>rel_wai()</FUNCTION>
+ on the calling task returns E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>the CPU is not locked already in 
+<FUNCTION>dis_dsp()</FUNCTION>
+ and 
+<FUNCTION>ena_dsp()</FUNCTION>
+; returns E_CTX</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>priority level in 
+<FUNCTION>chg_pri()</FUNCTION>
+ and 
+<FUNCTION>rot_rdq()</FUNCTION>
+ is checked for validity, E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in 
+<FUNCTION>get_tid()</FUNCTION>
+ and 
+<FUNCTION>ref_tsk()</FUNCTION>
+ is a valid pointer, or E_PAR</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+<PARA>The following conditions are checked for, and return
+	    error codes if appropriate, regardless of the setting of
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>When create and delete functions 
+<FUNCTION>cre_tsk()</FUNCTION>
+ and 
+<FUNCTION>del_tsk()</FUNCTION>
+ are supported, all calls which use a valid task ID number check
+that the task exists; if not, E_NOEXS is returned</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>When supported, 
+<FUNCTION>cre_tsk()</FUNCTION>
+: the task must not already exist; otherwise E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>When supported, 
+<FUNCTION>cre_tsk()</FUNCTION>
+: the requested stack size must not be larger than that statically
+configured for the task; see the configuration options
+&ldquo;Static initializers&rdquo;, and &ldquo;Default stack size&rdquo;.
+Else E_NOMEM</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>When supported, 
+<FUNCTION>del_tsk()</FUNCTION>
+: the underlying 
+<EMPHASIS>eCos</EMPHASIS>
+ thread must not be running - this would imply either a bug or some
+program bypassing the 
+&micro;ITRON compatibility layer and manipulating the thread directly.
+E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>sta_tsk()</FUNCTION>
+: the task must be dormant, else E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>ter_tsk()</FUNCTION>
+: the task must not be dormant, else E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>chg_pri()</FUNCTION>
+: the task must not be dormant, else E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>rel_wai()</FUNCTION>
+: the task must be in 
+<varname>WAIT</varname> or <varname>WAIT-SUSPEND</varname>
+ state, else E_OBJ</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-task-dependent-synch-functions">
+<TITLE><!-- <index></index> -->Task-Dependent Synchronization Functions</TITLE>
+<PARA>These functions are fully supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>sus_tsk</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>rsm_tsk</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>frsm_tsk</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+<programlisting>
+ER <FUNCTION>slp_tsk</FUNCTION>( void )</programlisting>
+	<programlisting>
+ER <FUNCTION>tslp_tsk</FUNCTION>( 
+    TMO <EMPHASIS>tmout</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>wup_tsk</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>can_wup</FUNCTION>( 
+    INT *<EMPHASIS>p_wupcnt,</EMPHASIS>    ID <EMPHASIS>tskid</EMPHASIS> )</PROGRAMLISTING>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>The following conditions are only checked for, and only return
+errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled (see the configuration option &ldquo;Return Error Codes for Bad
+Params&rdquo;):</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>invalid tskid; less than 1 or greater than 
+<LITERAL>CYGNUM_UITRON_TASKS</LITERAL>
+returns E_ID</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>wup_tsk()</FUNCTION>
+, 
+<FUNCTION>sus_tsk()</FUNCTION>
+, 
+<FUNCTION>rsm_tsk()</FUNCTION>
+, 
+<FUNCTION>frsm_tsk()</FUNCTION>
+ on the calling task returns E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>dispatching is enabled in 
+<FUNCTION>tslp_tsk()</FUNCTION>
+ and 
+<FUNCTION>slp_tsk()</FUNCTION>
+, or E_CTX</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>tmout must be positive, otherwise E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in 
+<FUNCTION>can_wup()</FUNCTION>
+ is a valid pointer, or E_PAR</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+<PARA>The following conditions are checked for, and can
+	    return error codes, regardless of the setting of
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>:
+</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>When create and delete functions 
+<FUNCTION>cre_tsk()</FUNCTION>
+ and 
+<FUNCTION>del_tsk()</FUNCTION>
+ are supported, all calls which use a valid task ID number check
+that the task exists; if not, E_NOEXS is returned</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>sus_tsk()</FUNCTION>
+: the task must not be dormant, else E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>frsm/rsm_tsk()</FUNCTION>
+: the task must be suspended, else E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>tslp/slp_tsk()</FUNCTION>
+: return codes E_TMOUT, E_RLWAI and E_DLT
+are returned depending on the reason for terminating the sleep</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>wup_tsk()</FUNCTION>
+ and 
+<FUNCTION>can_wup()</FUNCTION>
+: the task must not be dormant, or E_OBJ is returned</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-sync-and-comm-functions">
+<TITLE><!-- <index></index> -->	  Synchronization and Communication Functions</TITLE>
+<PARA>These functions are fully supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>sig_sem</FUNCTION>( 
+    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>wai_sem</FUNCTION>( 
+    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>preq_sem</FUNCTION>( 
+    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>twai_sem</FUNCTION>( 
+    ID <EMPHASIS>semid,</EMPHASIS>    TMO <EMPHASIS>tmout</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_sem</FUNCTION>( 
+    T_RSEM *<EMPHASIS>pk_rsem ,</EMPHASIS>    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>set_flg</FUNCTION>( 
+    ID <EMPHASIS>flgid,</EMPHASIS>    UINT <EMPHASIS>setptn</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>clr_flg</FUNCTION>( 
+    ID <EMPHASIS>flgid,</EMPHASIS>    UINT <EMPHASIS>clrptn</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>wai_flg</FUNCTION>( 
+    UINT *<EMPHASIS>p_flgptn,</EMPHASIS>    ID <EMPHASIS>flgid ,</EMPHASIS>
+    UINT <EMPHASIS>waiptn ,</EMPHASIS>    UINT <EMPHASIS>wfmode</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>pol_flg</FUNCTION>( 
+    UINT *<EMPHASIS>p_flgptn,</EMPHASIS>    ID <EMPHASIS>flgid ,</EMPHASIS>
+    UINT <EMPHASIS>waiptn ,</EMPHASIS>    UINT <EMPHASIS>wfmode</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>twai_flg</FUNCTION>( 
+    UINT *<EMPHASIS>p_flgptn</EMPHASIS>    ID <EMPHASIS>flgid ,</EMPHASIS>
+    UINT <EMPHASIS>waiptn ,</EMPHASIS>    UINT <EMPHASIS>wfmode,</EMPHASIS>    TMO <EMPHASIS>tmout</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_flg</FUNCTION>( 
+    T_RFLG *<EMPHASIS>pk_rflg,</EMPHASIS>    ID <EMPHASIS>flgid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>snd_msg</FUNCTION>( 
+    ID <EMPHASIS>mbxid,</EMPHASIS>    T_MSG <EMPHASIS>*pk_msg</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>rcv_msg</FUNCTION>( 
+    T_MSG **<EMPHASIS>ppk_msg,</EMPHASIS>    ID <EMPHASIS>mbxid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>prcv_msg</FUNCTION>( 
+    T_MSG **<EMPHASIS>ppk_msg,</EMPHASIS>    ID <EMPHASIS>mbxid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>trcv_msg</FUNCTION>( 
+    T_MSG **<EMPHASIS>ppk_msg,</EMPHASIS>    ID <EMPHASIS>mbxid ,</EMPHASIS>    TMO <EMPHASIS>tmout</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_mbx</FUNCTION>( 
+    T_RMBX *<EMPHASIS>pk_rmbx,</EMPHASIS>    ID <EMPHASIS>mbxid</EMPHASIS> )</PROGRAMLISTING>
+<PARA>The following functions are supported in this release (with
+some restrictions) if enabled with the appropriate configuration
+option for the object type (for example 
+<LITERAL>CYGPKG_UITRON_SEMAS_CREATE_DELETE</LITERAL>):
+</PARA>
+<PROGRAMLISTING>ER <FUNCTION>cre_sem</FUNCTION>( 
+    ID <EMPHASIS>semid,</EMPHASIS>    T_CSEM *<EMPHASIS>pk_csem</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>del_sem</FUNCTION>( 
+    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>cre_flg</FUNCTION>( 
+    ID <EMPHASIS>flgid,</EMPHASIS>    T_CFLG *<EMPHASIS>pk_cflg</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>del_flg</FUNCTION>( 
+    ID <EMPHASIS>flgid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>cre_mbx</FUNCTION>( 
+    ID <EMPHASIS>mbxid,</EMPHASIS>    T_CMBX *<EMPHASIS>pk_cmbx</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>del_mbx</FUNCTION>( 
+    ID <EMPHASIS>mbxid</EMPHASIS> )</PROGRAMLISTING>
+<PARA>In general the queueing order when waiting on a synchronization
+object depends on the underlying kernel configuration. The multi-level
+queue scheduler is required for strict &micro;ITRON
+conformance and it queues tasks in FIFO order, so requests to create
+an object with priority queueing of tasks (<literal>pk_cxxx-&gt;xxxatr = TA_TPRI</literal>)
+are rejected with E_RSATR. Additional undefined bits in
+the attributes fields must be zero. </PARA>
+<PARA>In general, extended information (pk_cxxx-&gt;exinf)
+is ignored. </PARA>
+<PARA>For semaphores, the initial semaphore count (pk_csem-&gt;isemcnt)
+is supported; the new semaphore's count is set. The maximum
+count is not supported, and is not in fact defined in type pk_csem. </PARA>
+<PARA>For flags, multiple tasks are allowed to wait. Because single
+task waiting is a subset of this, the W bit (TA_WMUL) of
+the flag attributes is ignored; all other bits must be zero. The
+initial flag value is supported. </PARA>
+<PARA>For mailboxes, the buffer count is defined statically by kernel
+configuration option 
+<LITERAL>CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE</LITERAL>;
+therefore the buffer count field is not supported and is not in
+fact defined in type pk_cmbx. Queueing of messages is FIFO
+ordered only, so TA_MPRI (in pk_cmbx-&gt;mbxatr)
+is not supported. </PARA>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>The following conditions are only checked for, and only return
+errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>invalid object id; less than 1 or greater than 
+<LITERAL>CYGNUM_UITRON_TASKS/SEMAS/MBOXES</LITERAL>
+as appropriate returns E_ID</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>dispatching is enabled in any call which can sleep, or
+E_CTX</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>tmout must be positive, otherwise E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>pk_cxxx pointers in 
+<FUNCTION>cre_xxx()</FUNCTION>
+ must be valid pointers, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in 
+<FUNCTION>ref_xxx()</FUNCTION>
+ is valid pointer, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>flag wait pattern must be non-zero, and mode must be valid,
+or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in flag wait calls is a valid pointer,
+or E_PAR</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+<PARA>The following conditions are checked for, and can return error
+codes, regardless of the setting of
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>When create and delete functions 
+<FUNCTION>cre_xxx()</FUNCTION>
+ and 
+<FUNCTION>del_xxx()</FUNCTION>
+ are supported, all calls which use a valid object ID number check
+that the object exists. If not, E_NOEXS is returned.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In create functions 
+<FUNCTION>cre_xxx()</FUNCTION>
+, when supported, if the object already exists, then E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In any call which can sleep, such as 
+<FUNCTION>twai_sem()</FUNCTION>
+: return codes E_TMOUT, E_RLWAI, E_DLT
+or of course E_OK are returned depending on the reason
+for terminating the sleep</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In polling functions such as 
+<FUNCTION>preq_sem()</FUNCTION>
+return codes E_TMOUT or E_OK are returned depending
+on the state of the synchronization object</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In creation functions, the attributes must be compatible
+with the selected underlying kernel configuration: in 
+<FUNCTION>cre_sem()</FUNCTION>
+ <literal>pk_csem-&gt;sematr</literal>
+ must be equal to 
+<literal>TA_TFIFO</literal>
+ else E_RSATR.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In 
+<FUNCTION>cre_flg()</FUNCTION>
+ <literal>pk_cflg-&gt;flgatr</literal>
+ must be either 
+<varname>TA_WMUL</varname>
+ or 
+<varname>TA_WSGL</varname>
+ else <varname>E_RSATR</varname>.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In 
+<FUNCTION>cre_mbx()</FUNCTION>
+ 
+<LITERAL>pk_cmbx-&gt;mbxatr</LITERAL>
+ must be 
+<LITERAL>TA_TFIFO &plus; TA_MFIFO</LITERAL>
+ else E_RSATR.</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-extended-sync-comm-functions">
+<TITLE><!-- <index></index> -->Extended Synchronization and Communication Functions</TITLE>
+<PARA>None of these functions are supported in this release. </PARA>
+</SECT1>
+<SECT1 id="compat-uitron-interrupt-management-functions">
+<TITLE><!-- <index></index> -->Interrupt management functions</TITLE>
+<PARA>These functions are fully supported in this release:</PARA>
+<PROGRAMLISTING>void	<FUNCTION> ret_int</FUNCTION>( void )
+</programlisting>
+<programlisting>
+ER <FUNCTION>loc_cpu</FUNCTION>( void )
+</programlisting>
+<programlisting>
+ER <FUNCTION>unl_cpu</FUNCTION>( void )
+</programlisting>
+<programlisting>
+ER <FUNCTION>dis_int</FUNCTION>( 
+    UINT <EMPHASIS>eintno</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ena_int</FUNCTION>( 
+    UINT <EMPHASIS>eintno</EMPHASIS> )
+</programlisting>
+<programlisting>
+void	<FUNCTION>ret_wup</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>iwup_tsk</FUNCTION>( 
+    ID <EMPHASIS>tskid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>isig_sem</FUNCTION>( 
+    ID <EMPHASIS>semid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>iset_flg</FUNCTION>( 
+    ID <EMPHASIS>flgid ,</EMPHASIS>
+    UID<EMPHASIS> setptn</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>isend_msg</FUNCTION>( 
+    ID <EMPHASIS>mbxid ,</EMPHASIS>
+    T_MSG<EMPHASIS> *pk_msg</EMPHASIS> )</PROGRAMLISTING>
+<PARA>Note that <FUNCTION>ret_int()</FUNCTION> and
+the <FUNCTION>ret_wup()</FUNCTION> are  implemented
+as macros, containing a &ldquo;return&rdquo; statement.</PARA>
+<PARA>Also note that <FUNCTION>ret_wup()</FUNCTION> and
+the <FUNCTION>ixxx_yyy()</FUNCTION> style functions
+will only work when called from an ISR whose associated DSR is <FUNCTION>cyg_uitron_dsr()</FUNCTION>,
+as specified in include file <filename>&lt;cyg/compat/uitron/uit_ifnc.h&gt;</filename>,
+which defines the <FUNCTION>ixxx_yyy()</FUNCTION> style
+functions also.</PARA>
+<PARA>If you are writing interrupt handlers more in the
+<EMPHASIS>eCos</EMPHASIS> style, with separate ISR and DSR routines both of
+your own devising, do not use these special functions from a DSR: use plain
+<FUNCTION>xxx_yyy()</FUNCTION> style functions (with no &lsquo;i&rsquo; prefix)
+instead, and do not call any &micro;ITRON functions from the ISR at
+all.</PARA>
+<PARA>The following functions are not supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>def_int</FUNCTION>( 
+    UINT <EMPHASIS>dintno,</EMPHASIS>
+  T_DINT *<EMPHASIS>pk_dint</EMPHASIS> )</programlisting>
+	<programlisting>
+ER <FUNCTION>chg_iXX</FUNCTION>( 
+    UINT <EMPHASIS>iXXXX</EMPHASIS> )
+  </programlisting>
+	<programlisting>
+ER <FUNCTION>ref_iXX</FUNCTION>( 
+    UINT * <EMPHASIS>p_iXXXX</EMPHASIS> )</PROGRAMLISTING>
+<PARA>These unsupported functions are all Level C (CPU dependent).
+Equivalent functionality is available via other <EMPHASIS>eCos</EMPHASIS>-specific
+APIs. </PARA>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>The following conditions are only checked for, and only return
+errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA><FUNCTION>loc/unl_cpu()</FUNCTION>
+: these must only be called in a 
+&micro;ITRON task context, else E_CTX.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA><FUNCTION>dis/ena_int()</FUNCTION>
+: the interrupt number must be in range as specified by the platform
+HAL in qustion, else E_PAR.</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-memory-pool-mgmt-functions">
+<TITLE><!-- <index></index> -->	  Memory pool Management Functions</TITLE>
+<PARA>These functions are fully supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>get_blf</FUNCTION>( 
+    VP *<EMPHASIS>p_blf,</EMPHASIS>    ID <EMPHASIS>mpfid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>pget_blf</FUNCTION>( 
+    VP *<EMPHASIS>p_blf,</EMPHASIS>    ID <EMPHASIS>mpfid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>tget_blf</FUNCTION>( 
+    VP *<EMPHASIS>p_blf,</EMPHASIS>    ID <EMPHASIS>mpfid,</EMPHASIS>    TMO <EMPHASIS>tmout</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>rel_blf</FUNCTION>( 
+    ID <EMPHASIS>mpfid,</EMPHASIS>    VP <EMPHASIS>blf</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_mpf</FUNCTION>( 
+    T_RMPF *<EMPHASIS>pk_rmpf,</EMPHASIS>    ID <EMPHASIS>mpfid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>get_blk</FUNCTION>( 
+    VP *<EMPHASIS>p_blk,</EMPHASIS>    ID <EMPHASIS>mplid,</EMPHASIS>    INT <EMPHASIS>blksz</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>pget_blk</FUNCTION>( 
+    VP *<EMPHASIS>p_blk,</EMPHASIS>    ID <EMPHASIS>mplid,</EMPHASIS>    INT <EMPHASIS>blksz</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>tget_blk</FUNCTION>( 
+    VP *<EMPHASIS>p_blk,</EMPHASIS>    ID <EMPHASIS>mplid,</EMPHASIS>    INT <EMPHASIS>blksz,</EMPHASIS>    TMO <EMPHASIS>tmout</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>rel_blk</FUNCTION>( 
+    ID <EMPHASIS>mplid,</EMPHASIS>    VP <EMPHASIS>blk</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_mpl</FUNCTION>( 
+    T_RMPL *<EMPHASIS>pk_rmpl,</EMPHASIS>    ID <EMPHASIS>mplid )
+</EMPHASIS></programlisting>
+
+<PARA>Note that of the memory provided for a particular pool to
+manage in the static initialization of the memory pool objects,
+some memory will be used to manage the pool itself. Therefore the
+number of blocks * the blocksize will be less than the total
+memory size. </PARA>
+<PARA>The following functions are supported in this release, when
+enabled with 
+<LITERAL>CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE</LITERAL>
+or 
+<LITERAL>CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE</LITERAL>
+as appropriate, with some restrictions: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>cre_mpl</FUNCTION>( 
+    ID <EMPHASIS>mplid,</EMPHASIS>    T_CMPL *<EMPHASIS>pk_cmpl</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>del_mpl</FUNCTION>( 
+    ID <EMPHASIS>mplid</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>cre_mpf</FUNCTION>( 
+    ID <EMPHASIS>mpfid,</EMPHASIS>    T_CMPF *<EMPHASIS>pk_cmpf</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>del_mpf</FUNCTION>( 
+    ID <EMPHASIS>mpfid</EMPHASIS> )</PROGRAMLISTING>
+<PARA>Because of the static initialization facilities provided for
+system objects, a memory pool is allocated a region of memory to
+manage statically in the configuration. So while memory pools can
+be created and deleted, the same area of memory is used for that
+memory pool (memory pool ID number) each time. The requested variable pool
+size (pk_cmpl-&gt;mplsz) or the number of fixed-size
+blocks (pk_cmpf-&gt;mpfcnt) times the block size
+(pk_cmpf-&gt;blfsz) are checked for fitting within
+the statically allocated memory area, so if a create call succeeds,
+the resulting pool will be at least as large as that requested.
+For this reason <FUNCTION>del_mpl()</FUNCTION> and <FUNCTION>del_mpf()</FUNCTION> do
+not in any sense free the memory that was managed by the deleted
+pool for use by other pools; it may only be managed by a pool of
+the same object id. </PARA>
+<PARA>For both fixed and variable memory pools, the queueing order
+when waiting on a synchronization object depends on the underlying
+kernel configuration. The multi-level queue scheduler is required
+for strict &micro;ITRON conformance and
+it queues tasks in FIFO order, so requests to create an object with
+priority queueing of tasks (pk_cxxx-&gt;xxxatr = TA_TPRI)
+are rejected with E_RSATR. Additional undefined bits in
+the attributes fields must be zero. </PARA>
+<PARA>In general, extended information (pk_cxxx-&gt;exinf)
+is ignored. </PARA>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>The following conditions are only checked for, and only return
+errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>invalid object id; less than 1 or greater than 
+<LITERAL>CYGNUM_UITRON_MEMPOOLVAR/MEMPOOLFIXED</LITERAL>
+as appropriate returns E_ID</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>dispatching is enabled in any call which can sleep, or
+E_CTX</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>tmout must be positive, otherwise E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>pk_cxxx pointers in 
+<FUNCTION>cre_xxx()</FUNCTION>
+ must be valid pointers, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in 
+<FUNCTION>ref_xxx()</FUNCTION>
+ is a valid pointer, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointers in get block routines is a valid
+pointer, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>blocksize request in get variable block routines is greater
+than zero, or E_PAR</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+<PARA>The following conditions are checked for, and can return error
+codes, regardless of the setting of 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>:
+</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>When create and delete functions 
+<FUNCTION>cre_xxx()</FUNCTION>
+ and 
+<FUNCTION>del_xxx()</FUNCTION>
+ are supported, all calls which use a valid object ID number check
+that the object exists. If not, E_NOEXS is returned.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>When create functions 
+<FUNCTION>cre_xxx()</FUNCTION>
+ are supported, if the object already exists, then E_OBJ</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In any call which can sleep, such as 
+<FUNCTION>get_blk()</FUNCTION>
+: return codes E_TMOUT, E_RLWAI, E_DLT
+or of course E_OK are returned depending on the reason
+for terminating the sleep</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In polling functions such as 
+<FUNCTION>pget_blk()</FUNCTION>
+return codes E_TMOUT or E_OK are returned depending
+on the state of the synchronization object</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In creation functions, the attributes must be compatible
+with the selected underlying kernel configuration: in 
+<FUNCTION>cre_mpl()</FUNCTION>
+ 
+<LITERAL>pk_cmpl-&gt;mplatr</LITERAL>
+ must be equal to 
+<LITERAL>TA_TFIFO</LITERAL>
+ else E_RSATR.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In 
+<FUNCTION>cre_mpf()</FUNCTION>
+ 
+<LITERAL>pk_cmpf-&gt;mpfatr</LITERAL>
+ must be equal to 
+<LITERAL>TA_TFIFO</LITERAL>
+ else E_RSATR.</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In creation functions, the requested size of the memory
+pool must not be larger than that statically configured for the
+pool else E_RSATR; see the configuration option
+&ldquo;Option: Static initializers&rdquo;.
+ In 
+<FUNCTION>cre_mpl()</FUNCTION>
+ 
+<LITERAL>pk_cmpl-&gt;mplsz</LITERAL>
+ is the field of interest</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In 
+<FUNCTION>cre_mpf()</FUNCTION>
+ the product of 
+<LITERAL>pk_cmpf-&gt;blfsz</LITERAL>
+ and 
+<LITERAL>pk_cmpf-&gt;mpfcnt</LITERAL>
+ must be smaller than the memory statically configured for the pool
+else E_RSATR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>In functions which return memory to the pool 
+<FUNCTION>rel_blk()</FUNCTION>
+ and 
+<FUNCTION>rel_blf()</FUNCTION>
+, if the free fails, for example because the memory did not come
+from that pool originally, then E_PAR is returned</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-time-mgmt-functions">
+<TITLE><!-- <index></index> -->Time Management Functions</TITLE>
+<PARA>These functions are fully supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>set_tim</FUNCTION>( 
+    SYSTIME *<EMPHASIS>pk_tim</EMPHASIS> )</PROGRAMLISTING>
+<CAUTION>
+<PARA>	    Setting the time may cause erroneous operation of the
+	    kernel, for example a task performing a wait with a
+	    time-out may never awaken.</PARA>
+</CAUTION>
+<PROGRAMLISTING>ER <FUNCTION>get_tim</FUNCTION>( 
+    SYSTIME *<EMPHASIS>pk_tim</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>dly_tsk</FUNCTION>( 
+    DLYTIME <EMPHASIS>dlytim</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>def_cyc</FUNCTION>( 
+    HNO <EMPHASIS>cycno,</EMPHASIS>    T_DCYC *<EMPHASIS>pk_dcyc</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>act_cyc</FUNCTION>( 
+    HNO <EMPHASIS>cycno,</EMPHASIS>    UINT <EMPHASIS>cycact</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_cyc</FUNCTION>( 
+    T_RCYC *<EMPHASIS>pk_rcyc,</EMPHASIS>    HNO <EMPHASIS>cycno</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>def_alm</FUNCTION>( 
+    HNO <EMPHASIS>almno,</EMPHASIS>    T_DALM *<EMPHASIS>pk_dalm</EMPHASIS> )
+</programlisting>
+<programlisting>
+ER <FUNCTION>ref_alm</FUNCTION>( 
+    T_RALM *<EMPHASIS>pk_ralm,</EMPHASIS>    HNO <EMPHASIS>almno</EMPHASIS> )
+</programlisting>
+<programlisting>
+void <FUNCTION>ret_tmr</FUNCTION>( void )</programlisting>
+	<sect2>
+	  <title>Error checking</title>
+<PARA>The following conditions are only checked for, and only return
+errors if 
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+is enabled:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>invalid handler number; less than 1 or greater than 
+<LITERAL>CYGNUM_UITRON_CYCLICS/ALARMS</LITERAL>
+as appropriate, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>dispatching is enabled in 
+<FUNCTION>dly_tsk()</FUNCTION>
+, or E_CTX</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>dlytim must be positive or zero, otherwise E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>return value pointer in 
+<FUNCTION>ref_xxx()</FUNCTION>
+ is a valid pointer, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>params within pk_dalm and pk_dcyc must
+be valid, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>cycact in 
+<FUNCTION>act_cyc()</FUNCTION>
+ must be valid, or E_PAR</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>handler must be defined in 
+<FUNCTION>ref_xxx()</FUNCTION>
+ and 
+<FUNCTION>act_cyc()</FUNCTION>
+, or E_NOEXS</PARA>
+</LISTITEM>
+<LISTITEM>
+<PARA>parameter pointer must be a good pointer in 
+<FUNCTION>get_tim()</FUNCTION>
+ and 
+<FUNCTION>set_tim()</FUNCTION>
+, otherwise E_PAR is returned</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+<PARA>The following conditions are checked for, and can return
+	  error codes, regardless of the setting of
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+:</PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA><FUNCTION>dly_tsk()</FUNCTION>
+: return code E_RLWAI is returned depending on the reason
+for terminating the sleep</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</sect2>
+</SECT1>
+<SECT1 id="compat-uitron-system-mgmt-functions">
+<TITLE><!-- <index></index> -->	  System Management Functions</TITLE>
+<PARA>These functions are fully supported in this release:
+	</PARA>
+<PROGRAMLISTING>ER <FUNCTION>get_ver</FUNCTION>( 
+    T_VER *<EMPHASIS>pk_ver</EMPHASIS> )
+</PROGRAMLISTING>
+<PROGRAMLISTING>ER <FUNCTION>ref_sys</FUNCTION>( 
+    T_RSYS *<EMPHASIS>pk_rsys</EMPHASIS> )
+</PROGRAMLISTING>
+<PROGRAMLISTING>ER <FUNCTION>ref_cfg</FUNCTION>( 
+    T_RCFG *<EMPHASIS>pk_rcfg</EMPHASIS> )
+</PROGRAMLISTING>
+<PARA>Note that the information returned by each of these calls
+may be configured to match the user's own versioning system,
+and the values supplied by the default configuration may be inappropriate. </PARA>
+<PARA>These functions are not supported in this release: </PARA>
+<PROGRAMLISTING>ER <FUNCTION>def_svc</FUNCTION>( 
+    FN <EMPHASIS>s_fncd,</EMPHASIS>
+    T_DSVC *<EMPHASIS>pk_dsvc</EMPHASIS> )
+</PROGRAMLISTING>
+<PROGRAMLISTING>ER <FUNCTION>def_exc</FUNCTION>( 
+    UINT <EMPHASIS>exckind,</EMPHASIS>
+    T_DEXC *<EMPHASIS>pk_dexc</EMPHASIS> )
+</PROGRAMLISTING>
+<SECT2>
+<TITLE>Error checking</TITLE>
+<PARA>The following conditions are only checked for, and
+	    only return errors if
+	    
+<LITERAL>CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS</LITERAL>
+ is enabled: </PARA>
+<ITEMIZEDLIST>
+<LISTITEM>
+<PARA>return value pointer in all calls is a valid
+	      pointer, or E_PAR</PARA>
+</LISTITEM>
+</ITEMIZEDLIST>
+</SECT2>
+</SECT1>
+<SECT1 id="compat-uitron-network-support-functions">
+<TITLE><!-- <index></index> -->	  Network Support Functions</TITLE>
+<PARA>None of these functions are supported in this release.
+	</PARA>
+</SECT1>
+<SECT1 id="compat-uitron-configuration-faq">
+<TITLE><!-- <index></index> -->&micro;ITRON Configuration FAQ</TITLE>
+<PARA><EMPHASIS>Q: How are &micro;ITRON objects created?</EMPHASIS>
+</PARA>
+<PARA>
+For each type of uITRON object (tasks, semaphores, flags, mboxes, mpf, mpl)
+these two quantities are controlled by configuration:
+</PARA>
+<ITEMIZEDLIST>
+<LISTITEM><PARA>
+The <EMPHASIS>maximum</EMPHASIS> number of this type of object.
+</PARA></LISTITEM>
+<LISTITEM><PARA>
+The number of these objects which exist <EMPHASIS>initially</EMPHASIS>.
+</PARA></LISTITEM>
+</ITEMIZEDLIST>
+<PARA>
+This is assuming that for the relevant object type,
+<EMPHASIS>create</EMPHASIS> and <EMPHASIS>delete</EMPHASIS>
+operations are enabled; enabled is the default.  For example, the option
+<LITERAL>CYGPKG_UITRON_MBOXES_CREATE_DELETE</LITERAL>
+controls whether the functions
+<FUNCTION>cre_mbx()</FUNCTION>
+and
+<FUNCTION>del_mbx()</FUNCTION>
+exist in the API.  If not, then the maximum number of
+mboxes is the same as the initial number of mboxes, and so on for all
+&micro;ITRON object types.
+</PARA>
+<PARA>
+Mboxes have no initialization, so there are only a few, simple
+configuration options:
+</PARA>
+<ITEMIZEDLIST>
+<LISTITEM><PARA>
+<LITERAL>CYGNUM_UITRON_MBOXES</LITERAL>
+is the total number of mboxes that you can have in the
+system.  By default this is 4, so you can use mboxes 1,2,3 and 4.  You
+cannot create mboxes outside this range; trying to
+<FUNCTION>cre_mbx(5,...)</FUNCTION>
+will return an error.
+</PARA></LISTITEM>
+<LISTITEM><PARA>
+<LITERAL>CYGNUM_UITRON_MBOXES_INITIALLY</LITERAL>
+is the number of mboxes created
+automatically for you, during startup.  By default this is 4, so all 4
+mboxes exist already, and an attempt to create one of these
+eg. <FUNCTION>cre_mbx(3,...)</FUNCTION>
+will return an error because the mbox in quesion already
+exists.  You can delete a pre-existing mbox, and then re-create it.
+</PARA></LISTITEM>
+</ITEMIZEDLIST>
+<PARA>
+If you change 
+<LITERAL>CYGNUM_UITRON_MBOXES_INITIALLY</LITERAL>,
+for example to 0, no mboxes
+are created automatically for you during startup.  Any attempt to use an
+mbox without creating it will return E_NOEXS because the mbox does not
+exist.  You can create an mbox, say <FUNCTION>cre_mbx(3,...)</FUNCTION>
+and then use it, say
+<FUNCTION>snd_msg(3,&amp;foo)</FUNCTION>, and all will be well.
+</PARA>
+<PARA><EMPHASIS>Q: How are &micro;ITRON objects initialized?</EMPHASIS>
+</PARA>
+<PARA>
+Some object types have optional initialization.  Semaphores are an
+example.  You could have 
+<LITERAL>CYGNUM_UITRON_SEMAS</LITERAL>=10 and
+<LITERAL>CYGNUM_UITRON_SEMAS_INITIALLY</LITERAL>=5
+which means you can use semaphores 1-5
+straight off, but you must create semaphores 6-10 before you can use them.
+If you decide not to initialize semaphores, semaphores 1-5 will have an
+initial count of zero.  If you decide to initialize them, you must supply
+a dummy initializer for semaphores 6-10 also.  For example,
+in terms of the configuration output in
+<filename>pkgconf/uitron.h</filename>:
+</PARA>
+<PROGRAMLISTING>
+   #define CYGDAT_UITRON_SEMA_INITIALIZERS \
+        CYG_UIT_SEMA(  1 ),     \
+        CYG_UIT_SEMA(  0 ),     \
+        CYG_UIT_SEMA(  0 ),     \
+        CYG_UIT_SEMA( 99 ),     \
+        CYG_UIT_SEMA(  1 ),     \
+        CYG_UIT_SEMA_NOEXS,     \
+        CYG_UIT_SEMA_NOEXS,     \
+        CYG_UIT_SEMA_NOEXS,     \
+        CYG_UIT_SEMA_NOEXS,     \
+        CYG_UIT_SEMA_NOEXS
+</PROGRAMLISTING>
+<PARA>
+Semaphore 1 will have initial count 1, semaphores 2 and 3 will be zero,
+number 4 will be 99 initially, 5 will be one and numbers 6 though 10 do not
+exist initially.
+</PARA>
+<PARA>
+Aside: this is how the definition of the symbol would appear in the
+configuration header file <filename>pkgconf/uitron.h</filename> &mdash;
+unfortunately editing such a long, multi-line definition is somewhat
+cumbersome in the GUI config tool in current releases.  The macros
+<LITERAL>CYG_UIT_SEMA()</LITERAL>
+&mdash; to create a semaphore initializer &mdash; and
+<LITERAL>CYG_UIT_SEMA_NOEXS</LITERAL>
+&mdash; to invoke a dummy initializer &mdash;
+are provided in in the environment to help with this.  Similar macros are
+provided for other object types.  The resulting #define symbol is used in
+the context of a C++ array initializer, such as:
+<PROGRAMLISTING>
+Cyg_Counting_Semaphore2 cyg_uitron_SEMAS[ CYGNUM_UITRON_SEMAS ] = {
+	CYGDAT_UITRON_SEMA_INITIALIZERS
+};
+</PROGRAMLISTING>
+which is eventually macro-processed to give
+<PROGRAMLISTING>
+Cyg_Counting_Semaphore2 cyg_uitron_SEMAS[ 10 ] = {
+	Cyg_Counting_Semaphore2( ( 1 ) ), 
+	Cyg_Counting_Semaphore2( ( 0 ) ), 
+	Cyg_Counting_Semaphore2( ( 0 ) ), 
+	Cyg_Counting_Semaphore2( ( 99 ) ), 
+	Cyg_Counting_Semaphore2( ( 1 ) ), 
+	Cyg_Counting_Semaphore2(0), 
+	Cyg_Counting_Semaphore2(0), 
+	Cyg_Counting_Semaphore2(0), 
+	Cyg_Counting_Semaphore2(0), 
+	Cyg_Counting_Semaphore2(0), 
+};
+</PROGRAMLISTING>
+so you can see how it is necessary to include the dummy entries in that
+definition, otherwise the resulting code will not compile correctly.
+</PARA>
+<PARA>
+If you choose 
+<LITERAL>CYGNUM_UITRON_SEMAS_INITIALLY</LITERAL>=0
+it is meaningless to initialize them, for they must be created and so
+initialized then, before use.
+</PARA>
+<PARA><EMPHASIS>Q: What about &micro;ITRON tasks?</EMPHASIS>
+</PARA>
+<PARA>
+Some object types require initialization.  Tasks are an example of this.
+You must provide a task with a priority, a function to enter when the task
+starts, a name (for debugging purposes), and some memory to use for the stack.
+For example (again in terms of the resulting
+definitions in <filename>pkgconf/uitron.h</filename>):
+</PARA>
+<PROGRAMLISTING>
+#define CYGNUM_UITRON_TASKS 4           // valid task ids are 1,2,3,4
+#define CYGNUM_UITRON_TASKS_INITIALLY 4 // they all exist at start
+
+#define CYGDAT_UITRON_TASK_EXTERNS          	\
+extern "C" void startup( unsigned int );    	\
+extern "C" void worktask( unsigned int );   	\
+extern "C" void lowtask( unsigned int );        \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack4[ CYGNUM_UITRON_STACK_SIZE ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK("main task", 8, startup,  &amp;stack1, sizeof( stack1 )), \
+ CYG_UIT_TASK("worker 2" , 9, worktask, &amp;stack2, sizeof( stack2 )), \
+ CYG_UIT_TASK("worker 3" , 9, worktask, &amp;stack3, sizeof( stack3 )), \
+ CYG_UIT_TASK("low task" ,20, lowtask,  &amp;stack4, sizeof( stack4 )), \
+
+</PROGRAMLISTING>
+<PARA>
+So this example has all four tasks statically configured to exist, ready to
+run, from the start of time.  The &ldquo;main task&rdquo; runs a routine
+called <FUNCTION>startup()</FUNCTION> at priority 8.  Two
+&ldquo;worker&rdquo; tasks run both a priority 9, and a &ldquo;low
+priority&rdquo; task runs at priority 20 to do useful non-urgent background
+work.
+</PARA>
+<screen>
+Task ID | Exists at | Function | Priority | Stack   | Stack
+ number |  startup  |  entry   |          | address | size
+--------+-----------+----------+----------+---------+----------
+   1    |    Yes    |  startup |    8     | &amp;stack1 | CYGNUM...
+   2    |    Yes    | worktask |    9 	  | &amp;stack2 | CYGNUM...
+   3    |    Yes    | worktask |    9 	  | &amp;stack3 | CYGNUM...
+   4    |    Yes    |  lowtask |   20 	  | &amp;stack4 | CYGNUM...
+--------+-----------+----------+----------+---------+----------
+</screen>
+<PARA><EMPHASIS>Q: How can I create &micro;ITRON tasks in the program?</EMPHASIS>
+</PARA>
+<PARA>
+You must provide free slots in the task table in which to create new tasks,
+by configuring the number of tasks existing initially to be smaller than
+the total.
+For a task ID which does not initially exist, it will be told what routine
+to call, and what priority it is, when the task is created.  But you must
+still set aside memory for the task to use for its stack, and give it a
+name during initialization.  For example:
+</PARA>
+
+<PROGRAMLISTING>
+#define CYGNUM_UITRON_TASKS 4           // valid task ids are 1-4
+#define CYGNUM_UITRON_TASKS_INITIALLY 1 // only task #1 exists
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void startup( unsigned int ); \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack4[ CYGNUM_UITRON_STACK_SIZE ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+   CYG_UIT_TASK( "main", 8, startup, &amp;stack1, sizeof( stack1 ) ), \
+   CYG_UIT_TASK_NOEXS( "slave",      &amp;stack2, sizeof( stack2 ) ), \
+   CYG_UIT_TASK_NOEXS( "slave2",     &amp;stack3, sizeof( stack3 ) ), \
+   CYG_UIT_TASK_NOEXS( "slave3",     &amp;stack4, sizeof( stack4 ) ), \
+
+</PROGRAMLISTING>
+<PARA>
+So tasks numbered 2,3 and 4 have been given their stacks during startup,
+though they do not yet exist in terms of <FUNCTION>cre_tsk()</FUNCTION> and
+<FUNCTION>del_tsk()</FUNCTION> so you can create tasks 2&ndash;4 at
+runtime.
+</PARA>
+<screen>
+Task ID | Exists at | Function | Priority | Stack   | Stack
+ number |  startup  |  entry   |          | address | size
+--------+-----------+----------+----------+---------+----------
+   1    |    Yes    |  startup |    8     | &amp;stack1 | CYGNUM...
+   2    |    No     |   N/A    |   N/A    | &amp;stack2 | CYGNUM...
+   3    |    No     |   N/A    |   N/A    | &amp;stack3 | CYGNUM...
+   4    |    No     |   N/A    |   N/A    | &amp;stack4 | CYGNUM...
+--------+-----------+----------+----------+---------+----------
+</screen>
+<PARA>
+(you must have at least one task at startup in order that the system can
+ actually run; this is not so for other uITRON object types)
+</PARA>
+<PARA><EMPHASIS>Q: Can I have different stack sizes for &micro;ITRON tasks?</EMPHASIS>
+</PARA>
+<PARA>
+Simply set aside different amounts of memory for each task to use for its
+stack.  Going back to a typical default setting for the &micro;ITRON tasks,
+the definitions in <filename>pkgconf/uitron.h</filename> might look like this:
+</PARA>
+<PROGRAMLISTING>
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+            stack4[ CYGNUM_UITRON_STACK_SIZE ];
+  
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+  CYG_UIT_TASK( "t1", 1, task1, &amp;stack1, CYGNUM_UITRON_STACK_SIZE ), \
+  CYG_UIT_TASK( "t2", 2, task2, &amp;stack2, CYGNUM_UITRON_STACK_SIZE ), \
+  CYG_UIT_TASK( "t3", 3, task3, &amp;stack3, CYGNUM_UITRON_STACK_SIZE ), \
+  CYG_UIT_TASK( "t4", 4, task4, &amp;stack4, CYGNUM_UITRON_STACK_SIZE )
+
+</PROGRAMLISTING>
+<PARA>
+Note that 
+<LITERAL>CYGNUM_UITRON_STACK_SIZE</LITERAL>
+is used to control the size of the stack
+objects themselves, and to tell the system what size stack is being provided.
+</PARA>
+<PARA>
+Suppose instead stack sizes of 2000, 1000, 800 and 800 were required:
+this could be achieved by using the GUI config tool to edit these
+options, or editting the <filename>.ecc</filename> file to get these
+results in <filename>pkgconf/uitron.h</filename>:
+</PARA>
+<PROGRAMLISTING>
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ 2000 ], \
+            stack2[ 1000 ], \
+            stack3[  800 ], \
+            stack4[  800 ];
+ 
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+      CYG_UIT_TASK( "t1", 1, task1, &amp;stack1, sizeof( stack1 ) ), \
+      CYG_UIT_TASK( "t2", 2, task2, &amp;stack2, sizeof( stack2 ) ), \
+      CYG_UIT_TASK( "t3", 3, task3, &amp;stack3, sizeof( stack3 ) ), \
+      CYG_UIT_TASK( "t4", 4, task4, &amp;stack4, sizeof( stack4 ) )
+</PROGRAMLISTING>
+<PARA>
+Note that the sizeof() operator has been used to tell the system what size
+stacks are provided, rather than quoting a number (which is difficult for
+maintenance) or the symbol 
+<LITERAL>CYGNUM_UITRON_STACK_SIZE</LITERAL>
+(which is wrong).
+</PARA>
+<PARA>
+We recommend using (if available in your release) the stacksize symbols
+provided in the architectural HAL for your target, called
+<LITERAL>CYGNUM_HAL_STACK_SIZE_TYPICAL</LITERAL>
+and 
+<LITERAL>CYGNUM_HAL_STACK_SIZE_MINIMUM</LITERAL>.
+So a better (more portable) version of the above might be:
+</PARA>
+<PROGRAMLISTING>
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ CYGNUM_HAL_STACK_SIZE_TYPICAL + 1200 ], \
+            stack2[ CYGNUM_HAL_STACK_SIZE_TYPICAL +  200 ], \
+            stack3[ CYGNUM_HAL_STACK_SIZE_TYPICAL        ], \
+            stack4[ CYGNUM_HAL_STACK_SIZE_TYPICAL        ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+      CYG_UIT_TASK( "t1", 1, task1, &amp;stack1, sizeof( stack1 ) ), \
+      CYG_UIT_TASK( "t2", 2, task2, &amp;stack2, sizeof( stack2 ) ), \
+      CYG_UIT_TASK( "t3", 3, task3, &amp;stack3, sizeof( stack3 ) ), \
+      CYG_UIT_TASK( "t4", 4, task4, &amp;stack4, sizeof( stack4 ) )
+</PROGRAMLISTING>
+</SECT1>
+</CHAPTER>
+</part>
--- a/packages/devs/eth/arm/ks32c5000/current/ChangeLog
+++ b/packages/devs/eth/arm/ks32c5000/current/ChangeLog
@@ -1,3 +1,9 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/ks5000_ether.c (ks32c5000_eth_send): Conditionalize on
+	CYGPKG_KERNEL for presence of thread delay function.
+	(ks32c5000_eth_init): No need conditionalizing unmask on CYGPKG_NET.
+
 //===========================================================================
 //####ECOSGPLCOPYRIGHTBEGIN####
 // -------------------------------------------
--- a/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c
+++ b/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c
@@ -1113,12 +1113,10 @@ static bool ks32c5000_eth_init(struct cy
 #endif  
   installInterrupts();
   EthInit(myMacAddr);
-#if defined(CYGPKG_NET)  
   cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherBDMARx);
   cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherBDMATx);
   cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherMacRx);
   cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherMacTx);
-#endif  
   configDone = 1;
   ethernetRunning = 1;
   eth_drv_init(sc, myMacAddr);
@@ -1252,7 +1250,7 @@ static void ks32c5000_eth_send(struct et
   
   while(!ks32c5000_eth_buffer_send(buf))
     {
-#if defined(CYGPKG_NET)
+#if defined(CYGPKG_KERNEL)
       // wait a tick and try again.
       cyg_thread_delay(1);
 #else
--- a/packages/devs/eth/cf/current/ChangeLog
+++ b/packages/devs/eth/cf/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/if_sc_lpe.c: Conditionalize use of thread on CYGPKG_KERNEL
+	not CYGPKG_NET.
+
 2002-04-12  Gary Thomas  <gthomas@redhat.com>
 
 	* src/if_sc_lpe.c: Clean up warnings.
--- a/packages/devs/eth/cf/current/src/if_sc_lpe.c
+++ b/packages/devs/eth/cf/current/src/if_sc_lpe.c
@@ -85,12 +85,12 @@
 
 
 
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
 #define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
 static char sc_lpe_card_handler_stack[STACK_SIZE];
 static cyg_thread sc_lpe_card_handler_thread_data;
 static cyg_handle_t sc_lpe_card_handler_thread_handle;
-#endif  // CYGPKG_NET
+#endif  // CYGPKG_KERNEL
 
 static void
 do_delay(int ticks)
@@ -107,7 +107,7 @@ do_delay(int ticks)
 // and deletions need to be handled and they take time/coordination, thus the
 // separate thread.
 //
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
 static void
 #else
 static int
@@ -123,7 +123,7 @@ sc_lpe_card_handler(cyg_addrword_t param
     unsigned char buf[256], *cp;
     cyg_uint8* base;
     unsigned char *vers_product, *vers_manuf, *vers_revision, *vers_date;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
     int tries = 0;
 #endif
     bool first = true;
@@ -141,7 +141,7 @@ sc_lpe_card_handler(cyg_addrword_t param
             }
             if (slot->state != CF_SLOT_STATE_Ready) {
                 diag_printf("CF card won't go ready!\n");
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
                 return false;
 #else
                 continue;
@@ -166,7 +166,7 @@ sc_lpe_card_handler(cyg_addrword_t param
                 vers_revision = cp;
                 while (*cp++) ;  // Skip to nul
                 vers_date = cp;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
                 if (tries != 0) diag_printf("\n");
                 diag_printf("%s: %s %s %s\n", vers_manuf, vers_product, vers_revision, vers_date);
 #endif
@@ -249,7 +249,7 @@ sc_lpe_card_handler(cyg_addrword_t param
                     (sc->funs->eth_drv->init)(sc, dp->esa);
                     // Tell system card is ready to talk
                     dp->tab->status = CYG_NETDEVTAB_STATUS_AVAIL;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
                     cyg_drv_dsr_unlock();
                     return true;
 #endif
@@ -266,7 +266,7 @@ sc_lpe_card_handler(cyg_addrword_t param
         } else {
             cyg_drv_dsr_unlock();
             do_delay(50);  // FIXME!
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
             if (tries == 0) diag_printf("... Waiting for network card: ");
             diag_printf(".");
             if (++tries == 10) {
@@ -291,7 +291,7 @@ cyg_sc_lpe_init(struct cyg_netdevtab_ent
     slot = dp->plf_priv = (void*)cf_get_slot(0);
     dp->tab = tab;
 
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
     // Create card handling [background] thread
     cyg_thread_create(CYGPKG_NET_THREAD_PRIORITY-1,          // Priority
                       sc_lpe_card_handler,                   // entry
--- a/packages/devs/eth/cl/cs8900a/current/ChangeLog
+++ b/packages/devs/eth/cl/cs8900a/current/ChangeLog
@@ -1,3 +1,9 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* include/cs8900.h: Check for lost ints if we can - when kernel present.
+	* src/if_cs8900a.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+	appropriate.
+
 2002-03-20  Gary Thomas  <gthomas@redhat.com>
 2002-03-06  Pieter Truter <ptruter@intrinsyc.com>
 
--- a/packages/devs/eth/cl/cs8900a/current/include/cs8900.h
+++ b/packages/devs/eth/cl/cs8900a/current/include/cs8900.h
@@ -118,7 +118,7 @@ typedef struct cs8900a_priv_data {
     cyg_addrword_t base;
     cyg_uint32 txkey;   // Used to ack when packet sent
     struct cyg_netdevtab_entry *tab;
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
     cyg_tick_count_t txstart;
 #endif
 } cs8900a_priv_data_t;
--- a/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
+++ b/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
@@ -67,8 +67,7 @@
 //==========================================================================
 
 #include <pkgconf/system.h>
-#ifdef CYGPKG_NET
-#include <pkgconf/net.h>
+#ifdef CYGPKG_KERNEL
 #include <cyg/kernel/kapi.h>
 #endif
 #include <pkgconf/io_eth_drivers.h>
@@ -89,7 +88,7 @@
 #undef __WANT_DEVS
 
 // NOINTS operation only relevant when the NET package is loaded
-#ifndef CYGPKG_NET
+#if !defined(CYGPKG_NET) || !defined(CYGPKG_KERNEL)
 # undef CYGSEM_DEVS_ETH_CL_CS8900A_NOINTS
 #endif
 
@@ -106,7 +105,7 @@ extern int cyg_io_eth_net_debug;
 #endif
 
 static void cs8900a_poll(struct eth_drv_sc *sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 // This ISR is called when the ethernet interrupt occurs
 static int
 cs8900a_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs)
@@ -123,7 +122,7 @@ cs8900a_dsr(cyg_vector_t vector, cyg_uco
     // This conditioning out is necessary because of explicit calls to this
     // DSR - which would not ever be called in the case of a polled mode
     // usage ie. in RedBoot.
-#ifdef CYGPKG_IO_ETH_DRIVERS_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     cs8900a_priv_data_t* cpd = (cs8900a_priv_data_t *)data;
     struct cyg_netdevtab_entry *ndp = (struct cyg_netdevtab_entry *)(cpd->tab);
     struct eth_drv_sc *sc = (struct eth_drv_sc *)(ndp->device_instance);
@@ -145,7 +144,7 @@ static void
 cs8900a_deliver(struct eth_drv_sc *sc)
 {
     cs8900a_poll(sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     {
         cs8900a_priv_data_t *cpd = (cs8900a_priv_data_t *)sc->driver_private;
         // Allow interrupts to happen again
@@ -176,7 +175,7 @@ cs8900a_init(struct cyg_netdevtab_entry 
 
     CYGHWR_CL_CS8900A_PLF_INIT(cpd);
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     // Initialize environment, setup interrupt handler
     cyg_drv_interrupt_create(cpd->interrupt,
                              0, // Priority - what goes here?
@@ -381,7 +380,7 @@ cs8900a_can_send(struct eth_drv_sc *sc)
     if ((stat & PP_LineStat_LinkOK) == 0) {
         return false;  // Link not connected
     }
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
     // Horrible hack!
     if (cpd->txbusy) {
         cyg_tick_count_t now = cyg_current_time();
@@ -416,7 +415,7 @@ cs8900a_send(struct eth_drv_sc *sc, stru
     // Mark xmitter busy
     cpd->txbusy = true;
     cpd->txkey = key;
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
     cpd->txstart = cyg_current_time();
 #endif
     // Start the xmit sequence
--- a/packages/devs/eth/frv/frv400/current/ChangeLog
+++ b/packages/devs/eth/frv/frv400/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* include/devs_eth_frv400.inl: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
+	instead of CYGPKG_NET where required.
+
 2002-03-28  Gary Thomas  <gthomas@redhat.com>
 
 	* cdl/frv400_eth_drivers.cdl: Don't define CYGHWR_NET_DRIVERS as this
--- a/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl
+++ b/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl
@@ -172,7 +172,7 @@ static void
 
 #define CYGHWR_NS_DP83902A_PLF_INIT(dp) _frv400_eth_init(dp)
 
-#ifndef CYGPKG_NET
+#ifndef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 static void
 _frv400_eth_int_clear(dp83902a_priv_data_t *dp)
 {
--- a/packages/devs/eth/h8300/aki3068net/current/ChangeLog
+++ b/packages/devs/eth/h8300/aki3068net/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-28  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/if_aki3068net.c: Remove unused includes.
+
 2002-04-24  Yoshinori Sato  <qzb04471@nifty.ne.jp>
 
 	* New package.
--- a/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c
+++ b/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c
@@ -69,12 +69,6 @@
 #include <cyg/io/eth/eth_drv.h>
 #include <cyg/io/eth/netdev.h>
 
-#ifdef CYGPKG_NET
-#include <pkgconf/net.h>
-#else
-#include <cyg/hal/hal_if.h>
-#endif
-
 #define DP_CARD_RESET 0x1f
 
 #include <cyg/io/dp83902a.h>
--- a/packages/devs/eth/ns/dp83902a/current/ChangeLog
+++ b/packages/devs/eth/ns/dp83902a/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/if_dp83902a.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED instead
+	of CYGPKG_NET where required.
+
 2002-04-12  Gary Thomas  <gthomas@redhat.com>
 
 	* src/if_dp83902a.c: Clean up warnings.
--- a/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c
+++ b/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c
@@ -71,13 +71,7 @@
 #include <cyg/hal/drv_api.h>
 #include <cyg/io/eth/eth_drv.h>
 #include <cyg/io/eth/netdev.h>
-
-#ifdef CYGPKG_NET
-#include <pkgconf/net.h>
 #include <pkgconf/io_eth_drivers.h>
-#else
-#include <cyg/hal/hal_if.h>
-#endif
 
 #include <cyg/io/dp83902a.h>
 
@@ -85,7 +79,7 @@
 #include CYGDAT_DEVS_ETH_NS_DP83902A_INL
 #undef __WANT_DEVS
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 // This ISR is called when the ethernet interrupt occurs
 static cyg_uint32
 dp83902a_isr(cyg_vector_t vector, cyg_addrword_t data)
@@ -121,7 +115,7 @@ dp83902a_dsr(cyg_vector_t vector, cyg_uc
 # endif
 #endif
 }
-#endif // CYGPKG_NET
+#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 
 // The deliver function (ex-DSR)  handles the ethernet [logical] processing
 static void
@@ -180,7 +174,7 @@ dp83902a_init(struct cyg_netdevtab_entry
                 dp->esa[4],
                 dp->esa[5] );
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     cyg_drv_interrupt_create(
         dp->interrupt,
         0,                  // Priority - unused
--- a/packages/devs/eth/powerpc/fec/current/ChangeLog
+++ b/packages/devs/eth/powerpc/fec/current/ChangeLog
@@ -1,3 +1,15 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/if_fec.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+        appropriate.
+
+2002-05-30  Jesper Skov  <jskov@redhat.com>
+
+	* src/if_fec.c: Initialized a variable and removed an unused
+	variable. Also made one volatile. All to remove warnings.
+	* src/fec.h: Made more pointers volatile to avoid compiler
+	warnings.
+
 2002-04-30  Nick Garnett  <nickg@redhat.com>
 
 	* src/if_fec.c: Changed order of initialization and made code more
--- a/packages/devs/eth/powerpc/fec/current/src/fec.h
+++ b/packages/devs/eth/powerpc/fec/current/src/fec.h
@@ -92,8 +92,8 @@ struct fec_bd {
 struct fec_eth_info {
     volatile struct fec        *fec;
     volatile struct fec_bd     *txbd, *rxbd;     // Next Tx,Rx descriptor to use
-    struct fec_bd              *tbase, *rbase;   // First Tx,Rx descriptor
-    struct fec_bd              *tnext, *rnext;   // Next descriptor to check for interrupt
+    volatile struct fec_bd     *tbase, *rbase;   // First Tx,Rx descriptor
+    volatile struct fec_bd     *tnext, *rnext;   // Next descriptor to check for interrupt
     int                         txsize, rxsize;  // Length of individual buffers
     int                         txactive;        // Count of active Tx buffers
     unsigned long               txkey[CYGNUM_DEVS_ETH_POWERPC_FEC_TxNUM];
@@ -104,8 +104,8 @@ struct fec_eth_info {
 struct fec {
     unsigned long  addr[2];    // ESA
     unsigned long  hash[2];    // Address hash mask
-    struct fec_bd *RxRing;
-    struct fec_bd *TxRing;
+    volatile struct fec_bd *RxRing;
+    volatile struct fec_bd *TxRing;
     unsigned long  RxBufSize;
     unsigned char  _fill0[0x40-0x1C];
     unsigned long  eControl;   // Master control register
--- a/packages/devs/eth/powerpc/fec/current/src/if_fec.c
+++ b/packages/devs/eth/powerpc/fec/current/src/if_fec.c
@@ -129,7 +129,7 @@ NETDEVTAB_ENTRY(fec_netdev,
                 fec_eth_init, 
                 &fec_eth0_sc);
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 #define _FEC_USE_INTS
 #ifdef _FEC_USE_INTS
 static cyg_interrupt fec_eth_interrupt;
@@ -141,7 +141,7 @@ static cyg_thread fec_fake_int_thread_da
 static cyg_handle_t fec_fake_int_thread_handle;
 static void fec_fake_int(cyg_addrword_t);
 #endif // _FEC_USE_INTS
-#endif // CYGPKG_NET
+#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 static void          fec_eth_int(struct eth_drv_sc *data);
 
 #define FEC_ETH_INT CYGNUM_HAL_INTERRUPT_SIU_LVL1
@@ -238,7 +238,7 @@ fec_eth_reset(struct eth_drv_sc *sc, uns
     struct fec_eth_info *qi = (struct fec_eth_info *)sc->driver_private;
     volatile EPPC *eppc = (volatile EPPC *)eppc_base();
     volatile struct fec *fec = (volatile struct fec *)((unsigned char *)eppc + FEC_OFFSET);
-    struct fec_bd *rxbd, *txbd;
+    volatile struct fec_bd *rxbd, *txbd;
     unsigned char *RxBUF, *TxBUF;
     int cache_state, int_state;
     int i;
@@ -394,7 +394,7 @@ fec_eth_init(struct cyg_netdevtab_entry 
     qi->fec = fec;
     fec_eth_stop(sc);  // Make sure it's not running yet
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 #ifdef _FEC_USE_INTS
     // Set up to handle interrupts
     cyg_drv_interrupt_create(FEC_ETH_INT,
@@ -455,6 +455,7 @@ fec_eth_init(struct cyg_netdevtab_entry 
     CYGACC_CALL_IF_DELAY_US(10000);   // 10ms
     eppc->pip_pbdat |= 0x00004000;   // Enable PHY chip
     // Enable transceiver (PHY)    
+    phy_ok = 0;
     phy_write(PHY_BMCR, 0, PHY_BMCR_RESET);
     for (i = 0;  i < 10;  i++) {
         phy_ok = phy_read(PHY_BMCR, 0, &phy_state);
@@ -524,7 +525,6 @@ fec_eth_control(struct eth_drv_sc *sc, u
                   void *data, int length)
 {
 #ifdef ETH_DRV_SET_MC_ALL
-    struct eth_drv_mc_list *mc_list;
     struct fec_eth_info *qi = (struct fec_eth_info *)sc->driver_private;
     volatile struct fec *fec = qi->fec;
 #endif
@@ -769,7 +769,7 @@ fec_eth_int_vector(struct eth_drv_sc *sc
     return (FEC_ETH_INT);
 }
 
-#if defined(CYGPKG_NET) && ~defined(_FEC_USE_INTS)
+#if defined(CYGINT_IO_ETH_INT_SUPPORT_REQUIRED) && ~defined(_FEC_USE_INTS)
 void
 fec_fake_int(cyg_addrword_t param)
 {
--- a/packages/devs/eth/powerpc/quicc/current/ChangeLog
+++ b/packages/devs/eth/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/if_quicc.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+	appropriate.
+
 2001-08-22  Gary Thomas  <gthomas@redhat.com>
 
 	* src/if_quicc.c: 
--- a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
+++ b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
@@ -130,13 +130,13 @@ NETDEVTAB_ENTRY(quicc_netdev,
 
 extern int _mbx_fetch_VPD(int, void *, int);
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 static cyg_interrupt quicc_eth_interrupt;
 static cyg_handle_t  quicc_eth_interrupt_handle;
 #endif
 static void          quicc_eth_int(struct eth_drv_sc *data);
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 // This ISR is called when the ethernet interrupt occurs
 static int
 quicc_eth_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs)
@@ -152,7 +152,7 @@ static void
 quicc_eth_deliver(struct eth_drv_sc * sc)
 {
     quicc_eth_int(sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     // Allow interrupts to happen again
     cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_CPM_SCC1);
 #endif
@@ -200,7 +200,7 @@ quicc_eth_init(struct cyg_netdevtab_entr
     HAL_DCACHE_SYNC();
     HAL_DCACHE_DISABLE();
 
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
     // Set up to handle interrupts
     cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_CPM_SCC1,
                              CYGARC_SIU_PRIORITY_HIGH,
--- a/packages/hal/arm/arch/current/ChangeLog
+++ b/packages/hal/arm/arch/current/ChangeLog
@@ -1,3 +1,13 @@
+2002-05-28  Mark Salter  <msalter@redhat.com>
+
+	* cdl/hal_arm.cdl: Tweaked description for
+	CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS.
+	Add CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS.
+
+	* src/redboot_linux_exec.c (do_exec): Rework transition to MMU
+	off and jump to kernel so that it works for non 1-1 mapped
+	platforms.
+
 2002-05-20  Gary Thomas  <gthomas@redhat.com>
 
 	* include/hal_io.h: Fix ...STRING macros - not using index.
--- a/packages/hal/arm/arch/current/cdl/hal_arm.cdl
+++ b/packages/hal/arm/arch/current/cdl/hal_arm.cdl
@@ -233,22 +233,32 @@ cdl_package CYGPKG_HAL_ARM {
         }
 
         cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS {
-            display       "Linux execution address"
+            display       "Physical base address of linux kernel"
             flavor        data
             default_value CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT
             description   "
-                This is the physical address where Linux expects to be started
-                from."
+                This is the physical address of the base of the Linux kernel
+                image."
         }
 
         cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
-            display       "Linux execution address"
+            display       "Default physical base address of linux kernel"
             flavor        data
             default_value 0x00008000
             no_define
             description   "
-                This is the physical address where Linux expects to be started
-                from. This option gets set by the platform CDL."
+                This is the physical address of the base of the Linux kernel
+                image. This option gets set by the platform CDL."
+        }
+
+        cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS {
+            display       "Base address of linux kernel parameter tags"
+            flavor        data
+            default_value 0x100
+            description   "
+                This is the base address of the area of memory used to
+                pass parameters to the Linux kernel. This should be chosen
+                to avoid overlap with the kernel and any ramdisk image."
         }
 
     }
--- a/packages/hal/arm/arch/current/src/redboot_linux_exec.c
+++ b/packages/hal/arm/arch/current/src/redboot_linux_exec.c
@@ -91,6 +91,20 @@ RedBoot_cmd("exec",
             do_exec
     );
 
+// CYGARC_HAL_MMU_OFF inserts code to turn off MMU and jump to a physical
+// address. Some ARM implementations may need special handling and define
+// their own version.
+#ifndef CYGARC_HAL_MMU_OFF
+#define CYGARC_HAL_MMU_OFF(__paddr__) \
+  "   mcr p15,0,r0,c7,c10,4\n"        \
+  "   mcr p15,0,r0,c7,c7,0\n"         \
+  "   mrc p15,0,r0,c1,c0,0\n"         \
+  "   bic r0,r0,#0xd\n"               \
+  "   bic r0,r0,#0x1000\n"            \
+  "   mcr p15,0,r0,c1,c0,0\n"         \
+  "   mov pc," #__paddr__ "\n"
+#endif
+
 //
 // Parameter info for Linux kernel
 //   ** C A U T I O N **  This setup must match "asm-arm/setup.h"
@@ -243,9 +257,12 @@ do_exec(int argc, char *argv[])
     struct option_info opts[6];
     char line[8];
     char *cmd_line;
-    struct tag *params = (struct tag *)0x0100;
+    struct tag *params = (struct tag *)CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS;
+    extern char __tramp_start__[], __tramp_end__[];
 
-    entry = (unsigned long)CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS);  // Default Linux execute address
+    // Default physical entry point for Linux is kernel base.
+    entry = (unsigned long)CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS;
+
     base_addr = load_address;
     length = load_address_end - load_address;
     ramdisk_size = 4096*1024;
@@ -339,73 +356,49 @@ do_exec(int argc, char *argv[])
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
 
-    // Tricky code.  We are currently running with the MMU on and the
-    // memory map convoluted from 1-1.  The trampoline code between
-    // labels 1 and 2 must be copied to RAM and then executed at the
-    // non-mapped address.  Then when the code turns off the MMU, the
-    // control flow is unchanged and control can be passed safely to
-    // the program to be executed.
-    // Note: This only works if phys=virt (or there are appropriate
-    //       double mapping of the memory). This should be rewritten
-    //       so a jump follows immediately after the MMU disable
-    //       operation.
+    // Tricky code. We are currently running with the MMU on and the
+    // memory map possibly convoluted from 1-1.  The trampoline code
+    // between labels __tramp_start__ and __tramp_end__ must be copied
+    // to RAM and then executed at the non-mapped address.
     // 
-    // This magic was created in order to
-    // be able to execute standard Linux kernels with as little
-    // change/perturberance as possible.
-    asm volatile ("\n"                  // Copy code between labels 1-2 to the
-                  " ldr r2,=1f;\n"      // trampoline address...
-                  " ldr r3,=2f;\n"
-                  " mov r5,%0;\n"
-                  "4:\n"
-                  " ldr r1,[r2],#4;\n"
-                  " str r1,[r5],#4;\n"
-                  " cmp r2,r3;\n"
-                  " bne 4b;\n"
-                  " nop;nop;nop;nop;nop;nop;nop;nop;\n"
-                  " mov r5,%1;\n"
-		  " mov r2,%2;\n"
-		  " mov r3,%3;\n"
-                  " mov r7,%4;\n"
-		  " mov r6,%5;\n"
-		  " mov pc,%0;\n"       //... and jump to it.
-                  " \n"
-                  "1:\n"
-                  " mrs r1,cpsr;\n"     // Put processor in IRQ mode
-                  " bic r0,r1,#0x1F;\n"
-                  " orr r0,r0,#0x12;\n"
-                  " msr cpsr,r0;\n"
-                  " msr spsr,r1;\n"
-                  " mov lr,r5;\n"       // Set kernel entry point
-                  " mov sp,r5;\n"       // Give the kernel a stack just below the entry point
-                  " mov r1,#0;\n"       // Turn off MMU and caches
-                  " mcr p15,0,r1,c1,c0;\n"
-                  " nop;nop;nop;\n"
-                  " cmp r2,r6;\n"       // Default kernel load address. Relocate
-                  " beq 10f;\n"         // kernel image there if necessary, and
-		  " cmp r3,#0;\n"       // if size is non-zero
-		  " beq 10f;\n"
-		  "05:\n"
-		  " ldr r4,[r2],#4;\n"
-		  " str r4,[r6],#4;\n"
-		  " sub r3,r3,#4;\n"
-		  " cmp r3,#0;\n"
-		  " bne 05b;\n"
-		  "10:\n"
-                  " mov r0,#0;\n"        // Set board type and start the kernel
-                  " mov r1,r7;\n" 
-                  " movs pc,lr;\n"
-                  "2:\n"
-                  : : 
-                  "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS)),
-		  "r"(entry),
-                  "r"(CYGARC_PHYSICAL_ADDRESS(base_addr)),
-                  "r"(length),
-                  "r"(CYGHWR_REDBOOT_ARM_MACHINE_TYPE),
-                  "r"(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS) : 
-                  "r7","r6","r5","r2","r3","r1");
+    // This magic was created in order to be able to execute standard
+    // Linux kernels with as little change/perturberance as possible.
+
+    // copy the trampline code
+    memcpy((char *)CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS,
+	   __tramp_start__,
+	   __tramp_end__ - __tramp_start__);
+
+    asm volatile (
+        CYGARC_HAL_MMU_OFF(%5)
+        "__tramp_start__:\n"
+        " cmp %1,%4;\n"       // Default kernel load address. Relocate
+        " beq 2f;\n"          // kernel image there if necessary, and
+        " cmp %2,#0;\n"       // if size is non-zero
+        " beq 2f;\n"
+        "1:\n"
+        " ldr r0,[%1],#4;\n"
+        " str r0,[%4],#4;\n"
+        " subs %2,%2,#4;\n"
+        " bne 1b;\n"
+        "2:\n"
+        " mov r0,#0;\n"       // Set board type
+        " mov r1,%3;\n"       // Machine type
+        " mov r2,%6;\n"       // Kernel parameters
+        " mov pc,%0;\n"       // Jump to kernel
+        "__tramp_end__:\n"
+        : : 
+        "r"(entry),
+        "r"(CYGARC_PHYSICAL_ADDRESS(base_addr)),
+        "r"(length),
+        "r"(CYGHWR_REDBOOT_ARM_MACHINE_TYPE),
+        "r"(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS),
+        "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS)),
+        "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS))
+        : "r0", "r1"
+        );
 }
-
+      
 #endif // HAL_PLATFORM_MACHINE_TYPE - otherwise we do not support this stuff...
 
 // EOF redboot_linux_exec.c
--- a/packages/hal/arm/iq80310/current/ChangeLog
+++ b/packages/hal/arm/iq80310/current/ChangeLog
@@ -1,3 +1,12 @@
+2002-05-28  Mark Salter  <msalter@redhat.com>
+
+	* cdl/hal_arm_iq80310.cdl: Add Linux boot support.
+	* misc/redboot_RAM.ecm: Ditto.
+	* misc/redboot_ROM.ecm: Ditto.
+
+	* include/hal_iq80310.h (CYGARC_HAL_MMU_OFF): Xscale has
+	special requirements for turning off MMU.
+
 2002-05-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/hal_diag.c: Support dynamic getting and setting of baud rates.
--- a/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl
+++ b/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl
@@ -179,6 +179,25 @@ cdl_package CYGPKG_HAL_ARM_IQ80310 {
         }
     }
 
+    cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS {
+        display       "Redboot for XScale options"
+        flavor        none
+        no_define
+        parent        CYGPKG_REDBOOT
+        active_if     CYGPKG_REDBOOT
+        description   "
+            This option lists the target's requirements for a valid Redboot
+            configuration."
+
+        # RedBoot details
+        requires { CYGSEM_REDBOOT_ARM_LINUX_BOOT }
+        requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 }
+        define_proc {
+            puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xA1FF0000"
+	    puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE  70"
+        }
+    }
+
     cdl_component CYGBLD_GLOBAL_OPTIONS {
         display "Global build options"
         flavor  none
--- a/packages/hal/arm/iq80310/current/include/hal_iq80310.h
+++ b/packages/hal/arm/iq80310/current/include/hal_iq80310.h
@@ -579,6 +579,22 @@
 extern unsigned int _80312_EMISR;  // Only valid for PEC ISR
 #endif
 
+// ------------------------------------------------------------------------
+
+// Override the default MMU off code. This is intended
+// to be included in an inline asm statement.
+#define CYGARC_HAL_MMU_OFF(__paddr__)        \
+              "   mrc p15,0,r0,c1,c0,0\n"    \
+              "   bic r0,r0,#0x05\n"         \
+              "   b 99f\n"                   \
+              "   .p2align 5\n"              \
+              "99:\n"                        \
+              "   mcr p15,0,r0,c1,c0,0\n"    \
+              "   mrc p15,0,r0,c2,c0,0\n"    \
+              "   mov r0,r0\n"	             \
+              "   sub pc,pc,#4\n"            \
+              "   mov pc," #__paddr__ "\n"
+
 
 /*---------------------------------------------------------------------------*/
 /* end of hal_iq80310.h                                                         */
--- a/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
@@ -95,6 +95,14 @@ cdl_component CYGSEM_REDBOOT_BSP_SYSCALL
     inferred_value 1
 };
 
+cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT {
+    inferred_value 1
+};
+
+cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
+    inferred_value 0xA0008000
+};
+
 cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
     inferred_value 1 <cyg/libc/string/string.h>
 };
--- a/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
@@ -99,6 +99,14 @@ cdl_component CYGSEM_REDBOOT_BSP_SYSCALL
     inferred_value 1
 };
 
+cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT {
+    inferred_value 1
+};
+
+cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
+    inferred_value 0xA0008000
+};
+
 cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
     inferred_value 1 <cyg/libc/string/string.h>
 };
--- a/packages/hal/arm/xscale/iq80321/current/ChangeLog
+++ b/packages/hal/arm/xscale/iq80321/current/ChangeLog
@@ -1,3 +1,10 @@
+2002-05-28  Mark Salter  <msalter@redhat.com>
+
+	* cdl/hal_arm_xscale_iq80321.cdl: Add HAL_PLATFORM_MACHINE_TYPE.
+
+	* misc/redboot_RAM.ecm: Changed Linux address.
+	* misc/redboot_ROM.ecm: Ditto.
+
 2002-05-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/hal_diag.c: Support dynamic getting and setting of baud rates.
--- a/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl
+++ b/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl
@@ -73,6 +73,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IQ8032
 	puts $::cdl_header "#define HAL_PLATFORM_CPU    \"XScale\""
         puts $::cdl_header "#define HAL_PLATFORM_BOARD  \"IQ80321\""
         puts $::cdl_header "#define HAL_PLATFORM_EXTRA  \"\""
+        puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE  169"
     }
 
     cdl_component CYG_HAL_STARTUP {
--- a/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm
+++ b/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm
@@ -90,7 +90,7 @@ cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT
 };
 
 cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
-    inferred_value 0xC0008000
+    inferred_value 0xA0008000
 };
 
 cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
--- a/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm
+++ b/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm
@@ -94,7 +94,7 @@ cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT
 };
 
 cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
-    inferred_value 0xC0008000
+    inferred_value 0xA0008000
 };
 
 cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
--- a/packages/hal/arm/xscale/verde/current/ChangeLog
+++ b/packages/hal/arm/xscale/verde/current/ChangeLog
@@ -1,3 +1,10 @@
+2002-05-28  Mark Salter  <msalter@redhat.com>
+
+	* cdl/hal_arm_xscale_verde.cdl: Fix linux exec address test.
+
+	* include/hal_verde.h (CYGARC_HAL_MMU_OFF): XScale has
+	special requirements for turning off MMU.
+
 2002-05-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* cdl/hal_arm_xscale_verde.cdl: Remove implement of
--- a/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl
+++ b/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl
@@ -127,7 +127,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_VERDE 
 
         # RedBoot details
         requires { CYGSEM_REDBOOT_ARM_LINUX_BOOT }
-        requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xc0008000 }
+        requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 }
         define_proc {
             puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0x00001f00"
         }
--- a/packages/hal/arm/xscale/verde/current/include/hal_verde.h
+++ b/packages/hal/arm/xscale/verde/current/include/hal_verde.h
@@ -88,6 +88,19 @@ static inline void CPWAIT(void) {
 }
 #endif
 
+// Override the default MMU off code. This is intended
+// to be included in an inline asm statement.
+#define CYGARC_HAL_MMU_OFF(__paddr__)        \
+              "   mrc p15,0,r0,c1,c0,0\n"    \
+              "   bic r0,r0,#0x05\n"         \
+              "   b 99f\n"                   \
+              "   .p2align 5\n"              \
+              "99:\n"                        \
+              "   mcr p15,0,r0,c1,c0,0\n"    \
+              "   mrc p15,0,r0,c2,c0,0\n"    \
+              "   mov r0,r0\n"	             \
+              "   sub pc,pc,#4\n"            \
+              "   mov pc," #__paddr__ "\n"
 
 #ifdef __ASSEMBLER__
 
--- a/packages/hal/powerpc/quicc/current/ChangeLog
+++ b/packages/hal/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30  Jesper Skov  <jskov@redhat.com>
+
+	* src/quicc_smc1.c: Fix warning.
+
 2001-09-10  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* cdl/hal_powerpc_quicc.cdl (CYGNUM_HAL_QUICC_DIAG_BAUD):
--- a/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
+++ b/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
@@ -90,7 +90,7 @@
 #define QUICC_SMCE_TX  0x02  // Tx interrupt
 #define QUICC_SMCE_RX  0x01  // Rx interrupt
 
-static struct cp_bufdesc *next_rxbd;
+static volatile struct cp_bufdesc *next_rxbd;
 
 /*
  *  Initialize SMC1 as a uart.
@@ -443,7 +443,7 @@ cyg_hal_plf_serial_isr(void *__ch_data, 
                        CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
 {
     EPPC *eppc = (EPPC*) __ch_data;
-    struct cp_bufdesc *bd;
+    volatile struct cp_bufdesc *bd;
     char ch;
     int res = 0;
     CYGARC_HAL_SAVE_GP();
--- a/packages/hal/powerpc/viper/current/ChangeLog
+++ b/packages/hal/powerpc/viper/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30  John Dallaway  <jld@redhat.com>
+
+	* include/pkgconf/mlt*: Regenerated memory layout files.
+
 2002-04-30  Nick Garnett  <nickg@redhat.com>
 
 	* src/viper.S: Changed boot ROM wait states from 4 to 7.
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h
@@ -1,37 +1,37 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include <cyg/infra/cyg_type.h>
-#include <stddef.h>
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x0800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_for_rom) [];
-#endif
-#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (__reserved_for_rom))
-#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x3cd00)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:27:39 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include <cyg/infra/cyg_type.h>
+#include <stddef.h>
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vectors) [];
+#endif
+#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
+#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
+#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
+#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_for_rom) [];
+#endif
+#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (__reserved_for_rom))
+#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x3cd00)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi
@@ -1,31 +1,31 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#include <cyg/infra/cyg_type.inc>
-
-MEMORY
-{
-    ram : ORIGIN = 0, LENGTH = 0x0800000
-}
-
-SECTIONS
-{
-    SECTIONS_BEGIN
-    CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
-    CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
-    CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
-    CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0x3cd00;
-    SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA)
-    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
-    SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
-    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
-    SECTIONS_END
-}
+// eCos memory layout - Thu May 30 10:27:39 2002
+
+// This is a generated file - do not edit
+
+#include <cyg/infra/cyg_type.inc>
+
+MEMORY
+{
+    ram : ORIGIN = 0, LENGTH = 0x800000
+}
+
+SECTIONS
+{
+    SECTIONS_BEGIN
+    CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
+    CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
+    CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
+    CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0x3cd00;
+    SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA)
+    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
+    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
+    SECTIONS_END
+}
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt
@@ -1,17 +1,17 @@
-version 0
-region ram 0 800000 0 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
-section reserved_for_rom 3cd00 10 0 0 0 1 0 1 vectors vectors !
-section vectors 0 10 0 1 0 1 0 1 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 1 0 1 data data !
-section data 0 8 0 1 0 1 0 1 sbss sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
+version 0
+region ram 0 800000 0 !
+section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
+section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
+section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
+section reserved_for_rom 3cd00 10 0 0 0 1 0 1 vectors vectors !
+section vectors 0 10 0 1 0 1 0 1 text text !
+section text 0 4 0 1 0 1 0 1 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 1 0 1 data data !
+section data 0 8 0 1 0 1 0 1 sbss sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h
@@ -1,35 +1,35 @@
-// eCos memory layout - Fri Oct 20 10:35:48 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include <cyg/infra/cyg_type.h>
-#include <stddef.h>
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#define CYGMEM_REGION_rom (0xfe000000)
-#define CYGMEM_REGION_rom_SIZE (0x800000)
-#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:21:41 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include <cyg/infra/cyg_type.h>
+#include <stddef.h>
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#define CYGMEM_REGION_rom (0xfe000000)
+#define CYGMEM_REGION_rom_SIZE (0x800000)
+#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vectors) [];
+#endif
+#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
+#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
+#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
+#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi
@@ -1,4 +1,4 @@
-// eCos memory layout - Fri Oct 20 10:35:48 2000
+// eCos memory layout - Thu May 30 10:21:41 2002
 
 // This is a generated file - do not edit
 
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt
@@ -1,17 +1,17 @@
-version 0
-region ram 0 800000 0 !
-region rom fe000000 800000 1 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 1 0 0 0 1 0 0 data !
-section data 0 10 1 1 0 1 0 0 sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
-section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 0 0 1 data !
+version 0
+region ram 0 800000 0 !
+region rom fe000000 800000 1 !
+section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
+section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
+section reserved_virtual_table 100 1 0 0 0 1 0 0 data !
+section data 0 10 1 1 0 1 0 0 sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
+section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 text text !
+section text 0 4 0 1 0 1 0 1 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 0 0 1 data !
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h
@@ -1,32 +1,17 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include <cyg/infra/cyg_type.h>
-#include <stddef.h>
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x0800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:05:45 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include <cyg/infra/cyg_type.h>
+#include <stddef.h>
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi
@@ -1,30 +1,27 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#include <cyg/infra/cyg_type.inc>
-
-MEMORY
-{
-    ram : ORIGIN = 0, LENGTH = 0x0800000
-}
-
-SECTIONS
-{
-    SECTIONS_BEGIN
-    SECTION_vectors (ram, 0x000000, LMA_EQ_VMA)
-    CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
-    CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
-    CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
-    SECTION_text (ram, 0x3400, LMA_EQ_VMA)
-    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
-    SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
-    SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
-    SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
-    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
-    SECTIONS_END
-}
+// eCos memory layout - Thu May 30 10:05:45 2002
+
+// This is a generated file - do not edit
+
+#include <cyg/infra/cyg_type.inc>
+
+MEMORY
+{
+    ram : ORIGIN = 0, LENGTH = 0x800000
+}
+
+SECTIONS
+{
+    SECTIONS_BEGIN
+    SECTION_vectors (ram, 0, LMA_EQ_VMA)
+    SECTION_text (ram, 0x3400, LMA_EQ_VMA)
+    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
+    SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
+    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
+    SECTIONS_END
+}
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt
@@ -1,17 +1,13 @@
-version 0
-region ram 0 800000 0 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
-section reserved_for_rom 1cd00 10 0 0 0 1 0 1 vectors vectors !
-section vectors 0 10 0 1 0 1 0 1 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 1 0 1 data data !
-section data 0 8 0 1 0 1 0 1 sbss sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
+version 0
+region ram 0 800000 0 !
+section vectors 0 1 0 1 1 0 1 0 0 0 !
+section text 0 1 0 1 1 1 1 1 3400 3400 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 1 0 1 data data !
+section data 0 8 0 1 0 1 0 1 sbss sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/io/eth/current/ChangeLog
+++ b/packages/io/eth/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/eth_drivers.cdl: Provide CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
+	interface to indicate if interrupt support is required.
+
 2002-05-28  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/lwip/lw.diff: Remove. Obsolete.
--- a/packages/io/eth/current/cdl/eth_drivers.cdl
+++ b/packages/io/eth/current/cdl/eth_drivers.cdl
@@ -91,6 +91,7 @@ cdl_package CYGPKG_IO_ETH_DRIVERS {
         flavor        bool
         active_if     CYGPKG_NET
         requires      CYGINT_ISO_STRING_STRFUNCS
+        implements    CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
         default_value 1
         compile       net/eth_drv.c
 
@@ -201,9 +202,18 @@ cdl_package CYGPKG_IO_ETH_DRIVERS {
         requires      !CYGPKG_NET
         active_if     CYGPKG_NET_LWIP
         default_value 1
+        implements    CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
         compile       lwip/eth_drv.c
     }	
 
+    cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED {
+        display       "Interrupt support required"
+        flavor        booldata
+        description   "This interface is used to indicate to the low
+                       level device drivers that interrupt driven operation
+                       is required by higher layers."
+    }
+
     cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS {
         display "Common ethernet support build options"
         flavor  none
--- a/packages/net/common/current/ChangeLog
+++ b/packages/net/common/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30  Jesper Skov  <jskov@redhat.com>
+
+	* tests/flood.c (floodsend): Fixed warning.
+
 2002-05-28  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/dhcp_prot.c (do_dhcp): xmit2 need not be static.
--- a/packages/net/common/current/src/inet_pton.c
+++ b/packages/net/common/current/src/inet_pton.c
@@ -39,7 +39,7 @@
  */
 
 //#if defined(LIBC_SCCS) && !defined(lint)
-//static char rcsid[] = "$Id: inet_pton.c,v 1.4 2002/03/06 15:20:46 gthomas Exp $";
+//static char rcsid[] = "$Id: inet_pton.c,v 1.3 2002/02/20 17:39:39 gthomas Exp $";
 //#endif /* LIBC_SCCS and not lint */
 
 //#ifdef HAVE_CONFIG_H
--- a/packages/net/common/current/tests/bridge.c
+++ b/packages/net/common/current/tests/bridge.c
@@ -67,6 +67,7 @@
 #include <network.h>
 #include <sys/types.h>
 #include <stdlib.h>
+#ifdef CYGPKG_NET_BRIDGE
 #include <net/if.h>
 #include <net/if_dl.h>
 #include <netinet/in.h>
@@ -983,4 +984,11 @@ cyg_user_start(void) {
   printf("cyg_user_start done\n");
 }
 
+#else // CYGPKG_NET_BRIDGE
 
+void
+cyg_user_start(void) {
+    printf("No bridge support available\n");
+}
+#endif
+
--- a/packages/net/common/current/tests/flood.c
+++ b/packages/net/common/current/tests/flood.c
@@ -266,10 +266,14 @@ pingsend( int seq, struct sockaddr_in *h
 static void
 floodsend(cyg_addrword_t param)
 {
-    unsigned char pkt0[MAX_PACKET], pkt1[MAX_PACKET];
-
+#ifdef CYGHWR_NET_DRIVER_ETH0
+    unsigned char pkt0[MAX_PACKET];
     struct icmp *icmp0 = (struct icmp *)pkt0;
+#endif
+#ifdef CYGHWR_NET_DRIVER_ETH1
+    unsigned char pkt1[MAX_PACKET];
     struct icmp *icmp1 = (struct icmp *)pkt1;
+#endif
 
     int icmp_len = 64;
     int seq;
--- a/packages/net/common/current/tests/tcp_echo.c
+++ b/packages/net/common/current/tests/tcp_echo.c
@@ -65,9 +65,13 @@
 
 // Network throughput test code
 
-#include <lib/libkern/libkern.h>
+#include <network.h>
 
-#include <network.h>
+static __inline__ int
+max(int m, int n)
+{
+    return m > n ? m : n;
+}
 
 #define SOURCE_PORT 9990
 #define SINK_PORT   9991
--- a/packages/net/ns/dns/current/ChangeLog
+++ b/packages/net/ns/dns/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30  Jesper Skov  <jskov@redhat.com>
+
+	* src/dns.c: fixed index->ptdindex oversight.
+
 2002-05-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/dns.c (free_hent): Actually free hent itself!
--- a/packages/net/ns/dns/current/src/dns.c
+++ b/packages/net/ns/dns/current/src/dns.c
@@ -149,7 +149,7 @@ static void
 thread_destructor(CYG_ADDRWORD data)
 {
     struct hostent *hent;
-    hent = (struct hostent *)cyg_thread_get_data(index);
+    hent = (struct hostent *)cyg_thread_get_data(ptdindex);
     if (hent)
         free_hent(hent);
     return;
@@ -163,7 +163,7 @@ store_hent(struct hostent *hent)
     // Prevent memory leaks by setting a destructor to be
     // called on thread exit to free per-thread data.
     cyg_thread_add_destructor( &thread_destructor, 0 );
-    cyg_thread_set_data(index, (CYG_ADDRWORD)hent);
+    cyg_thread_set_data(ptdindex, (CYG_ADDRWORD)hent);
 }
 
 /* If there is an answer to an old query, free the memory it uses. */
@@ -171,10 +171,10 @@ static void
 free_stored_hent(void)
 {
     struct hostent *hent;
-    hent = (struct hostent *)cyg_thread_get_data(index);
+    hent = (struct hostent *)cyg_thread_get_data(ptdindex);
     if (hent) {
         free_hent(hent);
-        cyg_thread_set_data(index, (CYG_ADDRWORD)NULL);
+        cyg_thread_set_data(ptdindex, (CYG_ADDRWORD)NULL);
         cyg_thread_rem_destructor( &thread_destructor, 0 );
     }
 }
--- a/packages/redboot/current/doc/redboot_cmds.sgml
+++ b/packages/redboot/current/doc/redboot_cmds.sgml
@@ -756,7 +756,7 @@ 0xFE00B080: 45 6E 74 72 79 20 70 6F  69 
   </refentry>
 
 <!-- ******** help *************************************************** -->
-  <refentry>
+  <refentry id="help-command">
     <refnamediv>
       <refname>help</refname>
       <refpurpose>Display help on available commands</refpurpose>