diff packages/kernel/current/include/pkgconf/kernel.h @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/kernel/current/include/pkgconf/kernel.h
@@ -0,0 +1,1229 @@
+#ifndef CYGONCE_PKGCONF_KERNEL_H
+#define CYGONCE_PKGCONF_KERNEL_H
+// ====================================================================
+//
+//	pkgconf/kernel.h
+//
+//	Kernel configuration file
+//
+// ====================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Cygnus eCos Public License
+// Version 1.0 (the "License"); you may not use this file except in
+// compliance with the License.  You may obtain a copy of the License at
+// http://sourceware.cygnus.com/ecos
+// 
+// Software distributed under the License is distributed on an "AS IS"
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the
+// License for the specific language governing rights and limitations under
+// the License.
+// 
+// The Original Code is eCos - Embedded Cygnus Operating System, released
+// September 30, 1998.
+// 
+// The Initial Developer of the Original Code is Cygnus.  Portions created
+// by Cygnus are Copyright (C) 1998 Cygnus Solutions.  All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+// ====================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): 	nickg
+// Contributors:	nickg
+// Date:	1997-09-29	
+// Purpose:	To allow the user to edit kernel configuration options.
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+// ====================================================================
+
+/* ---------------------------------------------------------------------
+ * Some of the kernel configuration options depend on global options,
+ * so it is necessary to include the global options first.
+ */
+
+#include <pkgconf/system.h>
+
+/* Only define options if the kernel is to be present */
+#ifdef CYGPKG_KERNEL
+
+#include <pkgconf/hal.h>
+#include <pkgconf/infra.h>
+
+/* ---------------------------------------------------------------------
+ * The overall package definition.
+
+ {{CFG_DATA
+ 
+ cdl_package CYGPKG_KERNEL {
+     display  "eCos kernel"
+     type     boolean
+     requires CYGFUN_HAL_COMMON_KERNEL_SUPPORT
+     description "
+         This package contains the core functionality of the eCos
+         kernel. It relies on functionality provided by various HAL
+         packages and by the eCos infrastructure. In turn the eCos
+         kernel provides support for other packages such as the device
+         drivers and the uITRON compatibility layer."
+     doc ref/ecos-ref/ecos-kernel-overview.html
+ }
+
+ }}CFG_DATA */
+
+/* ---------------------------------------------------------------------
+ * The first component within the kernel is related to interrupt
+ * handling.
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_INTERRUPTS {
+     display "Kernel interrupt handling"
+     parent  CYGPKG_KERNEL
+     type    dummy
+     description "
+         The majority of configuration options related to interrupt
+         handling are in the HAL packages, since usually the code has
+         to be platform-specific. There are a number of options
+         provided within the kernel related to slightly higher-level
+         concepts, for example Delayed Service Routines."
+     doc ref/ecos-ref/interrupts.html
+ }
+
+ # In the absence of active-if support this has to be
+ # a sub-component. It does not use the CYGPKG_ prefix to make
+ # it easier to change back into an ordinary option later on.
+ cdl_component CYGIMP_KERNEL_INTERRUPTS_DSRS {
+     display     "Use delayed service routines (DSRs)"
+     parent      CYGPKG_KERNEL_INTERRUPTS
+     description "
+         In eCos the recommended way to handle device interrupts is to
+         do a minimum amount of work inside the low level interrupt
+         handler itself, and instead do as much as possible in a
+         Delayed Service Routine or DSR. If an application does not
+         make use of DSRs directly or indirectly then it is possible
+         to disable the DSR support completely, which reduces the
+         overheads of context switches and interrupt handling. Note
+         that the kernel real-time clock makes use of DSRs, as do many
+         of the device drivers. "
+     doc ref/ecos-ref/interrupt-and-exception-handlers.html
+     }
+
+ # NOTE: the choice of list vs table should not be two separate
+ # options. There is a single option which must have one of
+ # two legal values.
+ cdl_option CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST {
+     display "Use linked lists for DSRs"
+     parent  CYGIMP_KERNEL_INTERRUPTS_DSRS
+     type    radio
+     description "
+         When DSR support is enabled the kernel must keep track of all
+         the DSRs that are pending. This information can be kept in a
+         fixed-size table or in a linked list. The list implementation
+         requires that the kernel disable interrupts for a very short
+         period of time outside interrupt handlers, but there is no
+         possibility of a table overflow occurring."
+     doc ref/ecos-ref/interrupts.html
+ }
+
+ cdl_option CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE {
+     display "Use fixed-size table for DSRs"
+     parent  CYGIMP_KERNEL_INTERRUPTS_DSRS
+     type    radio
+     description "
+         When DSR support is enabled the kernel must keep track of all
+         the DSRs that are pending. This information can be kept in a
+         fixed-size table or in a linked list. The table
+         implementation involves a very small risk of overflow at
+         run-time if a given interrupt source is able to have more
+         than one pending DSR. However it has the advantage that
+         the kernel does not need to disable interrupts outside
+         interrupt handlers."
+     doc ref/ecos-ref/interrupts.html
+ }
+
+ cdl_option CYGNUM_KERNEL_INTERRUPTS_DSRS_TABLE_SIZE {
+     display            "Number of entries in fixed-size DSR table"
+     parent             CYGIMP_KERNEL_INTERRUPTS_DSRS
+     type               count
+     legal_values       2 to 1024
+     #active_if CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE
+     description "
+         When DSR support is enabled the kernel must keep track of all
+         the DSRs that are pending. One approach involves a fixed-size
+         table, which involves a very small risk of overflow at
+         run-time. By increasing the table size it is possible to reduce
+         this risk."
+     doc ref/ecos-ref/interrupts.html
+     }
+
+ cdl_option CYGIMP_KERNEL_INTERRUPTS_CHAIN {
+     display            "Chain all interrupts together"
+     parent             CYGPKG_KERNEL_INTERRUPTS
+     requires           CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
+     description "
+         Interrupts can be attached to vectors either singly, or be
+         chained together. The latter is necessary if there is no way
+         of discovering which device has interrupted without
+         inspecting the device itself. It can also reduce the amount
+         of RAM needed for interrupt decoding tables and code."
+     doc ref/ecos-ref/interrupts.html
+ }
+
+ }}CFG_DATA */
+
+#define CYGIMP_KERNEL_INTERRUPTS_DSRS
+#define CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST
+#undef  CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE
+#define CYGNUM_KERNEL_INTERRUPTS_DSRS_TABLE_SIZE 32
+#undef  CYGIMP_KERNEL_INTERRUPTS_CHAIN
+
+/* ---------------------------------------------------------------------
+ * Exceptions. Currently there are only two options. The first
+ * determines whether or not exceptions are enabled at all. The
+ * second controls whether they apply globally or on a per-thread
+ * basis. There should probably be more options, but the boundary
+ * between the HAL and kernel becomes blurred.
+ 
+   {{CFG_DATA
+
+   cdl_component CYGPKG_KERNEL_EXCEPTIONS {
+       display "Exception handling"
+       parent  CYGPKG_KERNEL
+       requires CYGPKG_HAL_EXCEPTIONS
+       description "
+           In the context of the eCos kernel exceptions are unexpected
+           events detected by the hardware, for example an attempt to
+           execute an illegal instruction. There is no relation with
+           other forms of exception, for example the catch and throw
+           facilities of languages like C++. It is possible to disable
+           all support for exceptions and thus save some memory."
+       doc ref/ecos-ref/exceptions.html
+   }
+
+   cdl_option CYGSEM_KERNEL_EXCEPTIONS_DECODE {
+       display "Decode exception types in kernel"
+       parent  CYGPKG_KERNEL_EXCEPTIONS
+       description "
+           On targets where several different types of exception are
+           possible, for example executing an illegal instruction and
+           division by zero, it is possible for the kernel to do some
+           decoding of the exception type and deliver the different
+           types of exception to different handlers in the application
+           code. Alternatively the kernel can simply pass all
+           exceptions directly to application code, leaving the
+           decoding to be done by the application"
+       doc ref/ecos-ref/exceptions.html
+   }
+   
+   cdl_option CYGSEM_KERNEL_EXCEPTIONS_GLOBAL {
+       display "Use global exception handlers"
+       parent  CYGPKG_KERNEL_EXCEPTIONS
+       description "
+           In the context of the eCos kernel exceptions are unexpected
+           events detected by the hardware, for example an attempt to
+           execute an illegal instruction. If the kernel is configured
+           to support exceptions then two implementations are
+           possible. The default implementation involves a single set
+           of exception handlers that are in use for the entire
+           system. The alternative implementation allows different
+           exception handlers to be specified for each thread."
+       doc ref/ecos-ref/exceptions.html
+   }
+   
+   }}CFG_DATA */
+
+#define CYGPKG_KERNEL_EXCEPTIONS
+#undef  CYGSEM_KERNEL_EXCEPTIONS_DECODE
+#define CYGSEM_KERNEL_EXCEPTIONS_GLOBAL
+
+
+/* ---------------------------------------------------------------------
+ * {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_SCHED {
+     display "Kernel schedulers"
+     type    dummy
+     parent  CYGPKG_KERNEL
+     description "
+         The eCos kernel provides a choice of schedulers. In addition
+         there are a number of configuration options to control the
+         detailed behaviour of these schedulers.
+     "
+     doc ref/ecos-ref/ecos-kernel-overview.html#THE-SCHEDULER
+ }
+
+ cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {
+     display    "Multi-level queue scheduler"
+     type       radio
+     parent     CYGPKG_KERNEL_SCHED
+     description "
+         The multi-level queue scheduler supports multiple priority
+         levels and multiple threads at each priority level.
+         Preemption between priority levels is automatic. Timeslicing
+         within a given priority level is controlled by a separate
+         configuration option"
+     doc ref/ecos-ref/ecos-kernel-overview.html#THE-SCHEDULER
+ }
+ 
+ cdl_option CYGSEM_KERNEL_SCHED_BITMAP {
+     display    "Bitmap scheduler"
+     type       radio
+     parent     CYGPKG_KERNEL_SCHED
+     description "
+         The bitmap scheduler supports multiple priority levels but
+         only one thread can exist at each priority level. This means
+         that scheduling decisions are very simple and hence the
+         scheduler is efficient. Preemption between priority levels is
+         automatic. Timeslicing within a given priority level is
+         irrelevant since there can be only one thread at each
+         priority level."
+     doc ref/ecos-ref/ecos-kernel-overview.html#THE-SCHEDULER
+ }
+
+ #cdl_option CYGSEM_KERNEL_SCHED_LOTTERY {
+ #    display    "Lottery scheduler"
+ #    type       radio
+ #    parent     CYGPKG_KERNEL_SCHED
+ #    description "
+ #       This scheduler is not yet available."
+ #}
+
+ # NOTE: this option only makes sense if the current scheduler
+ # supports multiple priority levels.
+ cdl_option CYGNUM_KERNEL_SCHED_PRIORITIES {
+     display            "Number of priority levels"
+     type               count
+     legal_values       1 to 32
+     parent             CYGPKG_KERNEL_SCHED
+     #active_if         CYGINT_KERNEL_SCHED_PRIORITY_SCHEDULER
+     description "
+         This option controls the number of priority levels that are
+         available. For some types of scheduler including the bitmap
+         scheduler this may impose an upper bound on the number of
+         threads in the system. For other schedulers such as the
+         mlqueue scheduler the number of threads is independent from
+         the number of priority levels. Note that the lowest priority
+         level is normally used only by the idle thread, although
+         application threads can run at this priority if necessary."
+     doc ref/ecos-ref/ecos-kernel-overview.html#THE-SCHEDULER
+ }
+
+  # NOTE: this option only makes sense for some of the schedulers.
+  # Timeslicing is irrelevant for bitmap schedulers.
+  cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE {
+      display           "Scheduler timeslicing"
+      parent            CYGPKG_KERNEL_SCHED
+      requires          !CYGSEM_KERNEL_SCHED_BITMAP
+      requires          CYGVAR_KERNEL_COUNTERS_CLOCK
+      description "
+          Some schedulers including the mlqueue scheduler support
+          timeslicing. This means that the kernel will check regularly
+          whether or not there is another runnable thread with the
+          same priority, and if there is such a thread there will be
+          an automatic context switch. Not all applications require
+          timeslicing, for example because every thread performs a
+          blocking operation regularly. For these applications it is
+          possible to disable timeslicing, which reduces the overheads
+          associated with timer interrupts."
+  }
+
+  cdl_option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS {
+      display           "Number of clock ticks between timeslices"
+      parent            CYGPKG_KERNEL_SCHED
+      type              count
+      legal_values      1 to 65535
+      #active_if CYGSEM_KERNEL_SCHED_TIMESLICE
+      description "
+          Assuming timeslicing is enabled, how frequently should it
+          take place? The value of this option corresponds to the
+          number of clock ticks that should occur before a timeslice
+          takes place, so increasing the value reduces the frequency
+          of timeslices."
+  }
+  
+ }}CFG_DATA */
+
+#define CYGSEM_KERNEL_SCHED_MLQUEUE
+#undef  CYGSEM_KERNEL_SCHED_BITMAP
+#undef  CYGSEM_KERNEL_SCHED_LOTTERY
+#define CYGNUM_KERNEL_SCHED_PRIORITIES          32
+#define CYGSEM_KERNEL_SCHED_TIMESLICE
+#define CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS      5
+
+/* ---------------------------------------------------------------------
+ * Counters and clocks.
+
+  {{CFG_DATA
+   
+  cdl_component CYGPKG_KERNEL_COUNTERS {
+      display "Counters and clocks"
+      parent  CYGPKG_KERNEL
+      type    dummy
+      description "
+          The counter objects provided by the kernel provide an
+          abstraction of the clock facility that is generally provided.
+          Application code can associate alarms with counters, where an
+          alarm is identified by the number of ticks until it triggers,
+          the action to be taken on triggering, and whether or not the
+          alarm should be repeated."
+     doc ref/ecos-ref/counters-clocks-and-alarms.html
+  }
+
+  cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK {
+      display "Provide real-time clock"
+      parent  CYGPKG_KERNEL_COUNTERS
+      requires CYGIMP_KERNEL_INTERRUPTS_DSRS
+      description "
+          On all current target systems the kernel can provide a
+          real-time clock. This clock serves two purposes. First it is
+          necessary to support clock and alarm related functions.
+          Second it is needed to implement timeslicing in some of the
+          schedulers including the mlqueue scheduler. If the
+          application does not require any of these facilities then it
+          is possible to disable the real time clock support
+          completely."
+     doc ref/ecos-ref/counters-clocks-and-alarms.html
+  }
+
+  cdl_component CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE {
+      display   "Override default clock settings"
+      parent    CYGPKG_KERNEL_COUNTERS
+      requires  CYGVAR_KERNEL_COUNTERS_CLOCK
+      type      bool
+      description "
+          The kernel has default settings for the clock interrupt
+          frequency. These settings will vary from platform to
+          platform, but typically there will be a 100 clock interrupts
+          every second. It is possible to change this frequency, but
+          it requires some knowledge of the target hardware.
+      "
+  }
+
+  cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_PERIOD {
+      display       "Clock hardware initialization value"
+      parent        CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE
+      type          count
+      legal_values  1 to 0x7fffffff
+      description   "
+          During system initialization this value is used to initialize
+          the clock hardware. The exact meaning of the value and the
+          range of legal values therefore depends on the target hardware,
+          and the hardware documentation should be consulted for further
+          details. In addition the clock resolution numerator and
+          denominator values should be updated. Typical values for
+          this option would be 150000 on the MN10300 stdeval1 board,
+          15625 on the tx39 jmr3904 board, and 20625 on the powerpc
+          cogent board."
+  }
+
+  cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_NUMERATOR {
+      display       "Clock resolution numerator"
+      parent        CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE
+      type          count
+      legal_values  1 to 0x7fffffff
+      description "
+          If a non-default clock interrupt frequency is used then it
+          is necessary to specify the clock resolution explicitly.
+          This resolution involves two separate values, the numerator
+          and the denominator. The result of dividing the numerator by
+          the denominator should correspond to the number of
+          nanoseconds between clock interrupts. For example a
+          numerator of 1000000000 and a denominator of 100 means that
+          there are 10000000 nanoseconds (or 10 milliseconds) between
+          clock interrupts. Expressing the resolution as a fraction
+          should minimize clock drift even for frequencies that cannot
+          be expressed as a simple integer. For example a frequency of
+          60Hz corresponds to a clock resolution of 16666666.66...
+          nanoseconds. This can be expressed accurately as 1000000000
+          over 60."
+  }
+
+  cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_DENOMINATOR {
+      display       "Clock resolution denominator"
+      parent        CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE
+      type          count
+      legal_values  1 to 0x7fffffff
+      description "
+          If a non-default clock interrupt frequency is used then it
+          is necessary to specify the clock resolution explicitly.
+          This resolution involves two separate values, the numerator
+          and the denominator. The result of dividing the numerator by
+          the denominator should correspond to the number of
+          nanoseconds between clock interrupts. For example a
+          numerator of 1000000000 and a denominator of 100 means that
+          there are 10000000 nanoseconds (or 10 milliseconds) between
+          clock interrupts. Expressing the resolution as a fraction
+          should minimize clock drift even for frequencies that cannot
+          be expressed as a simple integer. For example a frequency of
+          60Hz corresponds to a clock resolution of 16666666.66...
+          nanoseconds. This can be expressed accurately as 1000000000
+          over 60."
+  }
+  
+  
+  # NOTE: these option should really be a single enum.
+  cdl_option CYGIMP_KERNEL_COUNTERS_SINGLE_LIST {
+      display "Implement counters using a single list"
+      parent  CYGPKG_KERNEL_COUNTERS
+      type    radio
+      description "
+          There are two different implementations of the counter
+          objects. The first implementation stores all alarms in a
+          single linked list. The alternative implementation uses a
+          table of linked lists. A single list is more efficient in
+          terms of memory usage and is generally adequate when the
+          application only makes use of a small number of alarms."
+     doc ref/ecos-ref/counters-clocks-and-alarms.html
+ }
+
+ cdl_option CYGIMP_KERNEL_COUNTERS_MULTI_LIST {
+     display "Implement counters using a table of lists"
+     parent  CYGPKG_KERNEL_COUNTERS
+     type    radio
+     description "
+          There are two different implementations of the counter
+          objects. The first implementation stores all alarms in a
+          single linked list. The alternative implementation uses a
+          table of linked lists, with the size of the table being a
+          separate configurable option. For more complicated
+          operations it is better to have a table of lists since this
+          reduces the amount of computation whenever the timer goes
+          off. Assuming a table size of 8 (the default value) on
+          average the timer code will only need to check 1/8 of the
+          pending alarms instead of all of them."
+     doc ref/ecos-ref/counters-clocks-and-alarms.html
+ }
+
+ cdl_option CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE {
+     display            "Size of counter list table"
+     parent             CYGPKG_KERNEL_COUNTERS
+     type               count
+     legal_values       1 to 1024
+     #active_if CYGIMP_KERNEL_COUNTERS_MULTI_LIST
+     description "
+         If counters are implemented using an array of linked lists
+         then this option controls the size of the array. A larger
+         size reduces the amount of computation that needs to take
+         place whenever the timer goes off, but requires extra
+         memory."
+     doc ref/ecos-ref/counters-clocks-and-alarms.html
+ }
+
+ }}CFG_DATA */
+
+#define CYGVAR_KERNEL_COUNTERS_CLOCK
+#undef  CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE
+#define CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_PERIOD      9999
+#define CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_NUMERATOR   1000000000
+#define CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_DENOMINATOR 100
+#define CYGIMP_KERNEL_COUNTERS_SINGLE_LIST
+#undef  CYGIMP_KERNEL_COUNTERS_MULTI_LIST
+#define CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE 8
+
+/* ---------------------------------------------------------------------
+ * Thread-related options
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_THREADS {
+     display            "Thread-related options"
+     type               dummy
+     parent             CYGPKG_KERNEL
+     description "
+         There are a number of configuration options related to the
+         implementation of threads, for example whether or not the
+         eCos kernel supports per-thread data."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGFUN_KERNEL_THREADS_TIMER {
+     display            "Allow per-thread timers"
+     parent             CYGPKG_KERNEL_THREADS
+     requires           CYGVAR_KERNEL_COUNTERS_CLOCK
+     description "
+         This option controls whether or not the kernel should support
+         per-thread clock and alarm related functions. Also some of
+         the synchronization primitives such as semaphore and
+         condition variable timed wait operations require per-thread
+         timer support. If none of these facilities are required then
+         the option can be disabled."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGVAR_KERNEL_THREADS_NAME {
+     display            "Support optional name for each thread"
+     parent             CYGPKG_KERNEL_THREADS
+     description "
+         Threads may optionally be supplied with a name string that is
+         used to identify them during debugging. This name is only
+         present if `this option is defined. Disabling it reduces both
+         code and data size."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGVAR_KERNEL_THREADS_LIST {
+     display            "Keep track of all threads using a linked list"
+     parent             CYGPKG_KERNEL_THREADS
+     description "
+         Threads may optionally be placed on a housekeeping list so
+         that all threads may be located easily. This is useful mainly
+         in conjunction with source-level debugging."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGFUN_KERNEL_THREADS_STACK_LIMIT {
+     display            "Keep track of the base of each thread's stack"
+     parent             CYGPKG_KERNEL_THREADS
+     description "
+         This option makes the kernel keep track of the lower limit on
+         each thread's stack. It allows the kernel to adjust the lower
+         limit, thus making space for per-thread data. Note that it
+         does not imply any form of run-time stack overflow checking."
+     doc ref/ecos-ref/thread-operations.html
+ }
+ 
+ cdl_option CYGVAR_KERNEL_THREADS_DATA {
+     display            "Support for per-thread data"
+     parent             CYGPKG_KERNEL_THREADS
+     requires           CYGFUN_KERNEL_THREADS_STACK_LIMIT
+     description "
+         It is possible for the kernel to support per-thread data, in
+         other words an area of memory specific to each thread which
+         can be used to store data for that thread. This per-thread
+         data can be used by applications or by other packages such as
+         the ISO C library."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGNUM_KERNEL_THREADS_DATA_MAX {
+     display            "Number of words of per-thread data"
+     parent             CYGPKG_KERNEL_THREADS
+     #active_if         CYGVAR_KERNEL_THREADS_DATA
+     type               count
+     legal_values       1 to 65535
+     description "
+         It is possible for the kernel to support per-thread data, in
+         other words an area of memory specific to each thread which
+         can be used to store data for that thread. This per-thread
+         data can be used by applications or by other packages such as
+         the ISO C library. This configuration option controls the
+         number of words of per-thread data that the kernel will
+         allow."
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ cdl_option CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE {
+     display            "Stack size for the idle thread"
+     parent             CYGPKG_KERNEL_THREADS
+     type               count
+     legal_values       512 to 65536
+     description "
+         This configuration option specifies the stack size in bytes
+         for the idle thread. Unless the HAL is configured to use a
+         separate interrupt stack this size must be sufficient to meet
+         the requirements of all interrupt handlers - these
+         requirements are cumulative if nested interrupted are
+         enabled. Depending on the target architecture, the stack size
+         typically has to be a multiple of eight or sixteen bytes."
+         
+     doc ref/ecos-ref/thread-operations.html
+ }
+
+ }}CFG_DATA */
+
+#define CYGFUN_KERNEL_THREADS_TIMER
+#define CYGVAR_KERNEL_THREADS_NAME
+#define CYGVAR_KERNEL_THREADS_LIST
+#define CYGFUN_KERNEL_THREADS_STACK_LIMIT
+#define CYGVAR_KERNEL_THREADS_DATA
+#define CYGNUM_KERNEL_THREADS_DATA_MAX          6
+#define CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE   2048
+
+
+/* ---------------------------------------------------------------------
+ * Synchronization primitives.
+
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_SYNCH {
+     display    "Synchronization primitives"
+     type       dummy
+     parent     CYGPKG_KERNEL
+     description "
+         The eCos kernel supports a number of different
+         synchronization primitives such as mutexes, semaphores,
+         condition variables, and message boxes. There are
+         configuration options to control the exact behaviour of some
+         of these synchronization primitives.
+     "
+     doc ref/ecos-ref/thread-synchronization.html
+ }
+
+ # NOTE: the requires statement is only valid for the current kernel.
+ # Priority inheritance is possible in other schedulers as well
+ # but is not yet implemented.
+ cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE {
+     display    "Simple mutex priority inheritance"
+     requires   CYGSEM_KERNEL_SCHED_MLQUEUE
+     parent     CYGPKG_KERNEL_SYNCH
+     description "
+         This option enables a relatively simple implementation of
+         mutex priority inheritance. The implementation will only work
+         in the mlqueue scheduler, and it does not handle the rare
+         case of nested mutexes completely correctly. However it is
+         both fast and deterministic. Mutex priority inheritance can
+         be disabled if the application does not require it, which
+         will reduce both code size and data space."
+     doc ref/ecos-ref/synchronization.html#MUTEXES
+ }
+
+ cdl_option CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT {
+     display    "Message box blocking put support"
+     parent     CYGPKG_KERNEL_SYNCH
+     description "
+         Message boxes can support three different versions of the
+         put-message operation. The first is tryput(), which will fail
+         if the message box is already full. The other two are the
+         ordinary put() function which will block if the message box
+         is full, and a timed put() operation which will block for
+         upto a certain length of time if the message box is currently
+         full. The blocking versions require extra memory in the
+         message box data structure and extra code in the other
+         message box functions, so they can be disabled if the
+         application does not require them. If this option is enabled
+         then the system will always provide the blocking put()
+         function, and it will also provide the timed put() function
+         if thread timers are enabled."
+     doc ref/ecos-ref/message-boxes.html
+ }
+
+ cdl_option CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE {
+     display            "Message box queue size"
+     parent             CYGPKG_KERNEL_SYNCH
+     type               count
+     legal_values       1 to 65535
+     description "
+         This configuration option controls the number of messages
+         that can be queued in a message box before a non-blocking
+         put() operation will fail or a blocking put() operation will
+         block. The cost in memory is one pointer per message box for
+         each possible message."
+ }
+
+ cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {
+     display            "Condition variable timed-wait support"
+     parent             CYGPKG_KERNEL_SYNCH
+     requires           CYGVAR_KERNEL_COUNTERS_CLOCK
+     description "
+         This option enables the condition variable timed wait
+         facility."
+     doc ref/ecos-ref/synchronization.html#CONDITION-VARIABLES
+ }
+
+ }}CFG_DATA
+ 
+ */
+
+#define CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE
+#define CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT
+#define CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE     10
+#define CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT
+
+/* ---------------------------------------------------------------------
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_INSTRUMENT {
+     display "Kernel instrumentation"
+     parent  CYGPKG_KERNEL
+     description "
+         The current release of the kernel contains an initial version
+         of instrumentation support. The various parts of the kernel
+         will invoke instrumentation routines whenever appropriate
+         events occur, and these will be stored in a circular buffer
+         for later reference."
+ }
+
+
+ cdl_option CYGNUM_KERNEL_INSTRUMENT_BUFFER_SIZE {
+     display            "Size of instrumentation buffer size"
+     parent             CYGPKG_KERNEL_INSTRUMENT
+     type               count
+     legal_values       16 to 0x100000
+     description "
+         If kernel instrumentation is enabled then the instrumentation
+         data goes into a circular buffer. A larger buffer allows
+         more data to be stored, but at a significant cost in memory.
+         The value of this option corresponds to the number of entries
+         in the table, and typically each entry will require 16 bytes
+         of memory."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_FLAGS {
+     display            "Perform selective instrumentation"
+     parent             CYGPKG_KERNEL_INSTRUMENT
+     description "
+         The kernel can either collect all instrumentation events, or
+         it can filter out events at runtime based on a set of flags.
+         For example it would be possible to decide at runtime that
+         only scheduler and interrupt instrumentation flags are of
+         interest and that all other flags should be ignored. This
+         flag mechanism involves extra code and processor cycle
+         overhead in the instrumentation code, so it can be disabled
+         if the application developer is interested in all
+         instrumentation events."
+ }
+
+ # NOTE: many of these options should only be active if the appropriate
+ # component is active.
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_SCHED {
+     display    "Instrument the scheduler"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the scheduling code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_THREAD {
+     display    "Instrument thread operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the code that manipulates threads."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_INTR {
+     display    "Instrument interrupts"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the interrupt handling code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_MUTEX {
+     display    "Instrument mutex operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the mutex code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_CONDVAR {
+     display    "Instrument condition variable operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the condition variable code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_BINSEM {
+     display    "Instrument binary semaphore operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the binary semaphore code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_CNTSEM {
+     display    "Instrument counting semaphore operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the counting semaphore code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_MBOXT {
+     display    "Instrument message box operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the message box code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_CLOCK {
+     display    "Instrument clock operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the real-time clock code."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_ALARM {
+     display    "Instrument alarm-related operations"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not instrumentation support is compiled into
+         the code related to alarm operations."
+ }
+
+ cdl_option CYGDBG_KERNEL_INSTRUMENT_USER {
+     display    "Support application-level instrumentation"
+     parent     CYGPKG_KERNEL_INSTRUMENT
+     description "
+         It is possible to perform selective instrumentation at
+         run-time. It is also possible to disable instrumentation
+         in various kernel components at compile-time, thus
+         reducing the code size overheads. This option controls
+         whether or not application-level instrumentation gets
+         compiled in."
+ }
+ 
+ }}CFG_DATA
+*/
+
+#undef  CYGPKG_KERNEL_INSTRUMENT
+#undef  CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER
+#define CYGNUM_KERNEL_INSTRUMENT_BUFFER_SIZE           256
+#define CYGDBG_KERNEL_INSTRUMENT_FLAGS
+#define CYGDBG_KERNEL_INSTRUMENT_SCHED
+#define CYGDBG_KERNEL_INSTRUMENT_THREAD
+#define CYGDBG_KERNEL_INSTRUMENT_INTR
+#define CYGDBG_KERNEL_INSTRUMENT_MUTEX
+#define CYGDBG_KERNEL_INSTRUMENT_CONDVAR
+#define CYGDBG_KERNEL_INSTRUMENT_BINSEM
+#define CYGDBG_KERNEL_INSTRUMENT_CNTSEM
+#define CYGDBG_KERNEL_INSTRUMENT_CLOCK
+#define CYGDBG_KERNEL_INSTRUMENT_ALARM
+#define CYGDBG_KERNEL_INSTRUMENT_MBOXT
+#define CYGDBG_KERNEL_INSTRUMENT_USER
+
+/* ---------------------------------------------------------------------
+ * There appears to be somewhat of a lack of configuration options here.
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_MEMORY {
+     display    "Memory allocators"
+     type       dummy
+     parent     CYGPKG_KERNEL
+     description "
+         Configuration options related to the kernel memory allocation
+         support."
+ }
+
+ cdl_option CYGSEM_KERNEL_MEMORY_COALESCE {
+     display    "Coalesce memory in the variable-block allocator"
+     parent     CYGPKG_KERNEL_MEMORY
+     description "
+         The variable-block memory allocator can perform coalescing
+         of memory whenever the application code releases memory back
+         to the pool. This coalescing reduces the possibility of
+         memory fragmentation problems, but involves extra code and
+         processor cycles."
+ }
+
+ }}CFG_DATA */
+ 
+#define CYGSEM_KERNEL_MEMORY_COALESCE
+
+/* ---------------------------------------------------------------------
+ * Options related to source-level debugging and diagnostics.
+
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_DEBUG {
+     display    "Source-level debugging support"
+     type       dummy
+     parent     CYGPKG_KERNEL
+     description "
+         If the source level debugger gdb is to be used for debugging
+         application code then it may be necessary to configure in support
+         for this in the kernel."
+ }
+
+ # NOTE: does this require any other support ?
+ cdl_option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT {
+     display    "Include GDB multi-threading debug support"
+     parent     CYGPKG_KERNEL_DEBUG
+     requires   CYGVAR_KERNEL_THREADS_LIST
+     requires   CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
+     description "
+         This option enables some extra kernel code which is needed
+         to support multi-threaded source level debugging."
+ }
+
+ }}CFG_DATA */
+
+#define CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+
+/* ---------------------------------------------------------------------
+ * Kernel API's. The C++ one is the default. A C API is optional.
+ * Support for other languages is possible.
+
+ {{CFG_DATA
+
+ cdl_component CYGPKG_KERNEL_API {
+     display    "Kernel APIs"
+     type       dummy
+     parent     CYGPKG_KERNEL
+     description "
+         The eCos kernel is implemented in C++, so a C++ interface
+         to the kernel is always available. There is also an optional
+         C API. Additional API's may be provided in future versions."
+	 doc ref/ecos-ref/kernel-apis.html
+ }
+
+ cdl_option     CYGFUN_KERNEL_API_C {
+     display    "Provide C API"
+     parent     CYGPKG_KERNEL_API
+     description "
+         The eCos kernel is implemented in C++, but there is an
+         optional C API for use by application code. This C API can be
+         disabled if the application code does not invoke the kernel
+         directly, but instead uses higher level code such as the
+         uITRON compatibility layer."
+ }
+
+ }}CFG_DATA */
+
+#define CYGFUN_KERNEL_API_C
+ 
+/* ---------------------------------------------------------------------
+ * The rest of this header file contains various fix-ups and
+ * options which cannot yet be controlled via the GUI tool.
+ *
+ * First some miscellaneous scheduler support, all calculated.
+ */
+
+#if defined(CYGSEM_KERNEL_SCHED_TIMESLICE) && defined(CYGSEM_KERNEL_SCHED_BITMAP)
+# error Timeslicing cannot be enabled if the bitmap scheduler is used.
+#endif
+
+/*
+ * These #define's are for the system's internal use only and should
+ * not be edited by users. */
+#ifdef CYGSEM_KERNEL_SCHED_BITMAP
+# define CYGPRI_KERNEL_SCHED_IMPL_HXX           <cyg/kernel/bitmap.hxx>
+#elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)
+# define CYGPRI_KERNEL_SCHED_IMPL_HXX           <cyg/kernel/mlqueue.hxx>
+#elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)
+# define CYGPRI_KERNEL_SCHED_IMPL_HXX           <cyg/kernel/lottery.hxx>
+#else
+#error No Scheduler defined
+#endif
+
+#define CYGNUM_KERNEL_SCHED_BITMAP_SIZE         CYGNUM_KERNEL_SCHED_PRIORITIES
+
+/* ---------------------------------------------------------------------
+ * Counter and clock related miscellania.
+ *
+ * If a real-time clock is enabled then there are additional
+ * configuration options controlling the resolution of the clock,
+ * CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION and
+ * CYGNUM_KERNEL_COUNTERS_RTC_PERIOD. Different targets require
+ * different default values, and the current configuration tool cannot
+ * deal with this yet. Also the exact details of the resolution and
+ * period values are still subject to change.
+ *
+ * To allow the clock settings to be controlled in some fashion,
+ * there is a configuration option to override the default settings.
+ * If this option is enabled then the resolution and period
+ * #define's will come from configuration options (which do not
+ * necessarily have sensible defaults, and which are not validated).
+ * Otherwise the platform-specific numbers below are used. On
+ * hardware this result in 100 clock interrupts every second.
+ * For simulators slightly different values are used, so that the
+ * various test cases run faster.
+ */
+
+#ifdef CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE
+
+# define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION \
+        { CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_NUMERATOR, \
+          CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_DENOMINATOR }
+
+# define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_PERIOD
+
+#else /* CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE */
+
+#if defined(CYG_HAL_MN10300_STDEVAL1)
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       150000
+
+#endif
+#if defined(CYG_HAL_MN10300_SIM)
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       9999
+
+#endif
+
+#if defined(CYG_HAL_MIPS_JMR3904)
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       15360
+
+#endif
+
+#if defined(CYG_HAL_MIPS_SIM)
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       999
+
+#endif
+
+#if defined(CYG_HAL_POWERPC_MP860)
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       20625
+
+#endif
+
+
+#ifndef CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION
+
+#define CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION   {1000000000, 100}
+#define CYGNUM_KERNEL_COUNTERS_RTC_PERIOD       9999
+
+#endif
+
+#endif /* CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE */
+
+/* ---------------------------------------------------------------------
+ * Thread-related miscellania.
+ * 
+ * These options provide for an assertion that the count value for counted
+ * thread wakeups or for thread suspends do not exceed set limits.  This is
+ * to help with debugging, to allow a runaaway loop, for example, to be
+ * detected more easily.
+ * 
+ * If the option is not defined, no assert is included.  Whether asserts
+ * are themselves included depends on infrastructure configury in infra.h
+ *
+ * It is hoped that these defaults are helpful rather than interfering.
+ */
+#define CYGNUM_KERNEL_MAX_SUSPEND_COUNT_ASSERT 		(500)
+#define CYGNUM_KERNEL_MAX_COUNTED_WAKE_COUNT_ASSERT 	(500)
+
+/*
+ * If the scheduler configuration only has a single priority level,
+ * then the idle thread must yield each time around its loop.
+ */
+
+#if CYGNUM_KERNEL_SCHED_PRIORITIES == 1
+#  define CYGIMP_IDLE_THREAD_YIELD
+#endif
+
+/*
+ * Per thread data options. Per thread data suuport is based loosely
+ * on that define by POSIX. Each thread has an array of slots, up to
+ * CYGNUM_KERNEL_THREADS_DATA_MAX, that may contain data. Some of the
+ * slots have been preallocated to specific packages. Others may be
+ * allocated dynamically.
+ */
+
+#define CYGNUM_KERNEL_THREADS_DATA_KERNEL       0
+#define CYGNUM_KERNEL_THREADS_DATA_ITRON        1
+#define CYGNUM_KERNEL_THREADS_DATA_LIBC         2
+#define CYGNUM_KERNEL_THREADS_DATA_POSIX        3
+
+#define CYGNUM_KERNEL_THREADS_DATA_ALL          0xF
+
+/*
+ * Some consistency checks.
+ */
+#if defined(CYGFUN_KERNEL_THREADS_TIMER) && !defined(CYGVAR_KERNEL_COUNTERS_CLOCK)
+# error "Cannot have Thread Timers without Real Time Clock"
+#endif
+
+#if defined(CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT) && !defined(CYGVAR_KERNEL_THREADS_LIST)
+# error "GDB thread support requires a list of all known threads."
+#endif
+
+/* ---------------------------------------------------------------------
+ * Synchronization primitives miscellania.
+ *
+ * These lines should not be edited by users.
+ */
+#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE
+# define CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE
+#endif
+#if defined(CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE) && !defined(CYGSEM_KERNEL_SCHED_MLQUEUE)
+# error "Priority inheritance can only be enabled if the mlqueue scheduler is used."
+#endif
+
+/* ---------------------------------------------------------------------
+ * This code allows the kernel build to be configured as a GDB
+ * stub ROM monitor. It is only intended for internal use.
+ */
+
+/*
+ * BLV: This code must be kept commented out for now, as it can
+ * confuse the configuration tool. The correct solution is to have a
+ * standard configuration for the system as represented by e.g. a
+ * .ptest file which does the right thing. A ROM monitor is an
+ * application, and application-specific configuration stuff should
+ * not live in the master header file.
+ */
+
+/* 
+#undef CYG_HAL_ROM_MONITOR
+
+#ifdef CYG_HAL_ROM_MONITOR
+
+#undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
+#undef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
+#undef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
+#undef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING
+#undef CYGIMP_KERNEL_INTERRUPTS_CHAIN
+#undef CYGVAR_KERNEL_COUNTERS_CLOCK
+#undef CYGFUN_KERNEL_THREADS_TIMER
+#undef CYGPKG_KERNEL_EXCEPTIONS
+#undef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE
+#undef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE
+#undef CYGPKG_KERNEL_INSTRUMENT
+#undef CYGDBG_INFRA_DIAG_USE_DEVICE     // now lives in infra
+
+#define CYGDBG_KERNEL_DEBUG_GDB_INCLUDE_STUBS
+
+#endif
+*/
+
+/* -------------------------------------------------------------------*/
+
+#endif  /* ifdef CYGPKG_KERNEL */
+
+/* -------------------------------------------------------------------*/
+#endif  /* CYGONCE_PKGCONF_KERNEL_H */
+/* EOF kernel.h */