diff packages/hal/common/current/include/pkgconf/hal.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/hal/common/current/include/pkgconf/hal.h
@@ -0,0 +1,445 @@
+#ifndef CYGONCE_PKGCONF_HAL_H
+#define CYGONCE_PKGCONF_HAL_H
+// ====================================================================
+//
+//	pkgconf/hal.h
+//
+//	HAL 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 HAL configuration options.
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+// ====================================================================
+
+/* ---------------------------------------------------------------------
+ * Some of the HAL configuration options depend on global options,
+ * so it is necessary to include the global options first.
+ */
+
+#include <pkgconf/system.h>
+
+/* ---------------------------------------------------------------------
+   Define an overall package for the HAL. All other HAL packages
+   live below this.
+
+   {{CFG_DATA
+
+   cdl_package CYGPKG_HAL {
+       display "eCos HAL"
+       type    dummy
+       description "
+           The eCos HAL package provide a porting layer for
+           higher-level parts of the system such as the kernel and the
+           C library. Each installation should have HAL packages for
+           one or more architectures, and for each architecture there
+           may be one or more supported platforms. It is necessary to
+           select one target architecture and one platform for that
+           architecture. There are also a number of configuration
+           options that are common to all HAL packages."
+	   doc ref/ecos-ref/the-ecos-hardware-abstraction-layer-hal.html
+   }
+
+   }}CFG_DATA */
+
+/* ---------------------------------------------------------------------
+ * The platform-independent HAL configuration options go here,
+ * inside a component CYGPKG_HAL_COMMON. In practice some of the
+ * options are not completely platform-independent, but they are
+ * likely to be available on the vast majority of platforms and
+ * it is more convenient to provide them by default and let the
+ * appropriate platforms disable them (probably via a suitable
+ * interface).
+ *
+ * The common component is subdivided into components for
+ * interrupt handling, thread context, and rom monitor/gdb support.
+
+ {{CFG_DATA
+
+ cdl_component CYGPKG_HAL_COMMON {
+     display "Platform-independent HAL options"
+     parent  CYGPKG_HAL
+     type    dummy
+     description "
+         A number of configuration options are common to most or all
+         HAL packages, for example options controlling how much state
+         should be saved during a context switch. The implementations
+         of these options will vary from architecture to architecture."
+ }
+
+ cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT {
+     display  "Provide eCos kernel support"
+     parent   CYGPKG_HAL_COMMON
+     requires CYGPKG_KERNEL
+     description "
+         The HAL can be configured to either support the full eCos
+         kernel, or to support only very simple applications which do
+         not require a full kernel. If kernel support is not required
+         then some of the startup, exception, and interrupt handling
+         code can be eliminated."
+ }
+
+ }}CFG_DATA */
+#define CYGFUN_HAL_COMMON_KERNEL_SUPPORT
+
+/* {{CFG_DATA
+   
+ cdl_component CYGPKG_HAL_COMMON_INTERRUPTS {
+     display "HAL interrupt handling"
+     parent  CYGPKG_HAL_COMMON
+     type    dummy
+     description "
+         A number of configuration options related to interrupt
+         handling are common to most or all HAL packages, even though
+         the implementations will vary from architecture to
+         architecture."
+ }
+
+ cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK {
+     display      "Use separate stack for interrupts"
+     parent       CYGPKG_HAL_COMMON_INTERRUPTS
+     description  "
+         When an interrupt occurs this interrupt can be handled either
+         on the current stack or on a separate stack maintained by the
+         HAL. Using a separate stack requires a small number of extra
+         instructions in the interrupt handling code, but it has the
+         advantage that it is no longer necessary to allow extra space
+         in every thread stack for the interrupt handlers. The amount
+         of extra space required depends on the interrupt handlers
+         that are being used."
+ }
+
+ # NOTE: various parts of the system such as device drivers should
+ # impose lower bounds on this. The actual lower bound depends on a
+ # platform-specific value for startup overheads, and the minimum
+ # sizes specified by the various device drivers. If interrupts are
+ # not handled on a separate stack then only the startup overheads
+ # are significant. If nested interrupts are disabled then the
+ # lower bound is the maximum of the individual sizes, otherwise
+ # it is the sum of these sizes. It is not currently possible to
+ # express a relationship like this.
+ cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE {
+     display        "Interrupt stack size"
+     parent         CYGPKG_HAL_COMMON_INTERRUPTS
+     type           count
+     legal_values   1024 to 1048576
+     description "
+         This configuration option specifies the stack size in bytes
+         for the interrupt stack. Typically this should be a multiple
+         of 16, but the exact requirements will vary from architecture
+         to architecture. The interrupt stack serves two separate
+         purposes. It is used as the stack during system
+         initialization. In addition, if the interrupt system is
+         configured to use a separate stack then all interrupts will
+         be processed on this stack. The exact memory requirements
+         will vary from application to application, and will depend
+         heavily on whether or not other interrupt-related options,
+         for example nested interrupts, are enabled."
+ }
+
+ cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING {
+     display "Allow nested interrupts"
+     parent  CYGPKG_HAL_COMMON_INTERRUPTS
+     description "
+         When an interrupt occurs the HAL interrupt handling code can
+         either leave interrupts disabled for the duration of the
+         interrupt handling code, or by doing some extra work it can
+         reenable interrupts before invoking the interrupt handler and
+         thus allow nested interrupts to happen. If all the interrupt
+         handlers being used are small and do not involve any loops
+         then it is usually better to disallow nested interrupts.
+         However if any of the interrupt handlers are more complicated
+         than nested interrupts will usually be required."
+ }
+
+ cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
+     display "Save minimum context on interrupt"
+     parent  CYGPKG_HAL_COMMON_INTERRUPTS
+     description "
+         The HAL interrupt handling code can exploit the calling conventions
+         defined for a given architecture to reduce the amount of state
+         that has to be saved. Generally this improves performance and
+         reduces code size. However it can make source-level debugging
+         more difficult.
+     "
+ }
+ 
+ cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN {
+     display            "Chain all interrupts together"
+     parent             CYGPKG_HAL_COMMON_INTERRUPTS
+     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."
+ }
+
+ }}CFG_DATA
+
+*/
+
+#define CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
+#define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096
+#undef  CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING
+#define CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
+#undef  CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
+
+
+/* {{CFG_DATA
+   
+ cdl_component CYGPKG_HAL_COMMON_CONTEXT {
+     display "HAL context switch support"
+     parent  CYGPKG_HAL_COMMON
+     type    dummy
+     description "
+         A number of configuration options related to thread contexts
+         are common to most or all HAL packages, even though the
+         implementations will vary from architecture to architecture."
+ }
+
+ cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM {
+     display "Use minimum thread context"
+     parent  CYGPKG_HAL_COMMON_CONTEXT
+     description "
+         The thread context switch code can exploit the calling conventions
+         defined for a given architecture to reduce the amount of state
+         that has to be saved during a context switch. Generally this
+         improves performance and reduces code size. However it can make
+         source-level debugging more difficult."
+ }
+ 
+ }}CFG_DATA */
+#define CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
+
+/* {{CFG_DATA
+
+  # NOTE: The requirement for kernel exception support is bogus in that
+  # the user can supply a deliver_exception function herself. In that
+  # case, however, it is easy to force the kernel option off while leaving
+  # this one on.  Having the requirement prevents accidental invalid
+  # configurations of the kernel.
+  cdl_option CYGPKG_HAL_EXCEPTIONS {
+      display  "HAL exception support"
+      parent   CYGPKG_HAL_COMMON
+      requires CYGPKG_KERNEL_EXCEPTIONS
+      description "
+          When a processor exception occurs, for example an attempt to
+          execute an illegal instruction or to perform a divide by
+          zero, this exception may be handled in a number of different
+          ways. If the target system has gdb support then typically
+          the exception will be handled by gdb code. Otherwise if the
+          HAL exception support is enabled then the HAL will invoke a
+          routine deliver_exception(). Typically this routine will be
+          provided by the eCos kernel, but it is possible for
+          application code to provide its own implementation. If the
+          HAL exception support is not enabled and a processor
+          exception occurs then the behaviour of the system is
+          undefined.
+      "  
+   }
+
+   }}CFG_DATA */
+#define CYGPKG_HAL_EXCEPTIONS
+
+
+/* ---------------------------------------------------------------------
+ * Options related to source-level debugging and diagnostics.
+
+ {{CFG_DATA
+
+ cdl_component CYGPKG_HAL_DEBUG {
+     display    "Source-level debugging support"
+     type       dummy
+     parent     CYGPKG_HAL
+     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 HAL."
+ }
+
+ cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS {
+     display    "Include GDB stubs in HAL"
+     parent     CYGPKG_HAL_DEBUG
+     requires   !CYGPKG_HAL_POWERPC_SIM
+     requires   !CYGPKG_HAL_MN10300_SIM
+     requires   !CYGPKG_HAL_TX39_SIM
+     requires   !CYGPKG_HAL_MN10300_STDEVAL1
+     description "
+         This option causes a set of GDB stubs to be included into the
+         system. On some target systems the GDB support will be
+         provided by other means, for example by a ROM monitor. On
+         other targets, especially when building a ROM-booting system,
+         the necessary support has to go into the target library
+         itself."
+ }
+
+ cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT {
+     display    "Include GDB multi-threading debug support"
+     parent     CYGPKG_HAL_DEBUG
+     requires   CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+     description "
+         This option enables some extra HAL code which is needed
+         to support multi-threaded source level debugging."
+ }
+
+ cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT {
+     display    "Include GDB external break support"
+     parent     CYGPKG_HAL_DEBUG
+     requires   CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+     description "
+        This option causes the GDB stub to add a serial interrupt handler
+        which will listen for GDB break packets. This lets you stop the
+        target asynchronously when using GDB, usually by hitting Control+C
+        or pressing the STOP button."
+ }
+
+ 
+   }}CFG_DATA */
+
+#undef  CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+#undef  CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
+
+#define  CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
+
+/*
+ * NOTE:
+ *
+ * Right now there is no easy way to express the ROM monitor options
+ * in CDL.  The problem is that the default values depend on the
+ * target platform and on the desired start-up. It is possible to
+ * produce something that will work correctly in a clean world, but
+ * not something more general.
+ *
+ * One possibility is to duplicate the relevant options in the various
+ * platform HAL packages, renaming them to avoid collisions. This appears
+ * to be feasible with the current sources because the rom monitor options
+ * are only referenced in the HAL packages. It is not clear whether or not
+ * this will continue to be the case.  */
+
+/*
+ * Some development boards come with a ROM monitor that provides
+ * download and debug facilities. Such ROMs may also supply interrupt
+ * redirection and IO facilities. The following option causes the HAL
+ * to integrate with the ROM monitor present on the configured
+ * platform. If this option is not defined, the monitor will not be
+ * used.  Where there is more than one ROM monitor for a specific
+ * platform, a subsidiary define should identify the appropriate monitor
+ * type.
+ */
+
+//#define CYG_HAL_USE_ROM_MONITOR
+
+#if defined(CYG_HAL_TX39_JMR3904) && defined(CYG_HAL_STARTUP_RAM)
+#define CYG_HAL_USE_ROM_MONITOR
+#define CYG_HAL_USE_ROM_MONITOR_CYGMON
+#endif
+#if defined(CYG_HAL_MN10300_STDEVAL1) && defined(CYG_HAL_STARTUP_RAM)
+#define CYG_HAL_USE_ROM_MONITOR
+#define CYG_HAL_USE_ROM_MONITOR_CYGMON
+#endif
+
+#ifdef CYG_HAL_USE_ROM_MONITOR
+
+//#define CYG_HAL_USE_ROM_MONITOR_SLOAD
+//#define CYG_HAL_USE_ROM_MONITOR_GDB_STUBS
+//#define CYG_HAL_USE_ROM_MONITOR_CYGMON
+
+#endif
+
+/* ---------------------------------------------------------------------
+ *
+ * The section below deals with some inferences about package/feature
+ * presence that are not yet supported by the full external configuration
+ * tool; they are NOT user configuration, and you should NOT edit them.
+ */
+
+/*
+ * Initialization options.
+ *
+ * WARNING: this option should not be enabled by end users. It
+ * makes use of an experimental facility in g++ which has not been
+ * generally distributed.
+ *
+ * The USE_INIT_PRIORITY option enables the use of the g++ init_priority
+ * attribute which allows the order of execution of constructors of
+ * static objects to be controlled. This option is not yet required by
+ * the current kernel, but it will be required by future versions.
+ */
+
+#undef CYG_KERNEL_USE_INIT_PRIORITY
+
+#ifdef CYG_HAL_TX39
+#define CYG_KERNEL_USE_INIT_PRIORITY
+#endif
+#ifdef CYG_HAL_MN10300
+#define CYG_KERNEL_USE_INIT_PRIORITY
+#endif
+#ifdef CYG_HAL_POWERPC
+#define CYG_KERNEL_USE_INIT_PRIORITY
+#endif
+
+/* 
+ * CYG_HAL_<TARGET> and CYG_HAL_<TARGET>_<PLATFORM> are generated by
+ * pkgconf, using the information from the targets file.
+ *
+ * NOTE: Currently the code also needs these #defines.
+ */
+#ifdef CYG_HAL_MN10300_STDEVAL1
+# define CYG_HAL_MN10300_MN103002
+#endif
+#ifdef CYG_HAL_MN10300_SIM
+# define CYG_HAL_MN10300_MN103002
+#endif
+
+#ifdef CYG_HAL_POWERPC_COGENT
+# define CYG_HAL_POWERPC_MP860
+#endif
+#ifdef CYG_HAL_POWERPC_SIM
+# define CYG_HAL_POWERPC_MP860
+#endif
+
+#ifdef CYG_HAL_TX39_JMR3904
+# define CYG_HAL_MIPS
+# define CYG_HAL_MIPS_TX39
+# define CYG_HAL_MIPS_TX3904
+# define CYG_HAL_MIPS_JMR3904
+#endif
+#ifdef CYG_HAL_TX39_SIM
+# define CYG_HAL_MIPS
+# define CYG_HAL_MIPS_TX39
+# define CYG_HAL_MIPS_SIM
+#endif
+
+/* -------------------------------------------------------------------*/
+#endif  /* CYGONCE_PKGCONF_HAL_H */
+/* EOF hal.h */