blob: 55eca15c61b73f0874d417322f5bf519e93cee76 (
plain) (
tree)
|
|
/* system.h
*
* This include file contains information that is included in every
* function in the executive. This must be the first include file
* included in all internal RTEMS files.
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
#ifndef __RTEMS_SYSTEM_h
#define __RTEMS_SYSTEM_h
#ifdef __cplusplus
extern "C" {
#endif
/*
* The target options include file defines all target dependent
* parameters for this build of RTEMS. It must be included
* first so the basic macro definitions are in place.
*/
/*
* FIXME: cpuopts.h should be included here.
*/
#if defined(_AM29K) \
|| defined(__hppa__) \
|| defined(__h8300__) \
|| defined(__i960__) \
|| defined(__mc68000__) \
|| defined(__sh__) \
|| defined(__sparc__) \
|| defined(__i386__)
/* these cpus are ready to apply cpuopts.h */
#include <rtems/score/cpuopts.h>
#else
/* fallback to targopts.h for mips and powerpc */
#include <rtems/score/targopts.h>
#endif
/*
* The following insures that all data is declared in the space
* of the initialization routine for either the Initialization Manager
* or the initialization file for the appropriate API. It is
* referenced as "external" in every other file.
*/
#ifdef SCORE_INIT
#undef SCORE_EXTERN
#define SCORE_EXTERN
#else
#undef SCORE_EXTERN
#define SCORE_EXTERN extern
#endif
#ifdef SAPI_INIT
#undef SAPI_EXTERN
#define SAPI_EXTERN
#else
#undef SAPI_EXTERN
#define SAPI_EXTERN extern
#endif
#ifdef RTEMS_API_INIT
#undef RTEMS_EXTERN
#define RTEMS_EXTERN
#else
#undef RTEMS_EXTERN
#define RTEMS_EXTERN extern
#endif
#ifdef POSIX_API_INIT
#undef POSIX_EXTERN
#define POSIX_EXTERN
#else
#undef POSIX_EXTERN
#define POSIX_EXTERN extern
#endif
#ifdef ITRON_API_INIT
#undef ITRON_EXTERN
#define ITRON_EXTERN
#else
#undef ITRON_EXTERN
#define ITRON_EXTERN extern
#endif
/*
* The following (in conjunction with compiler arguments) are used
* to choose between the use of static inline functions and macro
* functions. The static inline implementation allows better
* type checking with no cost in code size or execution speed.
*/
#ifdef USE_INLINES
# ifdef __GNUC__
# define RTEMS_INLINE_ROUTINE static __inline__
# else
# define RTEMS_INLINE_ROUTINE static inline
# endif
#else
# define RTEMS_INLINE_ROUTINE
#endif
/*
* Include a base set of files.
*/
/*
* XXX: Eventually proc_ptr needs to disappear!!!
*/
typedef void * proc_ptr;
/*
* Define NULL
*/
#ifndef NULL
#define NULL 0 /* NULL value */
#endif
/*
* Boolean constants
*/
#if !defined( TRUE ) || (TRUE != 1)
#undef TRUE
#define TRUE (1)
#endif
#if !defined( FALSE ) || (FALSE != 0)
#undef FALSE
#define FALSE (0)
#endif
#include <rtems/score/cpu.h> /* processor specific information */
#define stringify( _x ) # _x
#define RTEMS_offsetof(type, field) \
((unsigned32) &(((type *) 0)->field))
/*
* The following is the extern for the RTEMS version string.
* The contents of this string are CPU specific.
*/
extern const char _RTEMS_version[]; /* RTEMS version string */
extern const char _Copyright_Notice[]; /* RTEMS copyright string */
/*
* The following defines the CPU dependent information table.
*/
SCORE_EXTERN rtems_cpu_table _CPU_Table; /* CPU dependent info */
/*
* Macros to access CPU Table fields required by ALL ports.
*
* NOTE: Similar macros to access port specific fields in in the
* appropriate cpu.h file.
*/
#define rtems_cpu_configuration_get_table() \
(&_CPU_Table)
#define rtems_cpu_configuration_get_pretasking_hook() \
(_CPU_Table.pretasking_hook)
#define rtems_cpu_configuration_get_predriver_hook() \
(_CPU_Table.predriver_hook)
#define rtems_cpu_configuration_get_postdriver_hook() \
(_CPU_Table.postdriver_hook)
#define rtems_cpu_configuration_get_idle_task() \
(_CPU_Table.idle_task)
#define rtems_cpu_configuration_get_do_zero_of_workspace() \
(_CPU_Table.do_zero_of_workspace)
#define rtems_cpu_configuration_get_idle_task_stack_size() \
(_CPU_Table.idle_task_stack_size)
#define rtems_cpu_configuration_get_interrupt_stack_size() \
(_CPU_Table.interrupt_stack_size)
#define rtems_cpu_configuration_get_extra_mpci_receive_server_stack() \
(_CPU_Table.extra_mpci_receive_server_stack)
#define rtems_cpu_configuration_get_stack_allocate_hook() \
(_CPU_Table.stack_allocate_hook)
#define rtems_cpu_configuration_get_stack_free_hook() \
(_CPU_Table.stack_free_hook)
/*
* XXX weird RTEMS stuff that probably should be somewhere else.
*/
#define RTEMS_MAXIMUM_NAME_LENGTH sizeof(rtems_name)
#ifdef __cplusplus
}
#endif
#endif
/* end of include file */
|