diff options
Diffstat (limited to 'cpukit/score/include')
25 files changed, 1097 insertions, 381 deletions
diff --git a/cpukit/score/include/rtems/score/address.h b/cpukit/score/include/rtems/score/address.h index 0abd113f63..4877206801 100644 --- a/cpukit/score/include/rtems/score/address.h +++ b/cpukit/score/include/rtems/score/address.h @@ -52,21 +52,6 @@ STATIC INLINE void *_Addresses_Subtract_offset( ); /* - * _Addresses_Add - * - * DESCRIPTION: - * - * This function is used to add two addresses. It returns the - * resulting address. This address is typically converted to an - * access type before being used further. - */ - -STATIC INLINE void *_Addresses_Add ( - void *left, - void *right -); - -/* * _Addresses_Subtract * * DESCRIPTION: @@ -112,7 +97,7 @@ STATIC INLINE boolean _Addresses_Is_in_range ( void *limit ); -#include <rtems/address.inl> +#include <rtems/core/address.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/chain.h b/cpukit/score/include/rtems/score/chain.h index 06cc47cc65..35ac4dfa80 100644 --- a/cpukit/score/include/rtems/score/chain.h +++ b/cpukit/score/include/rtems/score/chain.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/address.h> +#include <rtems/core/address.h> /* * This is used to manage each element (node) which is placed @@ -422,7 +422,7 @@ STATIC INLINE boolean _Chain_Is_null_node( Chain_Node *the_node ); -#include <rtems/chain.inl> +#include <rtems/core/chain.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/context.h b/cpukit/score/include/rtems/score/context.h index 9b8ee92b04..58e497ae88 100644 --- a/cpukit/score/include/rtems/score/context.h +++ b/cpukit/score/include/rtems/score/context.h @@ -20,7 +20,7 @@ extern "C" { #endif -#include <rtems/cpu.h> +#include <rtems/core/cpu.h> /* * The following constant defines the number of bytes required diff --git a/cpukit/score/include/rtems/score/coremutex.h b/cpukit/score/include/rtems/score/coremutex.h new file mode 100644 index 0000000000..0682bbc1ea --- /dev/null +++ b/cpukit/score/include/rtems/score/coremutex.h @@ -0,0 +1,247 @@ +/* mutex.h + * + * This include file contains all the constants and structures associated + * with the Mutex Handler. A mutex is an enhanced version of the standard + * Dijkstra binary semaphore used to provide synchronization and mutual + * exclusion capabilities. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_CORE_MUTEX_h +#define __RTEMS_CORE_MUTEX_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> +#include <rtems/core/priority.h> +#include <rtems/core/watchdog.h> + +/* + * The following type defines the callout which the API provides + * to support global/multiprocessor operations on mutexes. + */ + +typedef void ( *CORE_mutex_API_mp_support_callout )( + Thread_Control *, + Objects_Id + ); + +/* + * Blocking disciplines for a mutex. + */ + +typedef enum { + CORE_MUTEX_DISCIPLINES_FIFO, + CORE_MUTEX_DISCIPLINES_PRIORITY, + CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT, + CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING +} CORE_mutex_Disciplines; + +/* + * Mutex handler return statuses. + */ + +typedef enum { + CORE_MUTEX_STATUS_SUCCESSFUL, + CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT, + CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED, + CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE, + CORE_MUTEX_WAS_DELETED, + CORE_MUTEX_TIMEOUT +} CORE_mutex_Status; + +/* + * Locked and unlocked values + */ + +#define CORE_MUTEX_UNLOCKED 1 +#define CORE_MUTEX_LOCKED 0 + +/* + * The following defines the control block used to manage the + * attributes of each mutex. + */ + +typedef struct { + boolean allow_nesting; + CORE_mutex_Disciplines discipline; + Priority_Control priority_ceiling; +} CORE_mutex_Attributes; + +/* + * The following defines the control block used to manage each mutex. + */ + +typedef struct { + Thread_queue_Control Wait_queue; + CORE_mutex_Attributes Attributes; + unsigned32 lock; + unsigned32 nest_count; + Thread_Control *holder; + Objects_Id holder_id; +} CORE_mutex_Control; + +/* + * _CORE_mutex_Initialize + * + * DESCRIPTION: + * + * This routine initializes the mutex based on the parameters passed. + */ + +void _CORE_mutex_Initialize( + CORE_mutex_Control *the_mutex, + Objects_Classes the_class, + CORE_mutex_Attributes *the_mutex_attributes, + unsigned32 initial_lock, + Thread_queue_Extract_callout proxy_extract_callout +); + +/* + * _CORE_mutex_Seize + * + * DESCRIPTION: + * + * This routine attempts to receive a unit from the_mutex. + * If a unit is available or if the wait flag is FALSE, then the routine + * returns. Otherwise, the calling task is blocked until a unit becomes + * available. + */ + +void _CORE_mutex_Seize( + CORE_mutex_Control *the_mutex, + Objects_Id id, + boolean wait, + Watchdog_Interval timeout +); + +/* + * _CORE_mutex_Surrender + * + * DESCRIPTION: + * + * This routine frees a unit to the mutex. If a task was blocked waiting for + * a unit from this mutex, then that task will be readied and the unit + * given to that task. Otherwise, the unit will be returned to the mutex. + */ + +CORE_mutex_Status _CORE_mutex_Surrender( + CORE_mutex_Control *the_mutex, + Objects_Id id, + CORE_mutex_API_mp_support_callout api_mutex_mp_support +); + +/* + * _CORE_mutex_Flush + * + * DESCRIPTION: + * + * This routine assists in the deletion of a mutex by flushing the associated + * wait queue. + */ + +void _CORE_mutex_Flush( + CORE_mutex_Control *the_mutex, + Thread_queue_Flush_callout remote_extract_callout, + unsigned32 status +); + +/* + * _CORE_mutex_Is_locked + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex specified is locked and FALSE + * otherwise. + */ + +STATIC INLINE boolean _CORE_mutex_Is_locked( + CORE_mutex_Control *the_mutex +); + +/* + * _CORE_mutex_Is_fifo + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex's wait discipline is FIFO and FALSE + * otherwise. + */ + +STATIC INLINE boolean _CORE_mutex_Is_fifo( + CORE_mutex_Attributes *the_attribute +); + +/* + * _CORE_mutex_Is_priority + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex's wait discipline is PRIORITY and + * FALSE otherwise. + */ + +STATIC INLINE boolean _CORE_mutex_Is_priority( + CORE_mutex_Attributes *the_attribute +); + +/* + * _CORE_mutex_Is_inherit_priority + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex's wait discipline is + * INHERIT_PRIORITY and FALSE otherwise. + */ + +STATIC INLINE boolean _CORE_mutex_Is_inherit_priority( + CORE_mutex_Attributes *the_attribute +); + +/* + * _CORE_mutex_Is_priority_ceiling + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex's wait discipline is + * PRIORITY_CEILING and FALSE otherwise. + */ + +STATIC INLINE boolean _CORE_mutex_Is_priority_ceiling( + CORE_mutex_Attributes *the_attribute +); + +/* + * _CORE_mutex_Is_nesting_allowed + * + * DESCRIPTION: + * + * This routine returns TRUE if the mutex allows a task to obtain a + * semaphore more than once and nest. + */ + +STATIC INLINE boolean _CORE_mutex_Is_nesting_allowed( + CORE_mutex_Attributes *the_attribute +); + +#include <rtems/core/coremutex.inl> + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ + diff --git a/cpukit/score/include/rtems/score/coresem.h b/cpukit/score/include/rtems/score/coresem.h new file mode 100644 index 0000000000..0fcd8cd0b9 --- /dev/null +++ b/cpukit/score/include/rtems/score/coresem.h @@ -0,0 +1,179 @@ +/* core_sem.h + * + * This include file contains all the constants and structures associated + * with the Counting Semaphore Handler. A counting semaphore is the + * standard Dijkstra binary semaphore used to provide synchronization + * and mutual exclusion capabilities. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_CORE_COUNTING_SEMAPHORE_h +#define __RTEMS_CORE_COUNTING_SEMAPHORE_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> +#include <rtems/core/priority.h> +#include <rtems/core/watchdog.h> + +/* + * The following type defines the callout which the API provides + * to support global/multiprocessor operations on semaphores. + */ + +typedef void ( *CORE_semaphore_API_mp_support_callout )( + Thread_Control *, + Objects_Id + ); + +/* + * Blocking disciplines for a semaphore. + */ + +typedef enum { + CORE_SEMAPHORE_DISCIPLINES_FIFO, + CORE_SEMAPHORE_DISCIPLINES_PRIORITY +} CORE_semaphore_Disciplines; + +/* + * Core Semaphore handler return statuses. + */ + +typedef enum { + CORE_SEMAPHORE_STATUS_SUCCESSFUL, + CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT, + CORE_SEMAPHORE_WAS_DELETED, + CORE_SEMAPHORE_TIMEOUT +} CORE_semaphore_Status; + +/* + * The following defines the control block used to manage the + * attributes of each semaphore. + */ + +typedef struct { + CORE_semaphore_Disciplines discipline; +} CORE_semaphore_Attributes; + +/* + * The following defines the control block used to manage each + * counting semaphore. + */ + +typedef struct { + Thread_queue_Control Wait_queue; + CORE_semaphore_Attributes Attributes; + unsigned32 count; +} CORE_semaphore_Control; + +/* + * _CORE_semaphore_Initialize + * + * DESCRIPTION: + * + * This routine initializes the semaphore based on the parameters passed. + */ + +void _CORE_semaphore_Initialize( + CORE_semaphore_Control *the_semaphore, + Objects_Classes the_class, + CORE_semaphore_Attributes *the_semaphore_attributes, + unsigned32 initial_value, + Thread_queue_Extract_callout proxy_extract_callout +); + +/* + * _CORE_semaphore_Seize + * + * DESCRIPTION: + * + * This routine attempts to receive a unit from the_semaphore. + * If a unit is available or if the wait flag is FALSE, then the routine + * returns. Otherwise, the calling task is blocked until a unit becomes + * available. + */ + +void _CORE_semaphore_Seize( + CORE_semaphore_Control *the_semaphore, + Objects_Id id, + boolean wait, + Watchdog_Interval timeout +); + +/* + * _CORE_semaphore_Surrender + * + * DESCRIPTION: + * + * This routine frees a unit to the semaphore. If a task was blocked waiting + * for a unit from this semaphore, then that task will be readied and the unit + * given to that task. Otherwise, the unit will be returned to the semaphore. + */ + +CORE_semaphore_Status _CORE_semaphore_Surrender( + CORE_semaphore_Control *the_semaphore, + Objects_Id id, + CORE_semaphore_API_mp_support_callout api_semaphore_mp_support +); + +/* + * _CORE_semaphore_Flush + * + * DESCRIPTION: + * + * This routine assists in the deletion of a semaphore by flushing the + * associated wait queue. + */ + +void _CORE_semaphore_Flush( + CORE_semaphore_Control *the_semaphore, + Thread_queue_Flush_callout remote_extract_callout, + unsigned32 status +); + +/* + * _CORE_semaphore_Get_count + * + * DESCRIPTION: + * + * This routine returns the current count associated with the semaphore. + */ + +STATIC INLINE unsigned32 _CORE_semaphore_Get_count( + CORE_semaphore_Control *the_semaphore +); + +/* + * _CORE_semaphore_Is_priority + * + * DESCRIPTION: + * + * This function returns TRUE if the priority attribute is + * enabled in the attribute_set and FALSE otherwise. + */ + +STATIC INLINE boolean _CORE_semaphore_Is_priority( + CORE_semaphore_Attributes *the_attribute +); + +#include <rtems/core/coresem.inl> + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ + diff --git a/cpukit/score/include/rtems/score/heap.h b/cpukit/score/include/rtems/score/heap.h index 9eb348a760..bf4a8dde6e 100644 --- a/cpukit/score/include/rtems/score/heap.h +++ b/cpukit/score/include/rtems/score/heap.h @@ -386,7 +386,7 @@ STATIC INLINE unsigned32 _Heap_Build_flag ( unsigned32 in_use_flag ); -#include <rtems/heap.inl> +#include <rtems/core/heap.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/interr.h b/cpukit/score/include/rtems/score/interr.h new file mode 100644 index 0000000000..c1088a9dff --- /dev/null +++ b/cpukit/score/include/rtems/score/interr.h @@ -0,0 +1,93 @@ +/* interr.h + * + * This include file contains constants and prototypes related + * to the Internal Error Handler. + * + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id# + */ + +#ifndef __RTEMS_INTERNAL_ERROR_h +#define __RTEMS_INTERNAL_ERROR_h + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This type lists the possible sources from which an error + * can be reported. + */ + +typedef enum { + INTERNAL_ERROR_CORE, + INTERNAL_ERROR_RTEMS_API +} Internal_errors_Source; + +/* + * A list of errors which are generated internally by the executive core. + */ + +typedef enum { + INTERNAL_ERROR_NO_CONFIGURATION_TABLE, + INTERNAL_ERROR_NO_CPU_TABLE, + INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS, + INTERNAL_ERROR_TOO_LITTLE_WORKSPACE, + INTERNAL_ERROR_WORKSPACE_ALLOCATION, + INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL, + INTERNAL_ERROR_THREAD_EXITTED, + INTERNAL_ERROR_INCONSISTENT_MP_INFORMATION, + INTERNAL_ERROR_INVALID_NODE, + INTERNAL_ERROR_NO_MPCI, + INTERNAL_ERROR_BAD_PACKET, + INTERNAL_ERROR_OUT_OF_PACKETS, + INTERNAL_ERROR_OUT_OF_GLOBAL_OBJECTS, + INTERNAL_ERROR_OUT_OF_PROXIES, + INTERNAL_ERROR_INVALID_GLOBAL_ID +} Internal_errors_Core_list; + +/* + * This type holds the fatal error information. + */ + +typedef struct { + Internal_errors_Source the_source; + boolean is_internal; + unsigned32 the_error; +} Internal_errors_Information; + +/* + * When a fatal error occurs, the error information is stored here. + */ + +EXTERN Internal_errors_Information Internal_errors_What_happened; + +/* + * _Internal_error_Occurred + * + * DESCRIPTION: + * + * This routine is invoked when the application or the executive itself + * determines that a fatal error has occurred. + */ + +void volatile _Internal_error_Occurred( + Internal_errors_Source the_source, + boolean is_internal, + unsigned32 the_error +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/score/include/rtems/score/isr.h b/cpukit/score/include/rtems/score/isr.h index 77c3f8663e..4bbc3c7aff 100644 --- a/cpukit/score/include/rtems/score/isr.h +++ b/cpukit/score/include/rtems/score/isr.h @@ -16,8 +16,8 @@ * $Id$ */ -#ifndef __RTEMS_ISR_h -#define __RTEMS_ISR_h +#ifndef __ISR_h +#define __ISR_h #ifdef __cplusplus extern "C" { @@ -31,24 +31,23 @@ extern "C" { typedef unsigned32 ISR_Level; /* - * The following type defines the control block used to manage - * the vectors. + * The following type defines the type used to manage the vectors. */ -typedef unsigned32 rtems_vector_number; +typedef unsigned32 ISR_Vector_number; /* * Return type for ISR Handler */ -typedef void rtems_isr; +typedef void ISR_Handler; /* * Pointer to an ISR Handler */ -typedef rtems_isr ( *rtems_isr_entry )( - rtems_vector_number +typedef ISR_Handler ( *ISR_Handler_entry )( + ISR_Vector_number ); /* * The following is TRUE if signals have been sent to the currently @@ -65,11 +64,11 @@ EXTERN boolean _ISR_Signals_to_thread_executing; EXTERN unsigned32 _ISR_Nest_level; /* - * The following declares the RTEMS Vector Table. Application - * interrupt service routines are vectored by RTEMS via this table. + * The following declares the Vector Table. Application + * interrupt service routines are vectored by the ISR Handler via this table. */ -EXTERN rtems_isr_entry _ISR_Vector_table[CPU_INTERRUPT_NUMBER_OF_VECTORS]; +EXTERN ISR_Handler_entry _ISR_Vector_table[CPU_INTERRUPT_NUMBER_OF_VECTORS]; /* * _ISR_Handler_initialization @@ -79,7 +78,7 @@ EXTERN rtems_isr_entry _ISR_Vector_table[CPU_INTERRUPT_NUMBER_OF_VECTORS]; * This routine performs the initialization necessary for this handler. */ -STATIC INLINE void _ISR_Handler_initialization ( void ); +void _ISR_Handler_initialization ( void ); /* * _ISR_Disable @@ -154,6 +153,17 @@ STATIC INLINE boolean _ISR_Is_in_progress( void ); _CPU_ISR_install_vector( _vector, _new_handler, _old_handler ) /* + * _ISR_Get_level + * + * DESCRIPTION: + * + * This routine returns the current interrupt level. + */ + +#define _ISR_Get_level() \ + _CPU_ISR_Get_level() + +/* * _ISR_Set_level * * DESCRIPTION: @@ -176,7 +186,7 @@ STATIC INLINE boolean _ISR_Is_in_progress( void ); */ STATIC INLINE boolean _ISR_Is_vector_number_valid ( - rtems_vector_number vector + ISR_Vector_number vector ); /* @@ -197,7 +207,7 @@ STATIC INLINE boolean _ISR_Is_valid_user_handler ( * * DESCRIPTION: * - * This routine is the RTEMS interrupt dispatcher. ALL interrupts + * This routine is the interrupt dispatcher. ALL interrupts * are vectored to this routine so that minimal context can be saved * and setup performed before the application's high-level language * interrupt service routine is invoked. After the application's @@ -229,7 +239,7 @@ void _ISR_Handler( void ); void _ISR_Dispatch( void ); -#include <rtems/isr.inl> +#include <rtems/core/isr.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/mpci.h b/cpukit/score/include/rtems/score/mpci.h index ca06dd243b..06dc0015d4 100644 --- a/cpukit/score/include/rtems/score/mpci.h +++ b/cpukit/score/include/rtems/score/mpci.h @@ -14,20 +14,20 @@ * $Id$ */ -#ifndef __RTEMS_MPCI_h -#define __RTEMS_MPCI_h +#ifndef __MPCI_h +#define __MPCI_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/states.h> -#include <rtems/status.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/tqdata.h> -#include <rtems/watchdog.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> +#include <rtems/core/tqdata.h> +#include <rtems/core/watchdog.h> +#include <rtems/core/coresem.h> /* * The following defines the node number used when a broadcast is desired. @@ -45,6 +45,85 @@ extern "C" { #define MPCI_DEFAULT_TIMEOUT 0xFFFFFFFF /* + * The following records define the Multiprocessor Communications + * Interface (MPCI) Table. This table defines the user-provided + * MPCI which is a required part of a multiprocessor system. + * + * For non-blocking local operations that become remote operations, + * we need a timeout. This is a per-driver timeout: default_timeout + */ + +typedef void MPCI_Entry; + +typedef MPCI_Entry ( *MPCI_initialization_entry )( void ); + +typedef MPCI_Entry ( *MPCI_get_packet_entry )( + MP_packet_Prefix ** + ); + +typedef MPCI_Entry ( *MPCI_return_packet_entry )( + MP_packet_Prefix * + ); + +typedef MPCI_Entry ( *MPCI_send_entry )( + unsigned32, + MP_packet_Prefix * + ); + +typedef MPCI_Entry ( *MPCI_receive_entry )( + MP_packet_Prefix ** + ); + +typedef struct { + unsigned32 default_timeout; /* in ticks */ + unsigned32 maximum_packet_size; + MPCI_initialization_entry initialization; + MPCI_get_packet_entry get_packet; + MPCI_return_packet_entry return_packet; + MPCI_send_entry send_packet; + MPCI_receive_entry receive_packet; +} MPCI_Control; + +/* + * The following defines the type for packet processing routines + * invoked by the MPCI Receive server. + */ + +typedef void (*MPCI_Packet_processor)( MP_packet_Prefix * ); + +/* + * This is the core semaphore which the MPCI Receive Server blocks on. + */ + +EXTERN CORE_semaphore_Control _MPCI_Semaphore; +/* + * The following thread queue is used to maintain a list of tasks + * which currently have outstanding remote requests. + */ + +EXTERN Thread_queue_Control _MPCI_Remote_blocked_threads; + +/* + * The following define the internal pointers to the user's + * configuration information. + */ + +EXTERN MPCI_Control *_MPCI_table; + +/* + * The following points to the MPCI Receive Server. + */ + +EXTERN Thread_Control *_MPCI_Receive_server_tcb; + +/* + * The following table contains the process packet routines provided + * by each object that supports MP operations. + */ + +EXTERN MPCI_Packet_processor _MPCI_Packet_processors[MP_PACKET_CLASSES_LAST+1]; + +/* * _MPCI_Handler_initialization * * DESCRIPTION: @@ -52,7 +131,9 @@ extern "C" { * This routine performs the initialization necessary for this handler. */ -void _MPCI_Handler_initialization ( void ); +void _MPCI_Handler_initialization( + MPCI_Control *users_mpci_table +); /* * _MPCI_Initialization @@ -66,6 +147,21 @@ void _MPCI_Handler_initialization ( void ); void _MPCI_Initialization ( void ); /* + * _MPCI_Register_packet_processor + * + * DESCRIPTION: + * + * This routine registers the MPCI packet processor for the + * designated object class. + */ + +void _MPCI_Register_packet_processor( + MP_packet_Classes the_object, + MPCI_Packet_processor the_packet_processor + +); + +/* * _MPCI_Get_packet * * DESCRIPTION: @@ -74,7 +170,7 @@ void _MPCI_Initialization ( void ); * MPCI get packet callout. */ -rtems_packet_prefix *_MPCI_Get_packet ( void ); +MP_packet_Prefix *_MPCI_Get_packet ( void ); /* * _MPCI_Return_packet @@ -86,7 +182,7 @@ rtems_packet_prefix *_MPCI_Get_packet ( void ); */ void _MPCI_Return_packet ( - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ); /* @@ -100,7 +196,7 @@ void _MPCI_Return_packet ( void _MPCI_Send_process_packet ( unsigned32 destination, - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ); /* @@ -112,9 +208,9 @@ void _MPCI_Send_process_packet ( * MPCI send callout. */ -rtems_status_code _MPCI_Send_request_packet ( +unsigned32 _MPCI_Send_request_packet ( unsigned32 destination, - rtems_packet_prefix *the_packet, + MP_packet_Prefix *the_packet, States_Control extra_state ); @@ -129,7 +225,7 @@ rtems_status_code _MPCI_Send_request_packet ( void _MPCI_Send_response_packet ( unsigned32 destination, - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ); /* @@ -141,7 +237,7 @@ void _MPCI_Send_response_packet ( * MPCI receive callout. */ -rtems_packet_prefix *_MPCI_Receive_packet ( void ); +MP_packet_Prefix *_MPCI_Receive_packet ( void ); /* * _MPCI_Process_response @@ -153,15 +249,27 @@ rtems_packet_prefix *_MPCI_Receive_packet ( void ); */ Thread_Control *_MPCI_Process_response ( - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ); -/* - * The following thread queue is used to maintain a list of tasks - * which currently have outstanding remote requests. +/*PAGE + * + * _MPCI_Receive_server + * */ + +void _MPCI_Receive_server( void ); -EXTERN Thread_queue_Control _MPCI_Remote_blocked_threads; +/*PAGE + * + * _MPCI_Announce + * + * DESCRIPTION: + * + * XXX + */ + +void _MPCI_Announce ( void ); #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/mppkt.h b/cpukit/score/include/rtems/score/mppkt.h index d63d587fca..32cbc7e0e9 100644 --- a/cpukit/score/include/rtems/score/mppkt.h +++ b/cpukit/score/include/rtems/score/mppkt.h @@ -1,8 +1,10 @@ /* mppkt.h * * This package is the specification for the Packet Handler. - * This handler defines the basic RTEMS packet and provides + * This handler defines the basic packet and provides * mechanisms to utilize packets based on this prefix. + * Packets are the fundamental basis for messages passed between + * nodes in an MP system. * * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. @@ -16,20 +18,19 @@ * $Id$ */ -#ifndef __RTEMS_MP_PACKET_h -#define __RTEMS_MP_PACKET_h +#ifndef __MP_PACKET_h +#define __MP_PACKET_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/object.h> -#include <rtems/priority.h> -#include <rtems/watchdog.h> +#include <rtems/core/object.h> +#include <rtems/core/priority.h> +#include <rtems/core/watchdog.h> /* - * The following enumerated type defines the packet classes - * supported by RTEMS. + * The following enumerated type defines the packet classes. * * NOTE: In general, each class corresponds to a manager * which supports global operations. Each manager @@ -37,55 +38,55 @@ extern "C" { */ typedef enum { - RTEMS_MP_PACKET_INTERNAL_THREADS = 0, - RTEMS_MP_PACKET_TASKS = 1, - RTEMS_MP_PACKET_MESSAGE_QUEUE = 2, - RTEMS_MP_PACKET_SEMAPHORE = 3, - RTEMS_MP_PACKET_PARTITION = 4, - RTEMS_MP_PACKET_REGION = 5, - RTEMS_MP_PACKET_EVENT = 6, - RTEMS_MP_PACKET_SIGNAL = 7 -} rtems_mp_packet_classes; - -#define MP_PACKET_CLASSES_FIRST RTEMS_MP_PACKET_INTERNAL_THREADS -#define MP_PACKET_CLASSES_LAST RTEMS_MP_PACKET_SIGNAL + MP_PACKET_INTERNAL_THREADS = 0, + MP_PACKET_TASKS = 1, + MP_PACKET_MESSAGE_QUEUE = 2, + MP_PACKET_SEMAPHORE = 3, + MP_PACKET_PARTITION = 4, + MP_PACKET_REGION = 5, + MP_PACKET_EVENT = 6, + MP_PACKET_SIGNAL = 7 +} MP_packet_Classes; + +#define MP_PACKET_CLASSES_FIRST MP_PACKET_INTERNAL_THREADS +#define MP_PACKET_CLASSES_LAST MP_PACKET_SIGNAL /* * The following record contains the prefix for every packet - * passed between RTEMS nodes. + * passed between nodes in an MP system. * * NOTE: This structure is padded to insure that anything * following it is on a 16 byte boundary. This is * the most stringent structure alignment rule - * the RTEMS project has encountered yet (i960CA). + * encountered yet (i960CA). */ typedef struct { - rtems_mp_packet_classes the_class; + MP_packet_Classes the_class; Objects_Id id; Objects_Id source_tid; Priority_Control source_priority; - rtems_status_code return_code; + unsigned32 return_code; unsigned32 length; unsigned32 to_convert; - rtems_interval timeout; -} rtems_packet_prefix; + Watchdog_Interval timeout; +} MP_packet_Prefix; /* * An MPCI must support packets of at least this size. */ -#define RTEMS_MINIMUM_PACKET_SIZE 64 +#define MP_PACKET_MINIMUM_PACKET_SIZE 64 /* * The following constant defines the number of unsigned32's * in a packet which must be converted to native format in a * heterogeneous system. In packets longer than - * RTEMS_MINIMUN_HETERO_CONVERSION unsigned32's, some of the "extra" data + * MP_PACKET_MINIMUN_HETERO_CONVERSION unsigned32's, some of the "extra" data * may a user message buffer which is not automatically endian swapped. */ -#define RTEMS_MINIMUN_HETERO_CONVERSION ( sizeof( rtems_packet_prefix ) / 4 ) +#define MP_PACKET_MINIMUN_HETERO_CONVERSION ( sizeof( MP_packet_Prefix ) / 4 ) /* * _Mp_packet_Is_valid_packet_class @@ -97,7 +98,7 @@ typedef struct { */ STATIC INLINE boolean _Mp_packet_Is_valid_packet_class ( - rtems_mp_packet_classes the_packet_class + MP_packet_Classes the_packet_class ); /* @@ -110,10 +111,10 @@ STATIC INLINE boolean _Mp_packet_Is_valid_packet_class ( */ STATIC INLINE boolean _Mp_packet_Is_null ( - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ); -#include <rtems/mppkt.inl> +#include <rtems/core/mppkt.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/object.h b/cpukit/score/include/rtems/score/object.h index b1d422d3d4..3da299e95f 100644 --- a/cpukit/score/include/rtems/score/object.h +++ b/cpukit/score/include/rtems/score/object.h @@ -1,8 +1,9 @@ /* object.h * * This include file contains all the constants and structures associated - * with the RTEMS Object Handler. This Handler provides mechanisms which - * can be used to initialize and manipulate all RTEMS objects. + * with the Object Handler. This Handler provides mechanisms which + * can be used to initialize and manipulate all objects which have + * ids. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -15,14 +16,14 @@ * $Id$ */ -#ifndef __RTEMS_OBJECTS_h -#define __RTEMS_OBJECTS_h +#ifndef __OBJECTS_h +#define __OBJECTS_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/chain.h> +#include <rtems/core/chain.h> /* * The following type defines the control block used to manage @@ -142,6 +143,7 @@ typedef struct { */ EXTERN unsigned32 _Objects_Local_node; +EXTERN unsigned32 _Objects_Maximum_nodes; /* * The following is the list of information blocks for each object @@ -164,23 +166,23 @@ EXTERN Objects_Information * The following define the constants which may be used in name searches. */ -#define RTEMS_SEARCH_ALL_NODES 0 -#define RTEMS_SEARCH_OTHER_NODES 0x7FFFFFFE -#define RTEMS_SEARCH_LOCAL_NODE 0x7FFFFFFF -#define RTEMS_WHO_AM_I 0 +#define OBJECTS_SEARCH_ALL_NODES 0 +#define OBJECTS_SEARCH_OTHER_NODES 0x7FFFFFFE +#define OBJECTS_SEARCH_LOCAL_NODE 0x7FFFFFFF +#define OBJECTS_WHO_AM_I 0 /* * Parameters and return id's for _Objects_Get_next */ -#define RTEMS_OBJECT_ID_INITIAL_INDEX (0) -#define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff) +#define OBJECTS_ID_INITIAL_INDEX (0) +#define OBJECTS_ID_FINAL_INDEX (0xffff) -#define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \ - OBJECTS_NO_CLASS, \ - node, \ - RTEMS_OBJECT_ID_INITIAL_INDEX)) -#define RTEMS_OBJECT_ID_FINAL ((Objects_Id)~0) +#define OBJECTS_ID_INITIAL(node) (_Objects_Build_id( \ + OBJECTS_NO_CLASS, \ + node, \ + OBJECTS_ID_INITIAL_INDEX)) +#define OBJECTS_ID_FINAL ((Objects_Id)~0) /* * _Objects_Handler_initialization @@ -193,6 +195,7 @@ EXTERN Objects_Information void _Objects_Handler_initialization( unsigned32 node, + unsigned32 maximum_nodes, unsigned32 maximum_global_objects ); @@ -303,7 +306,16 @@ boolean _Objects_Compare_name_raw( * */ -rtems_status_code _Objects_Name_to_id( +typedef enum { + OBJECTS_SUCCESSFUL, + OBJECTS_INVALID_NAME, + OBJECTS_INVALID_NODE +} Objects_Name_to_id_errors; + +#define OBJECTS_NAME_ERRORS_FIRST OBJECTS_SUCCESSFUL +#define OBJECTS_NAME_ERRORS_LAST OBJECTS_INVALID_NODE + +Objects_Name_to_id_errors _Objects_Name_to_id( Objects_Information *information, Objects_Name name, unsigned32 node, @@ -378,7 +390,7 @@ STATIC INLINE Objects_Id _Objects_Build_id( ); /* - * rtems_get_class + * _Objects_Get_class * * DESCRIPTION: * @@ -386,12 +398,12 @@ STATIC INLINE Objects_Id _Objects_Build_id( * */ -STATIC INLINE Objects_Classes rtems_get_class( +STATIC INLINE Objects_Classes _Objects_Get_class( Objects_Id id ); /* - * rtems_get_node + * _Objects_Get_node * * DESCRIPTION: * @@ -399,12 +411,12 @@ STATIC INLINE Objects_Classes rtems_get_class( * */ -STATIC INLINE unsigned32 rtems_get_node( +STATIC INLINE unsigned32 _Objects_Get_node( Objects_Id id ); /* - * rtems_get_index + * _Objects_Get_index * * DESCRIPTION: * @@ -412,7 +424,7 @@ STATIC INLINE unsigned32 rtems_get_node( * */ -STATIC INLINE unsigned32 rtems_get_index( +STATIC INLINE unsigned32 _Objects_Get_index( Objects_Id id ); @@ -532,7 +544,7 @@ STATIC INLINE void _Objects_Close( Objects_Control *the_object ); -#include <rtems/object.inl> +#include <rtems/core/object.inl> #include <rtems/objectmp.h> #ifdef __cplusplus diff --git a/cpukit/score/include/rtems/score/objectmp.h b/cpukit/score/include/rtems/score/objectmp.h index b15d5cbb43..cef5c6879d 100644 --- a/cpukit/score/include/rtems/score/objectmp.h +++ b/cpukit/score/include/rtems/score/objectmp.h @@ -42,6 +42,8 @@ typedef struct { */ void _Objects_MP_Handler_initialization ( + unsigned32 node, + unsigned32 maximum_nodes, unsigned32 maximum_global_objects ); @@ -140,7 +142,7 @@ void _Objects_MP_Close ( * object with that name if one is found. */ -rtems_status_code _Objects_MP_Global_name_search ( +Objects_Name_to_id_errors _Objects_MP_Global_name_search ( Objects_Information *information, Objects_Name the_name, unsigned32 nodes_to_search, @@ -171,6 +173,7 @@ void _Objects_MP_Is_remote ( * inactive global object control blocks. */ +EXTERN unsigned32 _Objects_MP_Maximum_global_objects; EXTERN Chain_Control _Objects_MP_Inactive_global_objects; #include <rtems/objectmp.inl> diff --git a/cpukit/score/include/rtems/score/priority.h b/cpukit/score/include/rtems/score/priority.h index 44397e7a8a..8f681c0ce1 100644 --- a/cpukit/score/include/rtems/score/priority.h +++ b/cpukit/score/include/rtems/score/priority.h @@ -2,7 +2,7 @@ * * This include file contains all thread priority manipulation routines. * This Handler provides mechanisms which can be used to - * initialize and manipulate RTEMS priorities. + * initialize and manipulate thread priorities. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -15,8 +15,8 @@ * $Id$ */ -#ifndef __RTEMS_PRIORITY_h -#define __RTEMS_PRIORITY_h +#ifndef __PRIORITY_h +#define __PRIORITY_h #ifdef __cplusplus extern "C" { @@ -31,8 +31,8 @@ extern "C" { typedef unsigned32 Priority_Control; -#define RTEMS_MINIMUM_PRIORITY 1 /* highest thread priority */ -#define RTEMS_MAXIMUM_PRIORITY 255 /* lowest thread priority */ +#define PRIORITY_MINIMUM 0 /* highest thread priority */ +#define PRIORITY_MAXIMUM 255 /* lowest thread priority */ /* * The following record defines the information associated with @@ -62,12 +62,6 @@ EXTERN volatile Priority_Bit_map_control _Priority_Major_bit_map; EXTERN Priority_Bit_map_control _Priority_Bit_map[16] CPU_STRUCTURE_ALIGNMENT; /* - * The following constants are useful when manipulating priority. - */ - -#define RTEMS_CURRENT_PRIORITY 0 /* obtain current priority */ - -/* * The definition of the Priority_Bit_map_control type is CPU dependent. * */ @@ -185,7 +179,7 @@ STATIC INLINE boolean _Priority_Is_group_empty ( Priority_Control the_priority ); -#include <rtems/priority.inl> +#include <rtems/core/priority.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/stack.h b/cpukit/score/include/rtems/score/stack.h index a0fce1ef04..2a41bcf89f 100644 --- a/cpukit/score/include/rtems/score/stack.h +++ b/cpukit/score/include/rtems/score/stack.h @@ -15,8 +15,8 @@ * $Id$ */ -#ifndef __RTEMS_STACK_h -#define __RTEMS_STACK_h +#ifndef __STACK_h +#define __STACK_h #ifdef __cplusplus extern "C" { @@ -27,7 +27,7 @@ extern "C" { * thread must exceed. */ -#define RTEMS_MINIMUM_STACK_SIZE CPU_STACK_MINIMUM_SIZE +#define STACK_MINIMUM_SIZE CPU_STACK_MINIMUM_SIZE /* * The following defines the control block used to manage each stack. @@ -85,7 +85,7 @@ STATIC INLINE unsigned32 _Stack_Adjust_size ( unsigned32 size ); -#include <rtems/stack.inl> +#include <rtems/core/stack.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/states.h b/cpukit/score/include/rtems/score/states.h index 56f67ecc49..3f7c4a7e99 100644 --- a/cpukit/score/include/rtems/score/states.h +++ b/cpukit/score/include/rtems/score/states.h @@ -1,6 +1,6 @@ /* states.h * - * This include file contains all RTEMS state information. + * This include file contains thread execution state information. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -43,13 +43,15 @@ typedef unsigned32 States_Control; #define STATES_WAITING_FOR_MESSAGE 0x0040 /* wait for message */ #define STATES_WAITING_FOR_EVENT 0x0080 /* wait for event */ #define STATES_WAITING_FOR_SEMAPHORE 0x0100 /* wait for semaphore */ -#define STATES_WAITING_FOR_TIME 0x0200 /* wait for specific TOD */ -#define STATES_WAITING_FOR_RPC_REPLY 0x0400 /* wait for rpc reply */ -#define STATES_WAITING_FOR_PERIOD 0x0800 /* rate monotonic delay */ +#define STATES_WAITING_FOR_MUTEX 0x0200 /* wait for mutex */ +#define STATES_WAITING_FOR_TIME 0x0400 /* wait for specific TOD */ +#define STATES_WAITING_FOR_RPC_REPLY 0x0800 /* wait for rpc reply */ +#define STATES_WAITING_FOR_PERIOD 0x1000 /* rate monotonic delay */ #define STATES_LOCALLY_BLOCKED ( STATES_WAITING_FOR_BUFFER | \ STATES_WAITING_FOR_SEGMENT | \ STATES_WAITING_FOR_MESSAGE | \ + STATES_WAITING_FOR_MUTEX | \ STATES_WAITING_FOR_SEMAPHORE ) #define STATES_WAITING_ON_THREAD_QUEUE \ @@ -221,6 +223,19 @@ STATIC INLINE boolean _States_Is_waiting_for_event ( ); /* + * _States_Is_waiting_for_mutex + * + * DESCRIPTION: + * + * This function returns TRUE if the WAITING_FOR_MUTEX state + * is set in the_states, and FALSE otherwise. + */ + +STATIC INLINE boolean _States_Is_waiting_for_mutex ( + States_Control the_states +); + +/* * _States_Is_waiting_for_semaphore * * DESCRIPTION: @@ -327,7 +342,7 @@ STATIC INLINE boolean _States_Are_set ( States_Control mask ); -#include <rtems/states.inl> +#include <rtems/core/states.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/sysstate.h b/cpukit/score/include/rtems/score/sysstate.h index 511a26cefc..b0ace61f98 100644 --- a/cpukit/score/include/rtems/score/sysstate.h +++ b/cpukit/score/include/rtems/score/sysstate.h @@ -40,12 +40,31 @@ typedef enum { #define SYSTEM_STATE_CODES_LAST SYSTEM_STATE_FAILED /* + * The following variable indicates whether or not this is + * an multiprocessing system. + */ + +EXTERN boolean _System_state_Is_multiprocessing; + +/* * The following variable contains the current system state. */ EXTERN System_state_Codes _System_state_Current; /* + * _System_state_Handler_initialization + * + * DESCRIPTION: + * + * This routine initializes the system state handler. + */ + +STATIC INLINE void _System_state_Handler_initialization ( + boolean is_multiprocessing +); + +/* * _System_state_Set * * DESCRIPTION: diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index 37a5898d01..823a4e6760 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -14,77 +14,44 @@ * $Id$ */ -#ifndef __RTEMS_THREAD_h -#define __RTEMS_THREAD_h +#ifndef __THREAD_h +#define __THREAD_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/asr.h> -#include <rtems/attr.h> -#include <rtems/context.h> -#include <rtems/cpu.h> -#include <rtems/eventset.h> -#include <rtems/modes.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/priority.h> -#include <rtems/stack.h> -#include <rtems/states.h> -#include <rtems/tod.h> -#include <rtems/tqdata.h> -#include <rtems/watchdog.h> - -/* - * Notepads constants (indices into notepad array) - */ - -#define RTEMS_NOTEPAD_FIRST 0 /* lowest numbered notepad */ -#define RTEMS_NOTEPAD_0 0 /* notepad location 0 */ -#define RTEMS_NOTEPAD_1 1 /* notepad location 1 */ -#define RTEMS_NOTEPAD_2 2 /* notepad location 2 */ -#define RTEMS_NOTEPAD_3 3 /* notepad location 3 */ -#define RTEMS_NOTEPAD_4 4 /* notepad location 4 */ -#define RTEMS_NOTEPAD_5 5 /* notepad location 5 */ -#define RTEMS_NOTEPAD_6 6 /* notepad location 6 */ -#define RTEMS_NOTEPAD_7 7 /* notepad location 7 */ -#define RTEMS_NOTEPAD_8 8 /* notepad location 8 */ -#define RTEMS_NOTEPAD_9 9 /* notepad location 9 */ -#define RTEMS_NOTEPAD_10 10 /* notepad location 10 */ -#define RTEMS_NOTEPAD_11 11 /* notepad location 11 */ -#define RTEMS_NOTEPAD_12 12 /* notepad location 12 */ -#define RTEMS_NOTEPAD_13 13 /* notepad location 13 */ -#define RTEMS_NOTEPAD_14 14 /* notepad location 14 */ -#define RTEMS_NOTEPAD_15 15 /* notepad location 15 */ -#define RTEMS_NOTEPAD_LAST RTEMS_NOTEPAD_15 /* highest numbered notepad */ - -#define RTEMS_NUMBER_NOTEPADS (RTEMS_NOTEPAD_LAST+1) - -/* - * The following defines the "return type" of an RTEMS thread. - * - * NOTE: Keep both types for internal threads. - */ - -typedef void rtems_task; -typedef void Thread; +#include <rtems/core/context.h> +#include <rtems/core/cpu.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/priority.h> +#include <rtems/core/stack.h> +#include <rtems/core/states.h> +#include <rtems/core/tod.h> +#include <rtems/core/tqdata.h> +#include <rtems/core/watchdog.h> /* - * The following defines the argument to an RTEMS thread. + * The following defines the "return type" of a thread. */ -typedef unsigned32 rtems_task_argument; -typedef unsigned32 Thread_Argument; +typedef void Thread; /* - * The following defines the type for the entry point of an RTEMS thread. + * The following defines the ways in which the entry point for a + * thread can be invoked. Basically, it can be passed any + * combination/permutation of a pointer and an unsigned32 value. + * + * NOTE: For now, we are ignoring the return type. */ -typedef rtems_task ( *rtems_task_entry )( - rtems_task_argument - ); +typedef enum { + THREAD_START_NUMERIC, + THREAD_START_POINTER, + THREAD_START_BOTH_POINTER_FIRST, + THREAD_START_BOTH_NUMERIC_FIRST +} Thread_Start_types; typedef Thread ( *Thread_Entry )( ); @@ -93,19 +60,15 @@ typedef Thread ( *Thread_Entry )( ); * the starting state of a thread. */ -typedef enum { - THREAD_START_NUMERIC, - THREAD_START_POINTER, - THREAD_START_BOTH_POINTER_FIRST, - THREAD_START_BOTH_NUMERIC_FIRST -} Thread_Start_types; - typedef struct { Thread_Entry entry_point; /* starting thread address */ Thread_Start_types prototype; /* how task is invoked */ void *pointer_argument; /* pointer argument */ unsigned32 numeric_argument; /* numeric argument */ - Modes_Control initial_modes; /* initial mode */ + /* initial execution modes */ + boolean is_preemptible; + boolean is_timeslice; + unsigned32 isr_level; Priority_Control initial_priority; /* initial priority */ Stack_Control Initial_stack; /* stack information */ void *fp_context; /* initial FP context area address */ @@ -117,16 +80,21 @@ typedef struct { * a thread which it is waiting for a resource. */ +#define THREAD_STATUS_PROXY_BLOCKING 0x1111111 + typedef struct { Objects_Id id; /* waiting on this object */ - rtems_option option_set; /* wait mode */ - union { - unsigned32 segment_size; /* size of segment requested */ - rtems_event_set event_condition; - unsigned32 *message_size_p; /* ptr for return size of message */ - } Extra; - void *return_argument; /* address of user return param */ - rtems_status_code return_code; /* status for thread awakened */ + unsigned32 count; /* "generic" fields to be used */ + void *return_argument; /* when blocking */ + void *return_argument_1; + unsigned32 option; + + /* + * NOTE: The following assumes that all API return codes can be + * treated as an unsigned32. + */ + unsigned32 return_code; /* status for thread awakened */ + Chain_Control Block2n; /* 2 - n priority blocked chain */ Thread_queue_Control *queue; /* pointer to thread queue */ } Thread_Wait_information; @@ -147,7 +115,7 @@ typedef struct { unsigned32 resource_count; Thread_Wait_information Wait; Watchdog_Control Timer; - rtems_packet_prefix *receive_packet; + MP_packet_Prefix *receive_packet; /****************** end of common block ********************/ Chain_Node Active; } Thread_Proxy_control; @@ -161,15 +129,12 @@ typedef struct { * memory images for the shared part. */ -/* XXX structure in wrong file .. API .. not core */ +typedef enum { + THREAD_API_RTEMS +} Thread_APIs; -typedef struct { - boolean is_global; - unsigned32 Notepads[ RTEMS_NUMBER_NOTEPADS ]; - rtems_event_set pending_events; - rtems_event_set events_out; - ASR_Information Signal; -} RTEMS_API_Control; +#define THREAD_API_FIRST THREAD_API_RTEMS +#define THREAD_API_LAST THREAD_API_RTEMS typedef struct { Objects_Control Object; @@ -179,24 +144,30 @@ typedef struct { unsigned32 resource_count; Thread_Wait_information Wait; Watchdog_Control Timer; - rtems_packet_prefix *receive_packet; + MP_packet_Prefix *receive_packet; /****************** end of common block ********************/ + boolean is_global; Chain_Control *ready; Priority_Information Priority_map; Thread_Start_information Start; - Modes_Control current_modes; + boolean is_preemptible; + boolean is_timeslice; Context_Control Registers; void *fp_context; - RTEMS_API_Control *RTEMS_API; - void *extension; + void *API_Extensions[ THREAD_API_LAST + 1 ]; + void **extensions; } Thread_Control; /* - * External API name for Thread_Control + * The following context area contains the context of the "thread" + * which invoked the start multitasking routine. This context is + * restored as the last action of the stop multitasking routine. Thus + * control of the processor can be returned to the environment + * which initiated the system. */ - -typedef Thread_Control rtems_tcb; - + +EXTERN Context_Control _Thread_BSP_context; + /* * The following declares the dispatch critical section nesting * counter which is used to prevent context switches at inopportune @@ -206,6 +177,14 @@ typedef Thread_Control rtems_tcb; EXTERN unsigned32 _Thread_Dispatch_disable_level; /* + * The following holds how many user extensions are in the system. This + * is used to determine how many user extension data areas to allocate + * per thread. + */ + +EXTERN unsigned32 _Thread_Maximum_extensions; + +/* * The following data items are used to manage timeslicing. */ @@ -228,7 +207,7 @@ EXTERN Thread_Control *_Thread_Executing; /* * The following points to the highest priority ready thread - * in the system. Unless the current thread is RTEMS_NO_PREEMPT, + * in the system. Unless the current thread is not preemptibl, * then this thread will be context switched to when the next * dispatch occurs. */ @@ -243,16 +222,6 @@ EXTERN Thread_Control *_Thread_Heir; EXTERN Thread_Control *_Thread_Allocated_fp; /* - * The following context area contains the context of the "thread" - * which invoked rtems_initialize_executive. This context is restored - * as the last action of the rtems_shutdown_executive directive. Thus - * control of the processor can be returned to the environment - * which initiated RTEMS. - */ - -EXTERN Context_Control _Thread_BSP_context; - -/* * _Thread_Handler_initialization * * DESCRIPTION: @@ -261,8 +230,9 @@ EXTERN Context_Control _Thread_BSP_context; */ void _Thread_Handler_initialization ( - unsigned32 ticks_per_timeslice, - unsigned32 maximum_proxies + unsigned32 ticks_per_timeslice, + unsigned32 maximum_extensions, + unsigned32 maximum_proxies ); /* @@ -272,7 +242,7 @@ void _Thread_Handler_initialization ( * * This routine initiates multitasking. It is invoked only as * part of initialization and its invocation is the last act of - * the rtems_initialize_executive directive. + * the non-multitasking part of the system initialization. */ void _Thread_Start_multitasking ( @@ -286,8 +256,8 @@ void _Thread_Start_multitasking ( * DESCRIPTION: * * This routine halts multitasking and returns control to - * the "thread" which initially invoked the rtems_initialize_executive - * directive. + * the "thread" (i.e. the BSP) which initially invoked the + * routine which initialized the system. */ STATIC INLINE void _Thread_Stop_multitasking( void ); @@ -333,7 +303,9 @@ boolean _Thread_Initialize( unsigned32 stack_size, /* insure it is >= min */ boolean is_fp, /* TRUE if thread uses FP */ Priority_Control priority, - Modes_Control mode, + boolean is_preemptible, + boolean is_timeslice, + unsigned32 isr_level, Objects_Name name ); @@ -452,7 +424,7 @@ void _Thread_Set_transient( * at the priority of the currently executing thread, then the * executing thread's timeslice is reset. Otherwise, the * currently executing thread is placed at the rear of the - * RTEMS_FIFO for this priority and a new heir is selected. + * FIFO for this priority and a new heir is selected. */ void _Thread_Reset_timeslice( void ); @@ -551,8 +523,7 @@ void _Thread_Handler( void ); * DESCRIPTION: * * This routine is invoked when a thread must be unblocked at the - * end of a delay such as the rtems_task_wake_after and rtems_task_wake_when - * directives. + * end of a time based delay (i.e. wake after or wake when). */ void _Thread_Delay_ended( @@ -590,23 +561,14 @@ void _Thread_Set_priority( ); /* - * _Thread_Change_mode + * _Thread_Evaluate_mode * * DESCRIPTION: * - * This routine changes the current values of the modes - * indicated by mask of the calling thread are changed to that - * indicated in mode_set. The former mode of the thread is - * returned in mode_set. If the changes in the current mode - * indicate that a thread dispatch operation may be necessary, - * then need_dispatch is TRUE, otherwise it is FALSE. + * This routine XXX */ -boolean _Thread_Change_mode( - Modes_Control new_mode_set, - Modes_Control mask, - Modes_Control *old_mode_set -); +boolean _Thread_Evaluate_mode( void ); /* * _Thread_Resume @@ -782,8 +744,21 @@ STATIC INLINE Thread_Control *_Thread_Get ( Objects_Locations *location ); -#include <rtems/thread.inl> -#include <rtems/threadmp.h> +/* + * _Thread_Is_proxy_blocking + * + * DESCRIPTION: + * + * This function returns TRUE if the status code is equal to the + * status which indicates that a proxy is blocking, and FALSE otherwise. + */ + +STATIC INLINE boolean _Thread_Is_proxy_blocking ( + unsigned32 code +); + +#include <rtems/core/thread.inl> +#include <rtems/core/threadmp.h> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/threadmp.h b/cpukit/score/include/rtems/score/threadmp.h index db94a65d78..89b8e3d597 100644 --- a/cpukit/score/include/rtems/score/threadmp.h +++ b/cpukit/score/include/rtems/score/threadmp.h @@ -104,7 +104,7 @@ EXTERN Thread_Control *_Thread_MP_Receive; EXTERN Chain_Control _Thread_MP_Active_proxies; EXTERN Chain_Control _Thread_MP_Inactive_proxies; -#include <rtems/threadmp.inl> +#include <rtems/core/threadmp.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/threadq.h b/cpukit/score/include/rtems/score/threadq.h index 27a36ab63e..a9fb29bb57 100644 --- a/cpukit/score/include/rtems/score/threadq.h +++ b/cpukit/score/include/rtems/score/threadq.h @@ -14,18 +14,18 @@ * $Id$ */ -#ifndef __RTEMS_THREAD_QUEUE_h -#define __RTEMS_THREAD_QUEUE_h +#ifndef __THREAD_QUEUE_h +#define __THREAD_QUEUE_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/tqdata.h> +#include <rtems/core/tqdata.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following type defines the callout used when a remote task @@ -75,7 +75,7 @@ Thread_Control *_Thread_queue_Dequeue( void _Thread_queue_Enqueue( Thread_queue_Control *the_thread_queue, - rtems_interval timeout + Watchdog_Interval timeout ); /* @@ -131,7 +131,8 @@ Thread_Control *_Thread_queue_First( void _Thread_queue_Flush( Thread_queue_Control *the_thread_queue, - Thread_queue_Flush_callout remote_extract_callout + Thread_queue_Flush_callout remote_extract_callout, + unsigned32 status ); /* @@ -149,7 +150,8 @@ void _Thread_queue_Initialize( Objects_Classes the_class, Thread_queue_Disciplines the_discipline, States_Control state, - Thread_queue_Extract_callout proxy_extract_callout + Thread_queue_Extract_callout proxy_extract_callout, + unsigned32 timeout_status ); /* @@ -179,7 +181,7 @@ Thread_Control *_Thread_queue_Dequeue_priority( void _Thread_queue_Enqueue_priority( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, - rtems_interval timeout + Watchdog_Interval timeout ); /* @@ -231,13 +233,13 @@ Thread_Control *_Thread_queue_Dequeue_fifo( * * This routine enqueues the currently executing thread on * the_thread_queue with an optional timeout using the - * RTEMS_FIFO discipline. + * FIFO discipline. */ void _Thread_queue_Enqueue_fifo( Thread_queue_Control *the_thread_queue, Thread_Control *the_thread, - rtems_interval timeout + Watchdog_Interval timeout ); /* diff --git a/cpukit/score/include/rtems/score/tod.h b/cpukit/score/include/rtems/score/tod.h index ae7e2b9747..6c2882a3c5 100644 --- a/cpukit/score/include/rtems/score/tod.h +++ b/cpukit/score/include/rtems/score/tod.h @@ -14,15 +14,15 @@ * $Id$ */ -#ifndef __RTEMS_TIME_OF_DAY_h -#define __RTEMS_TIME_OF_DAY_h +#ifndef __TIME_OF_DAY_h +#define __TIME_OF_DAY_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/object.h> -#include <rtems/watchdog.h> +#include <rtems/core/object.h> +#include <rtems/core/watchdog.h> /* * The following constants are related to the time of day. @@ -42,7 +42,7 @@ extern "C" { /* * The following constant define the earliest year to which an - * RTEMS time of day can be initialized. This is considered the + * time of day can be initialized. This is considered the * epoch. */ @@ -61,27 +61,27 @@ typedef struct { /* RTEID style time/date */ unsigned32 minute; /* minute, 0 -> 59 */ unsigned32 second; /* second, 0 -> 59 */ unsigned32 ticks; /* elapsed ticks between secs */ -} rtems_time_of_day; +} TOD_Control; /* * The following contains the current time of day. */ -EXTERN rtems_time_of_day _TOD_Current; +EXTERN TOD_Control _TOD_Current; /* * The following contains the number of seconds from 00:00:00 * January 1, TOD_BASE_YEAR until the current time of day. */ -EXTERN rtems_interval _TOD_Seconds_since_epoch; +EXTERN Watchdog_Interval _TOD_Seconds_since_epoch; /* * The following contains the number of ticks since the * system was booted. */ -EXTERN rtems_interval _TOD_Ticks_since_boot; +EXTERN Watchdog_Interval _TOD_Ticks_since_boot; /* * The following contains the number of microseconds per tick. @@ -173,8 +173,8 @@ void _TOD_Handler_initialization( */ void _TOD_Set( - rtems_time_of_day *the_tod, - rtems_interval seconds_since_epoch + TOD_Control *the_tod, + Watchdog_Interval seconds_since_epoch ); /* @@ -182,12 +182,12 @@ void _TOD_Set( * * DESCRIPTION: * - * This function returns STATUS.RTEMS_SUCCESSFUL if THE_TOD contains + * This function returns TRUE if THE_TOD contains * a valid time of day, and FALSE otherwise. */ -rtems_status_code _TOD_Validate( - rtems_time_of_day *the_tod +boolean _TOD_Validate( + TOD_Control *the_tod ); /* @@ -198,8 +198,8 @@ rtems_status_code _TOD_Validate( * This function returns the number seconds between the epoch and THE_TOD. */ -rtems_interval _TOD_To_seconds( - rtems_time_of_day *the_tod +Watchdog_Interval _TOD_To_seconds( + TOD_Control *the_tod ); /* @@ -243,7 +243,7 @@ STATIC INLINE void _TOD_Deactivate( void ); */ STATIC INLINE void _TOD_Activate( - rtems_interval ticks + Watchdog_Interval ticks ); /* @@ -262,7 +262,7 @@ void _TOD_Tickle( ); /* - * RTEMS_MILLISECONDS_TO_MICROSECONDS + * TOD_MILLISECONDS_TO_MICROSECONDS * * DESCRIPTION: * @@ -273,10 +273,10 @@ void _TOD_Tickle( * This must be a macro so it can be used in "static" tables. */ -#define RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms) ((_ms) * 1000) +#define TOD_MILLISECONDS_TO_MICROSECONDS(_ms) ((_ms) * 1000) /* - * RTEMS_MILLISECONDS_TO_TICKS + * TOD_MILLISECONDS_TO_TICKS * * DESCRIPTION: * @@ -287,10 +287,10 @@ void _TOD_Tickle( * This must be a macro so it can be used in "static" tables. */ -#define RTEMS_MILLISECONDS_TO_TICKS(_ms) \ - (RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms) / _TOD_Microseconds_per_tick) +#define TOD_MILLISECONDS_TO_TICKS(_ms) \ + (TOD_MILLISECONDS_TO_MICROSECONDS(_ms) / _TOD_Microseconds_per_tick) -#include <rtems/tod.inl> +#include <rtems/core/tod.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/tqdata.h b/cpukit/score/include/rtems/score/tqdata.h index f962f409d2..128c4183a3 100644 --- a/cpukit/score/include/rtems/score/tqdata.h +++ b/cpukit/score/include/rtems/score/tqdata.h @@ -14,16 +14,16 @@ * $Id$ */ -#ifndef __RTEMS_THREAD_QUEUE_DATA_h -#define __RTEMS_THREAD_QUEUE_DATA_h +#ifndef __THREAD_QUEUE_DATA_h +#define __THREAD_QUEUE_DATA_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/chain.h> -#include <rtems/priority.h> -#include <rtems/states.h> +#include <rtems/core/chain.h> +#include <rtems/core/priority.h> +#include <rtems/core/states.h> /* * The following enumerated type details all of the disciplines @@ -31,8 +31,8 @@ extern "C" { */ typedef enum { - THREAD_QUEUE_DISCIPLINE_FIFO, /* RTEMS_FIFO queue discipline */ - THREAD_QUEUE_DISCIPLINE_PRIORITY /* RTEMS_PRIORITY queue discipline */ + THREAD_QUEUE_DISCIPLINE_FIFO, /* FIFO queue discipline */ + THREAD_QUEUE_DISCIPLINE_PRIORITY /* PRIORITY queue discipline */ } Thread_queue_Disciplines; /* @@ -51,6 +51,7 @@ typedef struct { boolean sync; /* alloc/dealloc critical section */ Thread_queue_Disciplines discipline; /* queue discipline */ States_Control state; /* state of threads on Thread_q */ + unsigned32 timeout_status; } Thread_queue_Control; /* @@ -80,7 +81,7 @@ STATIC INLINE boolean _Thread_queue_Is_reverse_search ( Priority_Control the_priority ); -#include <rtems/tqdata.inl> +#include <rtems/core/tqdata.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/userext.h b/cpukit/score/include/rtems/score/userext.h index 56fae9b7db..2808b3566e 100644 --- a/cpukit/score/include/rtems/score/userext.h +++ b/cpukit/score/include/rtems/score/userext.h @@ -2,7 +2,7 @@ * * This include file contains all information about user extensions. This * Handler provides mechanisms which can be used to initialize and manipulate - * all RTEMS user extensions. + * all user extensions. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -15,23 +15,89 @@ * $Id$ */ -#ifndef __RTEMS_USER_EXTENSIONS_h -#define __RTEMS_USER_EXTENSIONS_h +#ifndef __USER_EXTENSIONS_h +#define __USER_EXTENSIONS_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/config.h> -#include <rtems/thread.h> +#include <rtems/core/interr.h> +#include <rtems/core/chain.h> +#include <rtems/core/thread.h> + +/* + * The following records defines the User Extension Table. + * This table defines the application dependent routines which + * are invoked at critical points in the life of each thread and + * the system as a whole. + */ + +typedef void User_extensions_routine; + +typedef boolean ( *User_extensions_thread_create_extension )( + Thread_Control *, + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_delete_extension )( + Thread_Control *, + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_start_extension )( + Thread_Control *, + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_restart_extension )( + Thread_Control *, + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_switch_extension )( + Thread_Control *, + Thread_Control * + ); + +typedef User_extensions_routine (*User_extensions_thread_post_switch_extension)( + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_begin_extension )( + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_thread_exitted_extension )( + Thread_Control * + ); + +typedef User_extensions_routine ( *User_extensions_fatal_extension )( + Internal_errors_Source /* the_source */, + boolean /* is_internal */, + unsigned32 /* the_error */ + ); + + +typedef struct { + User_extensions_thread_create_extension thread_create; + User_extensions_thread_start_extension thread_start; + User_extensions_thread_restart_extension thread_restart; + User_extensions_thread_delete_extension thread_delete; + User_extensions_thread_switch_extension thread_switch; + User_extensions_thread_post_switch_extension thread_post_switch; + User_extensions_thread_begin_extension thread_begin; + User_extensions_thread_exitted_extension thread_exitted; + User_extensions_fatal_extension fatal; +} User_extensions_Table; /* * The following is used to manage each user extension set. */ typedef struct { - Chain_Node Node; - rtems_extensions_table Callouts; + Chain_Node Node; + User_extensions_Table Callouts; } User_extensions_Control; /* @@ -57,7 +123,7 @@ EXTERN Chain_Control _User_extensions_List; */ STATIC INLINE void _User_extensions_Handler_initialization ( - rtems_extensions_table *initial_extensions + User_extensions_Table *initial_extensions ); /* @@ -70,7 +136,19 @@ STATIC INLINE void _User_extensions_Handler_initialization ( STATIC INLINE void _User_extensions_Add_set ( User_extensions_Control *the_extension, - rtems_extensions_table *extension_table + User_extensions_Table *extension_table +); + +/* + * _User_extensions_Add_API_set + * + * DESCRIPTION: + * + * This routine is used to add an API extension set to the active list. + */ + +STATIC INLINE void _User_extensions_Add_API_set ( + User_extensions_Control *the_extension ); /* @@ -86,59 +164,59 @@ STATIC INLINE void _User_extensions_Remove_set ( ); /* - * _User_extensions_Task_create + * _User_extensions_Thread_create * * DESCRIPTION: * * This routine is used to invoke the user extension for - * the rtems_task_create directive. + * the thread creation operate. */ -STATIC INLINE void _User_extensions_Task_create ( +boolean _User_extensions_Thread_create ( Thread_Control *the_thread ); /* - * _User_extensions_Task_delete + * _User_extensions_Thread_delete * * DESCRIPTION: * * This routine is used to invoke the user extension for - * the rtems_task_delete directive. + * the thread deletion operation. */ -STATIC INLINE void _User_extensions_Task_delete ( +void _User_extensions_Thread_delete ( Thread_Control *the_thread ); /* - * _User_extensions_Task_start + * _User_extensions_Thread_start * * DESCRIPTION: * * This routine is used to invoke the user extension for - * the rtems_task_start directive. + * the thread start operation. */ -STATIC INLINE void _User_extensions_Task_start ( +void _User_extensions_Thread_start ( Thread_Control *the_thread ); /* - * _User_extensions_Task_restart + * _User_extensions_Thread_restart * * DESCRIPTION: * * This routine is used to invoke the user extension for - * the rtems_task_restart directive. + * the thread restart operation. */ -STATIC INLINE void _User_extensions_Task_restart ( +void _User_extensions_Thread_restart ( Thread_Control *the_thread ); /* - * _User_extensions_Task_switch + * _User_extensions_Thread_switch * * DESCRIPTION: * @@ -146,47 +224,49 @@ STATIC INLINE void _User_extensions_Task_restart ( * is invoked when a context switch occurs. */ -STATIC INLINE void _User_extensions_Task_switch ( +STATIC INLINE void _User_extensions_Thread_switch ( Thread_Control *executing, Thread_Control *heir ); /* - * _User_extensions_Task_begin + * _User_extensions_Thread_post_switch * * DESCRIPTION: * - * This routine is used to invoke the user extension which - * is invoked when a task begins. + * This routine is used to invoke the user extension which is invoked + * after a context switch occurs (i.e. we are running in the context + * of the new thread). */ - -STATIC INLINE void _User_extensions_Task_begin ( + +STATIC INLINE void _User_extensions_Thread_post_switch ( Thread_Control *executing ); + /* - * _User_extensions_Task_exitted + * _User_extensions_Thread_begin * * DESCRIPTION: * * This routine is used to invoke the user extension which - * is invoked when a task exits. + * is invoked when a thread begins. */ -STATIC INLINE void _User_extensions_Task_exitted ( +void _User_extensions_Thread_begin ( Thread_Control *executing ); /* - * _User_extensions_Task_exitted + * _User_extensions_Thread_exitted * * DESCRIPTION: * * This routine is used to invoke the user extension which - * is invoked when a task exits. + * is invoked when a thread exits. */ -STATIC INLINE void _User_extensions_Task_exitted ( +void _User_extensions_Thread_exitted ( Thread_Control *executing ); @@ -195,15 +275,17 @@ STATIC INLINE void _User_extensions_Task_exitted ( * * DESCRIPTION: * - * This routine is used to invoke the user extension for - * the rtems_fatal_error_occurred directive. + * This routine is used to invoke the user extension invoked + * when a fatal error occurs. */ -STATIC INLINE void _User_extensions_Fatal ( - unsigned32 the_error +void _User_extensions_Fatal ( + Internal_errors_Source the_source, + boolean is_internal, + unsigned32 the_error ); -#include <rtems/userext.inl> +#include <rtems/core/userext.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/watchdog.h b/cpukit/score/include/rtems/score/watchdog.h index 70de7018dd..7e871c8881 100644 --- a/cpukit/score/include/rtems/score/watchdog.h +++ b/cpukit/score/include/rtems/score/watchdog.h @@ -15,29 +15,29 @@ * $Id$ */ -#ifndef __RTEMS_WATCHDOG_h -#define __RTEMS_WATCHDOG_h +#ifndef __WATCHDOG_h +#define __WATCHDOG_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/object.h> +#include <rtems/core/object.h> /* * The following type defines the control block used to manage * intervals. */ -typedef unsigned32 rtems_interval; +typedef unsigned32 Watchdog_Interval; /* - * The following types define a pointer to a watchdog/timer service routine. + * The following types define a pointer to a watchdog service routine. */ -typedef void rtems_timer_service_routine; +typedef void Watchdog_Service_routine; -typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )( +typedef Watchdog_Service_routine ( *Watchdog_Service_routine_entry )( Objects_Id, void * ); @@ -46,7 +46,7 @@ typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )( * Constant for indefinite wait. (actually an illegal interval) */ -#define RTEMS_NO_TIMEOUT 0 +#define WATCHDOG_NO_TIMEOUT 0 /* * The following enumerated type details the modes in which the @@ -92,9 +92,9 @@ typedef enum { typedef struct { Chain_Node Node; Watchdog_States state; - rtems_interval initial; - rtems_interval delta_interval; - rtems_timer_service_routine_entry routine; + Watchdog_Interval initial; + Watchdog_Interval delta_interval; + Watchdog_Service_routine_entry routine; Objects_Id id; void *user_data; } Watchdog_Control; @@ -140,7 +140,7 @@ void _Watchdog_Handler_initialization( void ); STATIC INLINE void _Watchdog_Initialize( Watchdog_Control *the_watchdog, - rtems_timer_service_routine_entry routine, + Watchdog_Service_routine_entry routine, Objects_Id id, void *user_data ); @@ -238,7 +238,7 @@ STATIC INLINE void _Watchdog_Tickle_seconds( void ); STATIC INLINE void _Watchdog_Insert_ticks( Watchdog_Control *the_watchdog, - rtems_interval units, + Watchdog_Interval units, Watchdog_Insert_modes insert_mode ); @@ -256,7 +256,7 @@ STATIC INLINE void _Watchdog_Insert_ticks( STATIC INLINE void _Watchdog_Insert_seconds( Watchdog_Control *the_watchdog, - rtems_interval units, + Watchdog_Interval units, Watchdog_Insert_modes insert_mode ); @@ -273,7 +273,7 @@ STATIC INLINE void _Watchdog_Insert_seconds( STATIC INLINE void _Watchdog_Adjust_seconds( Watchdog_Adjust_directions direction, - rtems_interval units + Watchdog_Interval units ); /* @@ -288,7 +288,7 @@ STATIC INLINE void _Watchdog_Adjust_seconds( STATIC INLINE void _Watchdog_Adjust_ticks( Watchdog_Adjust_directions direction, - rtems_interval units + Watchdog_Interval units ); /* @@ -374,7 +374,7 @@ STATIC INLINE Watchdog_Control *_Watchdog_Last( void _Watchdog_Adjust ( Chain_Control *header, Watchdog_Adjust_directions direction, - rtems_interval units + Watchdog_Interval units ); /* @@ -408,7 +408,7 @@ void _Watchdog_Tickle ( Chain_Control *header ); -#include <rtems/watchdog.inl> +#include <rtems/core/watchdog.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/wkspace.h b/cpukit/score/include/rtems/score/wkspace.h index 7050be6953..a262761d68 100644 --- a/cpukit/score/include/rtems/score/wkspace.h +++ b/cpukit/score/include/rtems/score/wkspace.h @@ -1,8 +1,8 @@ /* wkspace.h * - * This include file contains information related to the RTEMS + * This include file contains information related to the * RAM Workspace. This Handler provides mechanisms which can be used to - * define, initialize and manipulate the RTEMS workspace. + * define, initialize and manipulate the workspace. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -15,19 +15,18 @@ * $Id$ */ -#ifndef __RTEMS_WORKSPACE_h -#define __RTEMS_WORKSPACE_h +#ifndef __WORKSPACE_h +#define __WORKSPACE_h #ifdef __cplusplus extern "C" { #endif -#include <rtems/heap.h> -#include <rtems/fatal.h> -#include <rtems/status.h> +#include <rtems/core/heap.h> +#include <rtems/core/interr.h> /* - * The following is used to manage the RTEMS Workspace. + * The following is used to manage the Workspace. * */ @@ -67,8 +66,7 @@ STATIC INLINE void *_Workspace_Allocate( * * This routine returns the address of a block of memory of size * bytes. If a block of the appropriate size cannot be allocated - * from the workspace, then the rtems_fatal_error_occurred directive - * is invoked. + * from the workspace, then the internal error handler is invoked. */ void *_Workspace_Allocate_or_fatal_error( @@ -89,7 +87,7 @@ STATIC INLINE boolean _Workspace_Free( void *block ); -#include <rtems/wkspace.inl> +#include <rtems/core/wkspace.inl> #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/system.h b/cpukit/score/include/rtems/system.h index 5f627c1a7c..037fe93e66 100644 --- a/cpukit/score/include/rtems/system.h +++ b/cpukit/score/include/rtems/system.h @@ -76,9 +76,7 @@ extern "C" { typedef void * proc_ptr; -#include <rtems/cpu.h> /* processor specific information */ -#include <rtems/status.h> /* RTEMS status codes */ -#include <rtems/directives.h> +#include <rtems/core/cpu.h> /* processor specific information */ /* * Define NULL @@ -116,12 +114,6 @@ extern const char _RTEMS_version[]; /* RTEMS version string */ extern const char _Copyright_Notice[]; /* RTEMS copyright string */ /* - * The jump table of entry points into RTEMS directives. - */ - -extern const void * _Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ]; - -/* * The following defines the CPU dependent information table. */ |