diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-09-11 19:35:39 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-09-11 19:35:39 +0000 |
commit | 3a4ae6c210bcc37754767966f1128ae23c77b6af (patch) | |
tree | 8804983e5b92bec788d548df13db7513118d351d | |
parent | new file -- split from inlines (diff) | |
download | rtems-3a4ae6c210bcc37754767966f1128ae23c77b6af.tar.bz2 |
The word "RTEMS" almost completely removed from the core.
Configuration Table Template file added and all tests
modified to use this. All gvar.h and conftbl.h files
removed from test directories.
Configuration parameter maximum_devices added.
Core semaphore and mutex handlers added and RTEMS API Semaphore
Manager updated to reflect this.
Initialization sequence changed to invoke API specific initialization
routines. Initialization tasks table now owned by RTEMS Tasks Manager.
Added user extension for post-switch.
Utilized user extensions to implement API specific functionality
like signal dispatching.
Added extensions to the System Initialization Thread so that an
API can register a function to be invoked while the system
is being initialized. These are largely equivalent to the
pre-driver and post-driver hooks.
Added the Modules file oar-go32_p5, modified oar-go32, and modified
the file make/custom/go32.cfg to look at an environment varable which
determines what CPU model is being used.
All BSPs updated to reflect named devices and clock driver's IOCTL
used by the Shared Memory Driver. Also merged clock isr into
main file and removed ckisr.c where possible.
Updated spsize to reflect new and moved variables.
Makefiles for the executive source and include files updated to show
break down of files into Core, RTEMS API, and Neither.
Header and inline files installed into subdirectory based on whether
logically in the Core or a part of the RTEMS API.
883 files changed, 20872 insertions, 11327 deletions
diff --git a/c/src/exec/libcsupport/include/console.h b/c/src/exec/libcsupport/include/console.h index d102c6a1b1..02196de7a9 100644 --- a/c/src/exec/libcsupport/include/console.h +++ b/c/src/exec/libcsupport/include/console.h @@ -22,14 +22,43 @@ extern "C" { #endif #define CONSOLE_DRIVER_TABLE_ENTRY \ - { console_initialize, NULL, NULL, NULL, NULL, NULL } + { console_initialize, console_open, console_close, \ + console_read, console_write, console_control } rtems_device_driver console_initialize( rtems_device_major_number, rtems_device_minor_number, - void *, - rtems_id, - rtems_unsigned32 * + void * +); + +rtems_device_driver console_open( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +rtems_device_driver console_close( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +rtems_device_driver console_read( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +rtems_device_driver console_write( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +rtems_device_driver console_control( + rtems_device_major_number, + rtems_device_minor_number, + void * ); #ifdef __cplusplus diff --git a/c/src/exec/libcsupport/src/error.c b/c/src/exec/libcsupport/src/error.c index 8cf46f0565..cfe1858e08 100644 --- a/c/src/exec/libcsupport/src/error.c +++ b/c/src/exec/libcsupport/src/error.c @@ -91,8 +91,8 @@ rtems_assoc_t rtems_status_assoc[] = { { "not owner of resource", RTEMS_NOT_OWNER_OF_RESOURCE , }, { "directive not implemented", RTEMS_NOT_IMPLEMENTED, }, { "RTEMS inconsistency detected", RTEMS_INTERNAL_ERROR, }, - { "internal multiprocessing only", RTEMS_PROXY_BLOCKING, }, { "could not get enough memory", RTEMS_NO_MEMORY, }, + { "internal multiprocessing only", THREAD_STATUS_PROXY_BLOCKING, }, { 0, 0, 0 }, }; @@ -134,7 +134,7 @@ static int rtems_verror( if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ local_errno = errno; - if (_Configuration_Is_multiprocessing()) + if (_System_state_Is_multiprocessing) fprintf(stderr, "[%d] ", _Configuration_MP_table->node); if (rtems_progname && *rtems_progname) diff --git a/c/src/exec/libcsupport/src/libio.c b/c/src/exec/libcsupport/src/libio.c index f2046501ce..38e0f83bac 100644 --- a/c/src/exec/libcsupport/src/libio.c +++ b/c/src/exec/libcsupport/src/libio.c @@ -14,8 +14,11 @@ #include <rtems/assoc.h> /* assoc.h not included by rtems.h */ #include <fcntl.h> /* O_RDONLY, et.al. */ +#include <sys/fcntl.h> /* O_RDONLY, et.al. */ #if defined(solaris2) #define O_NDELAY O_NONBLOCK +#elif defined(RTEMS_NEWLIB) +#define O_NDELAY _FNBIO #endif #include <errno.h> #include <string.h> /* strcmp */ diff --git a/c/src/exec/libcsupport/src/newlibc.c b/c/src/exec/libcsupport/src/newlibc.c index 4493b473da..e041668375 100644 --- a/c/src/exec/libcsupport/src/newlibc.c +++ b/c/src/exec/libcsupport/src/newlibc.c @@ -80,11 +80,12 @@ libc_wrapup(void) } -rtems_extension +rtems_boolean libc_create_hook(rtems_tcb *current_task, rtems_tcb *creating_task) { MY_task_set_note(creating_task, LIBC_NOTEPAD, 0); + return TRUE; } /* @@ -231,10 +232,10 @@ libc_init(int reentrant) { memset(&libc_extension, 0, sizeof(libc_extension)); - libc_extension.rtems_task_create = libc_create_hook; - libc_extension.rtems_task_start = libc_start_hook; - libc_extension.task_switch = libc_switch_hook; - libc_extension.rtems_task_delete = libc_delete_hook; + libc_extension.thread_create = libc_create_hook; + libc_extension.thread_start = libc_start_hook; + libc_extension.thread_switch = libc_switch_hook; + libc_extension.thread_delete = libc_delete_hook; rc = rtems_extension_create(rtems_build_name('L', 'I', 'B', 'C'), &libc_extension, &extension_id); diff --git a/c/src/exec/rtems/headers/asr.h b/c/src/exec/rtems/headers/asr.h index b2147f8df4..55eed78ec2 100644 --- a/c/src/exec/rtems/headers/asr.h +++ b/c/src/exec/rtems/headers/asr.h @@ -22,7 +22,7 @@ extern "C" { #endif -#include <rtems/modes.h> +#include <rtems/rtems/modes.h> /* * @@ -54,6 +54,7 @@ typedef rtems_asr ( *rtems_asr_entry )( */ typedef struct { + boolean is_enabled; /* are ASRs enabled currently? */ rtems_asr_entry handler; /* address of RTEMS_ASR */ Modes_Control mode_set; /* RTEMS_ASR mode */ rtems_signal_set signals_posted; /* signal set */ @@ -167,7 +168,7 @@ STATIC INLINE void _ASR_Post_signals( rtems_signal_set *signal_set ); -#include <rtems/asr.inl> +#include <rtems/rtems/asr.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/attr.h b/c/src/exec/rtems/headers/attr.h index 950d77f73d..2d34dfe380 100644 --- a/c/src/exec/rtems/headers/attr.h +++ b/c/src/exec/rtems/headers/attr.h @@ -44,6 +44,9 @@ typedef unsigned32 rtems_attribute; #define RTEMS_NO_INHERIT_PRIORITY 0x00000000 #define RTEMS_INHERIT_PRIORITY 0x00000020 +#define RTEMS_NO_PRIORITY_CEILING 0x00000000 +#define RTEMS_PRIORITY_CEILING 0x00000040 + #if ( CPU_HARDWARE_FP == TRUE ) #define ATTRIBUTES_NOT_SUPPORTED 0 #else @@ -177,7 +180,21 @@ STATIC INLINE boolean _Attributes_Is_inherit_priority( rtems_attribute attribute_set ); -#include <rtems/attr.inl> +/* + * _Attributes_Is_priority_ceiling + * + * DESCRIPTION: + * + * This function returns TRUE if the priority ceiling attribute + * is enabled in the attribute_set and FALSE otherwise. + */ + +STATIC INLINE boolean _Attributes_Is_priority_ceiling( + rtems_attribute attribute_set +); + + +#include <rtems/rtems/attr.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/clock.h b/c/src/exec/rtems/headers/clock.h index e849ab4f40..595dfcdbaf 100644 --- a/c/src/exec/rtems/headers/clock.h +++ b/c/src/exec/rtems/headers/clock.h @@ -29,7 +29,8 @@ extern "C" { #endif -#include <rtems/tod.h> +#include <rtems/core/tod.h> +#include <rtems/rtems/types.h> /* * List of things which can be returned by the rtems_clock_get directive. diff --git a/c/src/exec/rtems/headers/dpmem.h b/c/src/exec/rtems/headers/dpmem.h index 2b6016a842..801d5f3864 100644 --- a/c/src/exec/rtems/headers/dpmem.h +++ b/c/src/exec/rtems/headers/dpmem.h @@ -32,8 +32,7 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> +#include <rtems/core/object.h> /* * The following structure defines the port control block. Each port @@ -201,7 +200,7 @@ STATIC INLINE boolean _Dual_ported_memory_Is_null( Dual_ported_memory_Control *the_port ); -#include <rtems/dpmem.inl> +#include <rtems/rtems/dpmem.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/event.h b/c/src/exec/rtems/headers/event.h index aeb71b2abd..05020b9926 100644 --- a/c/src/exec/rtems/headers/event.h +++ b/c/src/exec/rtems/headers/event.h @@ -28,11 +28,12 @@ extern "C" { #endif -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> -#include <rtems/eventset.h> +#include <rtems/core/object.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/eventset.h> /* * This constant is passed as the event_in to the @@ -104,9 +105,10 @@ rtems_status_code rtems_event_receive ( */ void _Event_Seize ( - rtems_event_set event_in, - rtems_option option_set, - rtems_interval ticks + rtems_event_set event_in, + rtems_option option_set, + rtems_interval ticks, + rtems_event_set *event_out ); /* @@ -147,8 +149,8 @@ void _Event_Timeout ( EXTERN boolean _Event_Sync; /* event manager sync flag */ -#include <rtems/event.inl> -#include <rtems/eventmp.h> +#include <rtems/rtems/eventmp.h> +#include <rtems/rtems/event.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/eventmp.h b/c/src/exec/rtems/headers/eventmp.h index 4b42cf791e..86587adc4a 100644 --- a/c/src/exec/rtems/headers/eventmp.h +++ b/c/src/exec/rtems/headers/eventmp.h @@ -21,11 +21,11 @@ extern "C" { #endif -#include <rtems/event.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/event.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/headers/eventset.h b/c/src/exec/rtems/headers/eventset.h index a25dabe58b..770f607075 100644 --- a/c/src/exec/rtems/headers/eventset.h +++ b/c/src/exec/rtems/headers/eventset.h @@ -132,7 +132,7 @@ STATIC INLINE rtems_event_set _Event_sets_Clear( rtems_event_set the_mask ); -#include <rtems/eventset.inl> +#include <rtems/rtems/eventset.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/intr.h b/c/src/exec/rtems/headers/intr.h index 3669af1ccc..08c249d085 100644 --- a/c/src/exec/rtems/headers/intr.h +++ b/c/src/exec/rtems/headers/intr.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* * Interrupt level type @@ -30,6 +30,27 @@ extern "C" { typedef ISR_Level rtems_interrupt_level; /* + * The following type defines the control block used to manage + * the vectors. + */ + +typedef ISR_Vector_number rtems_vector_number; + +/* + * Return type for ISR Handler + */ + +typedef void rtems_isr; + +/* + * Pointer to an ISR Handler + */ + +typedef rtems_isr ( *rtems_isr_entry )( + rtems_vector_number + ); + +/* * _Interrupt_Manager_initialization * * DESCRIPTION: diff --git a/c/src/exec/rtems/headers/message.h b/c/src/exec/rtems/headers/message.h index 25188044be..2ee910ac05 100644 --- a/c/src/exec/rtems/headers/message.h +++ b/c/src/exec/rtems/headers/message.h @@ -34,10 +34,11 @@ extern "C" { #endif -#include <rtems/types.h> -#include <rtems/chain.h> -#include <rtems/object.h> -#include <rtems/threadq.h> +#include <rtems/rtems/types.h> +#include <rtems/core/chain.h> +#include <rtems/core/object.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/threadq.h> /* * The following defines the data types needed to manipulate @@ -468,8 +469,8 @@ STATIC INLINE Message_queue_Control *_Message_queue_Get ( Objects_Locations *location ); -#include <rtems/message.inl> -#include <rtems/msgmp.h> +#include <rtems/rtems/message.inl> +#include <rtems/rtems/msgmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/modes.h b/c/src/exec/rtems/headers/modes.h index b3b05b3f85..115898e503 100644 --- a/c/src/exec/rtems/headers/modes.h +++ b/c/src/exec/rtems/headers/modes.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* * The following type defines the control block used to manage @@ -173,7 +173,7 @@ STATIC INLINE void _Modes_Change ( Modes_Control *changed ); -#include <rtems/modes.inl> +#include <rtems/rtems/modes.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/mp.h b/c/src/exec/rtems/headers/mp.h index 96147d3b44..079f55b093 100644 --- a/c/src/exec/rtems/headers/mp.h +++ b/c/src/exec/rtems/headers/mp.h @@ -45,20 +45,6 @@ void _Multiprocessing_Manager_initialization ( void ); void rtems_multiprocessing_announce ( void ); -/* - * - * _Multiprocessing_Receive_server - * - * DESCRIPTION: - * - * This routine is a server thread which processes remote requests - * from other nodes. - */ - -Thread _Multiprocessing_Receive_server ( - Thread_Argument ignored -); - #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/headers/msgmp.h b/c/src/exec/rtems/headers/msgmp.h index ff84e83ed3..592328678b 100644 --- a/c/src/exec/rtems/headers/msgmp.h +++ b/c/src/exec/rtems/headers/msgmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/message.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/message.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of @@ -97,7 +97,7 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( void *buffer, unsigned32 *size_p, rtems_option option_set, - rtems_interval timeout + Watchdog_Interval timeout ); /* diff --git a/c/src/exec/rtems/headers/options.h b/c/src/exec/rtems/headers/options.h index b318aad8c9..d8da2f9e86 100644 --- a/c/src/exec/rtems/headers/options.h +++ b/c/src/exec/rtems/headers/options.h @@ -69,7 +69,7 @@ STATIC INLINE boolean _Options_Is_any ( rtems_option option_set ); -#include <rtems/options.inl> +#include <rtems/rtems/options.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/part.h b/c/src/exec/rtems/headers/part.h index 230cf029f7..da163c6beb 100644 --- a/c/src/exec/rtems/headers/part.h +++ b/c/src/exec/rtems/headers/part.h @@ -31,10 +31,10 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/address.h> -#include <rtems/attr.h> -#include <rtems/object.h> +#include <rtems/core/address.h> +#include <rtems/core/object.h> +#include <rtems/rtems/attr.h> +#include <rtems/rtems/types.h> /* * The following defines the control block used to manage each partition. @@ -280,8 +280,8 @@ STATIC INLINE boolean _Partition_Is_null ( Partition_Control *the_partition ); -#include <rtems/part.inl> -#include <rtems/partmp.h> +#include <rtems/rtems/part.inl> +#include <rtems/rtems/partmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/partmp.h b/c/src/exec/rtems/headers/partmp.h index 4b3bf876ff..980eaea853 100644 --- a/c/src/exec/rtems/headers/partmp.h +++ b/c/src/exec/rtems/headers/partmp.h @@ -21,11 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/part.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/part.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/headers/ratemon.h b/c/src/exec/rtems/headers/ratemon.h index 75a9963888..6b401ba5b0 100644 --- a/c/src/exec/rtems/headers/ratemon.h +++ b/c/src/exec/rtems/headers/ratemon.h @@ -29,10 +29,9 @@ extern "C" { #endif -#include <rtems.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 enumerated type defines the states in which a @@ -50,7 +49,7 @@ typedef enum { * directive to obtain status information. */ -#define RTEMS_PERIOD_STATUS RTEMS_NO_TIMEOUT +#define RTEMS_PERIOD_STATUS WATCHDOG_NO_TIMEOUT /* * The following structure defines the control block used to manage @@ -148,8 +147,8 @@ rtems_status_code rtems_rate_monotonic_delete( */ rtems_status_code rtems_rate_monotonic_period( - Objects_Id id, - rtems_interval length + Objects_Id id, + rtems_interval length ); /* @@ -276,7 +275,7 @@ STATIC INLINE boolean _Rate_monotonic_Is_null ( Rate_monotonic_Control *the_period ); -#include <rtems/ratemon.inl> +#include <rtems/rtems/ratemon.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/region.h b/c/src/exec/rtems/headers/region.h index a5f6aa761c..077d2b76e7 100644 --- a/c/src/exec/rtems/headers/region.h +++ b/c/src/exec/rtems/headers/region.h @@ -30,11 +30,12 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/threadq.h> -#include <rtems/heap.h> +#include <rtems/core/object.h> +#include <rtems/core/threadq.h> +#include <rtems/core/heap.h> #include <rtems/debug.h> +#include <rtems/rtems/attr.h> +#include <rtems/rtems/types.h> /* * The following records define the control block used to manage @@ -158,8 +159,8 @@ rtems_status_code rtems_region_delete( rtems_status_code rtems_region_get_segment( Objects_Id id, unsigned32 size, - rtems_option option_set, - rtems_interval timeout, + rtems_option option_set, + rtems_interval timeout, void **segment ); @@ -278,8 +279,8 @@ STATIC INLINE boolean _Region_Is_null ( Region_Control *the_region ); -#include <rtems/region.inl> -#include <rtems/regionmp.h> +#include <rtems/rtems/region.inl> +#include <rtems/rtems/regionmp.h> /* * _Region_Debug_Walk diff --git a/c/src/exec/rtems/headers/regionmp.h b/c/src/exec/rtems/headers/regionmp.h index 9756103a60..91ac5227f2 100644 --- a/c/src/exec/rtems/headers/regionmp.h +++ b/c/src/exec/rtems/headers/regionmp.h @@ -21,11 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/region.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/options.h> +#include <rtems/rtems/region.h> /* * The following enumerated type defines the list of @@ -87,8 +88,8 @@ rtems_status_code _Region_MP_Send_request_packet ( Objects_Id region_id, void *segment, unsigned32 size, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ); /* diff --git a/c/src/exec/rtems/headers/rtems.h b/c/src/exec/rtems/headers/rtems.h index d1e1e6b406..519d9416d2 100644 --- a/c/src/exec/rtems/headers/rtems.h +++ b/c/src/exec/rtems/headers/rtems.h @@ -24,31 +24,83 @@ extern "C" { #endif #include <rtems/system.h> -#include <rtems/types.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/types.h> +#include <rtems/config.h> #include <rtems/init.h> -#include <rtems/tasks.h> -#include <rtems/intr.h> -#include <rtems/clock.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/intr.h> +#include <rtems/rtems/clock.h> #include <rtems/extension.h> -#include <rtems/timer.h> -#include <rtems/sem.h> -#include <rtems/message.h> -#include <rtems/event.h> -#include <rtems/signal.h> -#include <rtems/event.h> -#include <rtems/part.h> -#include <rtems/region.h> -#include <rtems/dpmem.h> +#include <rtems/rtems/timer.h> +#include <rtems/rtems/sem.h> +#include <rtems/rtems/message.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/signal.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/part.h> +#include <rtems/rtems/region.h> +#include <rtems/rtems/dpmem.h> #include <rtems/io.h> #include <rtems/fatal.h> -#include <rtems/ratemon.h> -#include <rtems/mp.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/rtems/mp.h> -#include <rtems/support.h> +#include <rtems/rtems/support.h> +#include <rtems/sysstate.h> #define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP +/* + * The following define the constants which may be used in name searches. + */ + +#define RTEMS_SEARCH_ALL_NODES OBJECTS_SEARCH_ALL_NODES +#define RTEMS_SEARCH_OTHER_NODES OBJECTS_SEARCH_OTHER_NODES +#define RTEMS_SEARCH_LOCAL_NODE OBJECTS_SEARCH_LOCAL_NODE +#define RTEMS_WHO_AM_I OBJECTS_WHO_AM_I + +/* + * Parameters and return id's for _Objects_Get_next + */ + +#define RTEMS_OBJECT_ID_INITIAL_INDEX OBJECTS_ID_INITIAL_INDEX +#define RTEMS_OBJECT_ID_FINAL_INDEX OBJECTS_ID_FINAL_INDEX + +#define RTEMS_OBJECT_ID_INITIAL(node) OBJECTS_ID_INITIAL(node) +#define RTEMS_OBJECT_ID_FINAL OBJECTS_ID_FINAL + +/* + * The following constant defines the minimum stack size which every + * thread must exceed. + */ + +#define RTEMS_MINIMUM_STACK_SIZE STACK_MINIMUM_SIZE + +/* + * Constant for indefinite wait. (actually an illegal interval) + */ + +#define RTEMS_NO_TIMEOUT WATCHDOG_NO_TIMEOUT + +/* + * An MPCI must support packets of at least this size. + */ + +#define RTEMS_MINIMUM_PACKET_SIZE MP_PACKET_MINIMUM_PACKET_SIZE + +/* + * 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 + * 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 MP_PACKET_MINIMUN_HETERO_CONVERSION + + #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/headers/rtemsapi.h b/c/src/exec/rtems/headers/rtemsapi.h new file mode 100644 index 0000000000..e43de773fd --- /dev/null +++ b/c/src/exec/rtems/headers/rtemsapi.h @@ -0,0 +1,34 @@ +/* + * RTEMS API Support + * + * NOTE: + * + * 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_API_h +#define __RTEMS_API_h + +#include <rtems/config.h> + +/*PAGE + * + * _RTEMS_API_Initialize + * + * XXX + */ + +void _RTEMS_API_Initialize( + rtems_configuration_table *configuration_table +); + +#endif +/* end of include file */ diff --git a/c/src/exec/rtems/headers/sem.h b/c/src/exec/rtems/headers/sem.h index ff8abbc773..1faf3b13e9 100644 --- a/c/src/exec/rtems/headers/sem.h +++ b/c/src/exec/rtems/headers/sem.h @@ -31,23 +31,26 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/attr.h> -#include <rtems/object.h> -#include <rtems/threadq.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/support.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/coremutex.h> +#include <rtems/core/object.h> +#include <rtems/core/coresem.h> +#include <rtems/core/threadq.h> /* * The following defines the control block used to manage each semaphore. */ typedef struct { - Objects_Control Object; - Thread_queue_Control Wait_queue; - rtems_attribute attribute_set; - unsigned32 count; - unsigned32 nest_count; - Thread_Control *holder; - Objects_Id holder_id; + Objects_Control Object; + rtems_attribute attribute_set; + union { + CORE_mutex_Control mutex; + CORE_semaphore_Control semaphore; + } Core_control; } Semaphore_Control; /* @@ -82,11 +85,11 @@ void _Semaphore_Manager_initialization( */ rtems_status_code rtems_semaphore_create( - rtems_name name, - unsigned32 count, - rtems_attribute attribute_set, - rtems_task_priority priority_ceiling, - Objects_Id *id + rtems_name name, + unsigned32 count, + rtems_attribute attribute_set, + rtems_task_priority priority_ceiling, + rtems_id *id ); /* @@ -106,7 +109,7 @@ rtems_status_code rtems_semaphore_create( rtems_status_code rtems_semaphore_ident( rtems_name name, unsigned32 node, - Objects_Id *id + rtems_id *id ); /* @@ -119,7 +122,7 @@ rtems_status_code rtems_semaphore_ident( */ rtems_status_code rtems_semaphore_delete( - Objects_Id id + rtems_id id ); /* @@ -137,8 +140,8 @@ rtems_status_code rtems_semaphore_delete( */ rtems_status_code rtems_semaphore_obtain( - Objects_Id id, - unsigned32 option_set, + rtems_id id, + unsigned32 option_set, rtems_interval timeout ); @@ -155,7 +158,7 @@ rtems_status_code rtems_semaphore_obtain( */ rtems_status_code rtems_semaphore_release( - Objects_Id id + rtems_id id ); /* @@ -213,7 +216,7 @@ STATIC INLINE void _Semaphore_Free ( */ STATIC INLINE Semaphore_Control *_Semaphore_Get ( - Objects_Id id, + rtems_id id, Objects_Locations *location ); @@ -229,8 +232,66 @@ STATIC INLINE boolean _Semaphore_Is_null ( Semaphore_Control *the_semaphore ); -#include <rtems/sem.inl> -#include <rtems/semmp.h> +/* + * _Semaphore_Translate_core_mutex_return_code + * + * DESCRIPTION: + * + * This function returns a RTEMS status code based on the mutex + * status code specified. + */ + +rtems_status_code _Semaphore_Translate_core_mutex_return_code ( + unsigned32 the_mutex_status +); + +/* + * _Semaphore_Translate_core_semaphore_return_code + * + * DESCRIPTION: + * + * This function returns a RTEMS status code based on the semaphore + * status code specified. + */ + +rtems_status_code _Semaphore_Translate_core_semaphore_return_code ( + unsigned32 the_mutex_status +); + +/*PAGE + * + * _Semaphore_Core_mutex_mp_support + * + * DESCRIPTION: + * + * This function processes the global actions necessary for remote + * accesses to a global semaphore based on a core mutex. This function + * is called by the core. + */ + +void _Semaphore_Core_mutex_mp_support ( + Thread_Control *the_thread, + rtems_id id +); + +/*PAGE + * + * _Semaphore_Core_mp_support + * + * DESCRIPTION: + * + * This function processes the global actions necessary for remote + * accesses to a global semaphore based on a core semaphore. This function + * is called by the core. + */ + +void _Semaphore_Core_semaphore_mp_support ( + Thread_Control *the_thread, + rtems_id id +); + +#include <rtems/rtems/sem.inl> +#include <rtems/rtems/semmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/semmp.h b/c/src/exec/rtems/headers/semmp.h index 915e18164c..a796f6ad6b 100644 --- a/c/src/exec/rtems/headers/semmp.h +++ b/c/src/exec/rtems/headers/semmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/sem.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/sem.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of @@ -84,8 +84,8 @@ void _Semaphore_MP_Send_process_packet ( rtems_status_code _Semaphore_MP_Send_request_packet ( Semaphore_MP_Remote_operations operation, Objects_Id semaphore_id, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ); /* diff --git a/c/src/exec/rtems/headers/signal.h b/c/src/exec/rtems/headers/signal.h index 74ff4a57fb..3dcb84513b 100644 --- a/c/src/exec/rtems/headers/signal.h +++ b/c/src/exec/rtems/headers/signal.h @@ -27,11 +27,21 @@ extern "C" { #endif -#include <rtems/asr.h> -#include <rtems/modes.h> -#include <rtems/object.h> -#include <rtems/status.h> -#include <rtems/types.h> +#include <rtems/rtems/asr.h> +#include <rtems/rtems/modes.h> +#include <rtems/core/object.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/types.h> + +/* + * _Signal_Manager_initialization + * + * DESCRIPTION: + * + * This routine performs the initialization necessary for this manager. + */ + +void _Signal_Manager_initialization( void ); /* * rtems_signal_catch @@ -63,7 +73,7 @@ rtems_status_code rtems_signal_send( rtems_signal_set signal_set ); -#include <rtems/signalmp.h> +#include <rtems/rtems/signalmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/signalmp.h b/c/src/exec/rtems/headers/signalmp.h index b72f476bee..fb25c5a62f 100644 --- a/c/src/exec/rtems/headers/signalmp.h +++ b/c/src/exec/rtems/headers/signalmp.h @@ -21,11 +21,11 @@ extern "C" { #endif -#include <rtems/asr.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/asr.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/headers/status.h b/c/src/exec/rtems/headers/status.h index 42b8754780..1c00d47bbf 100644 --- a/c/src/exec/rtems/headers/status.h +++ b/c/src/exec/rtems/headers/status.h @@ -52,13 +52,22 @@ typedef enum { RTEMS_NOT_OWNER_OF_RESOURCE = 23, /* not owner of resource */ RTEMS_NOT_IMPLEMENTED = 24, /* directive not implemented */ RTEMS_INTERNAL_ERROR = 25, /* RTEMS inconsistency detected */ - RTEMS_PROXY_BLOCKING = 26, /* internal multiprocessing only */ - RTEMS_NO_MEMORY = 27 /* could not get enough memory */ + RTEMS_NO_MEMORY = 26 /* could not get enough memory */ } rtems_status_code; #define RTEMS_STATUS_CODES_FIRST RTEMS_SUCCESSFUL #define RTEMS_STATUS_CODES_LAST RTEMS_NO_MEMORY +extern rtems_status_code _Status_Object_name_errors_to_status[]; + +#ifdef INIT +rtems_status_code _Status_Object_name_errors_to_status[] = { + RTEMS_SUCCESSFUL, /* OBJECTS_SUCCESSFUL */ + RTEMS_INVALID_NAME, /* OBJECTS_INVALID_NAME */ + RTEMS_INVALID_NODE /* OBJECTS_INVALID_NODE */ +}; +#endif + /* * rtems_is_status_successful * @@ -86,20 +95,7 @@ STATIC INLINE boolean rtems_are_statuses_equal ( rtems_status_code code2 ); -/* - * _Status_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 _Status_Is_proxy_blocking ( - rtems_status_code code -); - -#include <rtems/status.inl> +#include <rtems/rtems/status.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/support.h b/c/src/exec/rtems/headers/support.h index c6452e0847..3cf7eb6840 100644 --- a/c/src/exec/rtems/headers/support.h +++ b/c/src/exec/rtems/headers/support.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/types.h> +#include <rtems/rtems/types.h> /* * rtems_is_name_valid @@ -70,7 +70,52 @@ STATIC INLINE void rtems_name_to_characters( char *c4 ); -#include <rtems/support.inl> +/* + * rtems_get_class + * + * DESCRIPTION: + * + * This function returns the class portion of the ID. + * + */ + +#define rtems_get_class( _id ) \ + _Objects_Get_class( _id ) + +/* + * rtems_get_node + * + * DESCRIPTION: + * + * This function returns the node portion of the ID. + * + */ + +#define rtems_get_node( _id ) \ + _Objects_Get_node( _id ) + +/* + * rtems_get_index + * + * DESCRIPTION: + * + * This function returns the index portion of the ID. + * + */ + +#define rtems_get_index( _id ) \ + _Objects_Get_index( _id ) + +/* + * Time related + */ + +#define RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms) \ + TOD_MILLISECONDS_TO_MICROSECONDS(_ms) +#define RTEMS_MILLISECONDS_TO_TICKS(_ms) \ + TOD_MILLISECONDS_TO_TICKS(_ms) + +#include <rtems/rtems/support.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/taskmp.h b/c/src/exec/rtems/headers/taskmp.h index d05277a69c..2010485aba 100644 --- a/c/src/exec/rtems/headers/taskmp.h +++ b/c/src/exec/rtems/headers/taskmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/priority.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/priority.h> +#include <rtems/rtems/tasks.h> +#include <rtems/core/thread.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/headers/tasks.h b/c/src/exec/rtems/headers/tasks.h index df623fe175..f3abd875fc 100644 --- a/c/src/exec/rtems/headers/tasks.h +++ b/c/src/exec/rtems/headers/tasks.h @@ -38,16 +38,13 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/message.h> -#include <rtems/object.h> -#include <rtems/part.h> -#include <rtems/region.h> -#include <rtems/sem.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/types.h> +#include <rtems/core/object.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/eventset.h> +#include <rtems/rtems/asr.h> +#include <rtems/rtems/attr.h> /* * Constant to be used as the ID of current task @@ -60,7 +57,106 @@ extern "C" { * interval when a task wishes to yield the CPU. */ -#define RTEMS_YIELD_PROCESSOR RTEMS_NO_TIMEOUT +#define RTEMS_YIELD_PROCESSOR WATCHDOG_NO_TIMEOUT + +/* + * Define the type for an RTEMS API task priority. + */ + +typedef Priority_Control rtems_task_priority; + +#define RTEMS_NO_PRIORITY RTEMS_CURRENT_PRIORITY + +#define RTEMS_MINIMUM_PRIORITY (PRIORITY_MINIMUM + 1) +#define RTEMS_MAXIMUM_PRIORITY PRIORITY_MAXIMUM + +/* + * The following constant is passed to rtems_task_set_priority when the + * caller wants to obtain the current priority. + */ + +#define RTEMS_CURRENT_PRIORITY PRIORITY_MINIMUM + +/* + * 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) + +/* + * External API name for Thread_Control + */ + +typedef Thread_Control rtems_tcb; + +/* + * The following defines the "return type" of an RTEMS task. + */ + +typedef void rtems_task; + +/* + * The following defines the argument to an RTEMS task. + */ + +typedef unsigned32 rtems_task_argument; + +/* + * The following defines the type for the entry point of an RTEMS task. + */ + +typedef rtems_task ( *rtems_task_entry )( + rtems_task_argument + ); + +/* + * The following records define the Initialization Tasks Table. + * Each entry contains the information required by RTEMS to + * create and start a user task automatically at executive + * initialization time. + */ + +typedef struct { + rtems_name name; /* task name */ + unsigned32 stack_size; /* task stack size */ + rtems_task_priority initial_priority; /* task priority */ + rtems_attribute attribute_set; /* task attributes */ + rtems_task_entry entry_point; /* task entry point */ + rtems_mode mode_set; /* task initial mode */ + unsigned32 argument; /* task argument */ +} rtems_initialization_tasks_table; + +/* + * This is the API specific information required by each thread for + * the RTEMS API to function correctly. + */ + + +typedef struct { + unsigned32 Notepads[ RTEMS_NUMBER_NOTEPADS ]; + rtems_event_set pending_events; + rtems_event_set event_condition; + ASR_Information Signal; +} RTEMS_API_Control; /* * The following defines the information control block used to @@ -70,6 +166,13 @@ extern "C" { EXTERN Objects_Information _RTEMS_tasks_Information; /* + * These are used to manage the user initialization tasks. + */ + +EXTERN rtems_initialization_tasks_table *_RTEMS_tasks_User_initialization_tasks; +EXTERN unsigned32 _RTEMS_tasks_Number_of_initialization_tasks; + +/* * _RTEMS_tasks_Manager_initialization * * DESCRIPTION: @@ -78,7 +181,9 @@ EXTERN Objects_Information _RTEMS_tasks_Information; */ void _RTEMS_tasks_Manager_initialization( - unsigned32 maximum_tasks + unsigned32 maximum_tasks, + unsigned32 number_of_initialization_tasks, + rtems_initialization_tasks_table *user_tasks ); /* @@ -284,7 +389,7 @@ rtems_status_code rtems_task_wake_when( */ rtems_status_code rtems_task_wake_after( - rtems_interval ticks + rtems_interval ticks ); /* @@ -313,32 +418,43 @@ STATIC INLINE void _RTEMS_tasks_Free ( ); /* - * _RTEMS_tasks_Cancel_wait + * _RTEMS_tasks_Priority_to_Core * * DESCRIPTION: * - * This routine unblocks the_thread and cancels any timers - * which the_thread has active. + * This function converts an RTEMS API priority into a core priority. */ - -STATIC INLINE void _RTEMS_tasks_Cancel_wait( - Thread_Control *the_thread + +STATIC INLINE Priority_Control _RTEMS_tasks_Priority_to_Core( + rtems_task_priority priority ); -/* - * _RTEMS_Tasks_Priority_to_Core +/*PAGE * - * DESCRIPTION: + * _RTEMS_tasks_Initialize_user_tasks * - * This function converts an RTEMS API priority into a core priority. + * This routine creates and starts all configured user + * initialzation threads. + * + * Input parameters: NONE + * + * Output parameters: NONE */ -STATIC INLINE Priority_Control _RTEMS_Tasks_Priority_to_Core( - rtems_task_priority priority +void _RTEMS_tasks_Initialize_user_tasks( void ); + +/*PAGE + * + * _RTEMS_tasks_Priority_is_valid + * + */ + +STATIC INLINE boolean _RTEMS_tasks_Priority_is_valid ( + rtems_task_priority the_priority ); -#include <rtems/tasks.inl> -#include <rtems/taskmp.h> +#include <rtems/rtems/tasks.inl> +#include <rtems/rtems/taskmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/timer.h b/c/src/exec/rtems/headers/timer.h index bab05378c7..21e88a4baf 100644 --- a/c/src/exec/rtems/headers/timer.h +++ b/c/src/exec/rtems/headers/timer.h @@ -33,10 +33,9 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/core/object.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type details the classes to which a timer @@ -50,10 +49,15 @@ typedef enum { } Timer_Classes; /* - * The following defines the type of a Timer Service Routine. + * The following types define a pointer to a timer service routine. */ - -typedef rtems_timer_service_routine_entry Timer_Service; + +typedef void rtems_timer_service_routine; + +typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )( + rtems_id, + void * + ); /* * The following defines the information control block used to manage @@ -153,10 +157,10 @@ rtems_status_code rtems_timer_delete( */ rtems_status_code rtems_timer_fire_after( - Objects_Id id, - rtems_interval ticks, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data ); /* @@ -170,10 +174,10 @@ rtems_status_code rtems_timer_fire_after( */ rtems_status_code rtems_timer_fire_when( - Objects_Id id, - rtems_time_of_day *wall_time, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data ); /* @@ -283,7 +287,7 @@ STATIC INLINE boolean _Timer_Is_null ( Timer_Control *the_timer ); -#include <rtems/timer.inl> +#include <rtems/rtems/timer.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/headers/types.h b/c/src/exec/rtems/headers/types.h index e4d7c11065..3b7a4a5e12 100644 --- a/c/src/exec/rtems/headers/types.h +++ b/c/src/exec/rtems/headers/types.h @@ -20,9 +20,11 @@ extern "C" { #endif -#include <rtems/object.h> -#include <rtems/priority.h> -#include <rtems/modes.h> +#include <rtems/core/object.h> +#include <rtems/core/priority.h> +#include <rtems/rtems/modes.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> /* * RTEMS basic type definitions @@ -51,18 +53,35 @@ typedef Context_Control_fp rtems_context_fp; typedef CPU_Interrupt_frame rtems_interrupt_frame; /* - * Define the type for an RTEMS API task priority. + * Time related */ -typedef Priority_Control rtems_task_priority; +typedef Watchdog_Interval rtems_interval; +typedef TOD_Control rtems_time_of_day; -#define RTEMS_NO_PRIORITY RTEMS_CURRENT_PRIORITY /* * Define the type for an RTEMS API task mode. */ typedef Modes_Control rtems_mode; +/* + * MPCI related entries + */ + +typedef MP_packet_Classes rtems_mp_packet_classes; +typedef MP_packet_Prefix rtems_packet_prefix; + +typedef MPCI_initialization_entry rtems_mpci_initialization_entry; +typedef MPCI_get_packet_entry rtems_mpci_get_packet_entry; +typedef MPCI_return_packet_entry rtems_mpci_return_packet_entry; +typedef MPCI_send_entry rtems_mpci_send_packet_entry; +typedef MPCI_receive_entry rtems_mpci_receive_packet_entry; + +typedef MPCI_Entry rtems_mpci_entry; + +typedef MPCI_Control rtems_mpci_table; + #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/include/rtems.h b/c/src/exec/rtems/include/rtems.h index d1e1e6b406..519d9416d2 100644 --- a/c/src/exec/rtems/include/rtems.h +++ b/c/src/exec/rtems/include/rtems.h @@ -24,31 +24,83 @@ extern "C" { #endif #include <rtems/system.h> -#include <rtems/types.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/types.h> +#include <rtems/config.h> #include <rtems/init.h> -#include <rtems/tasks.h> -#include <rtems/intr.h> -#include <rtems/clock.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/intr.h> +#include <rtems/rtems/clock.h> #include <rtems/extension.h> -#include <rtems/timer.h> -#include <rtems/sem.h> -#include <rtems/message.h> -#include <rtems/event.h> -#include <rtems/signal.h> -#include <rtems/event.h> -#include <rtems/part.h> -#include <rtems/region.h> -#include <rtems/dpmem.h> +#include <rtems/rtems/timer.h> +#include <rtems/rtems/sem.h> +#include <rtems/rtems/message.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/signal.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/part.h> +#include <rtems/rtems/region.h> +#include <rtems/rtems/dpmem.h> #include <rtems/io.h> #include <rtems/fatal.h> -#include <rtems/ratemon.h> -#include <rtems/mp.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/rtems/mp.h> -#include <rtems/support.h> +#include <rtems/rtems/support.h> +#include <rtems/sysstate.h> #define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP +/* + * The following define the constants which may be used in name searches. + */ + +#define RTEMS_SEARCH_ALL_NODES OBJECTS_SEARCH_ALL_NODES +#define RTEMS_SEARCH_OTHER_NODES OBJECTS_SEARCH_OTHER_NODES +#define RTEMS_SEARCH_LOCAL_NODE OBJECTS_SEARCH_LOCAL_NODE +#define RTEMS_WHO_AM_I OBJECTS_WHO_AM_I + +/* + * Parameters and return id's for _Objects_Get_next + */ + +#define RTEMS_OBJECT_ID_INITIAL_INDEX OBJECTS_ID_INITIAL_INDEX +#define RTEMS_OBJECT_ID_FINAL_INDEX OBJECTS_ID_FINAL_INDEX + +#define RTEMS_OBJECT_ID_INITIAL(node) OBJECTS_ID_INITIAL(node) +#define RTEMS_OBJECT_ID_FINAL OBJECTS_ID_FINAL + +/* + * The following constant defines the minimum stack size which every + * thread must exceed. + */ + +#define RTEMS_MINIMUM_STACK_SIZE STACK_MINIMUM_SIZE + +/* + * Constant for indefinite wait. (actually an illegal interval) + */ + +#define RTEMS_NO_TIMEOUT WATCHDOG_NO_TIMEOUT + +/* + * An MPCI must support packets of at least this size. + */ + +#define RTEMS_MINIMUM_PACKET_SIZE MP_PACKET_MINIMUM_PACKET_SIZE + +/* + * 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 + * 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 MP_PACKET_MINIMUN_HETERO_CONVERSION + + #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/include/rtems/rtems/asr.h b/c/src/exec/rtems/include/rtems/rtems/asr.h index b2147f8df4..55eed78ec2 100644 --- a/c/src/exec/rtems/include/rtems/rtems/asr.h +++ b/c/src/exec/rtems/include/rtems/rtems/asr.h @@ -22,7 +22,7 @@ extern "C" { #endif -#include <rtems/modes.h> +#include <rtems/rtems/modes.h> /* * @@ -54,6 +54,7 @@ typedef rtems_asr ( *rtems_asr_entry )( */ typedef struct { + boolean is_enabled; /* are ASRs enabled currently? */ rtems_asr_entry handler; /* address of RTEMS_ASR */ Modes_Control mode_set; /* RTEMS_ASR mode */ rtems_signal_set signals_posted; /* signal set */ @@ -167,7 +168,7 @@ STATIC INLINE void _ASR_Post_signals( rtems_signal_set *signal_set ); -#include <rtems/asr.inl> +#include <rtems/rtems/asr.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/attr.h b/c/src/exec/rtems/include/rtems/rtems/attr.h index 950d77f73d..2d34dfe380 100644 --- a/c/src/exec/rtems/include/rtems/rtems/attr.h +++ b/c/src/exec/rtems/include/rtems/rtems/attr.h @@ -44,6 +44,9 @@ typedef unsigned32 rtems_attribute; #define RTEMS_NO_INHERIT_PRIORITY 0x00000000 #define RTEMS_INHERIT_PRIORITY 0x00000020 +#define RTEMS_NO_PRIORITY_CEILING 0x00000000 +#define RTEMS_PRIORITY_CEILING 0x00000040 + #if ( CPU_HARDWARE_FP == TRUE ) #define ATTRIBUTES_NOT_SUPPORTED 0 #else @@ -177,7 +180,21 @@ STATIC INLINE boolean _Attributes_Is_inherit_priority( rtems_attribute attribute_set ); -#include <rtems/attr.inl> +/* + * _Attributes_Is_priority_ceiling + * + * DESCRIPTION: + * + * This function returns TRUE if the priority ceiling attribute + * is enabled in the attribute_set and FALSE otherwise. + */ + +STATIC INLINE boolean _Attributes_Is_priority_ceiling( + rtems_attribute attribute_set +); + + +#include <rtems/rtems/attr.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/clock.h b/c/src/exec/rtems/include/rtems/rtems/clock.h index e849ab4f40..595dfcdbaf 100644 --- a/c/src/exec/rtems/include/rtems/rtems/clock.h +++ b/c/src/exec/rtems/include/rtems/rtems/clock.h @@ -29,7 +29,8 @@ extern "C" { #endif -#include <rtems/tod.h> +#include <rtems/core/tod.h> +#include <rtems/rtems/types.h> /* * List of things which can be returned by the rtems_clock_get directive. diff --git a/c/src/exec/rtems/include/rtems/rtems/dpmem.h b/c/src/exec/rtems/include/rtems/rtems/dpmem.h index 2b6016a842..801d5f3864 100644 --- a/c/src/exec/rtems/include/rtems/rtems/dpmem.h +++ b/c/src/exec/rtems/include/rtems/rtems/dpmem.h @@ -32,8 +32,7 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> +#include <rtems/core/object.h> /* * The following structure defines the port control block. Each port @@ -201,7 +200,7 @@ STATIC INLINE boolean _Dual_ported_memory_Is_null( Dual_ported_memory_Control *the_port ); -#include <rtems/dpmem.inl> +#include <rtems/rtems/dpmem.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/event.h b/c/src/exec/rtems/include/rtems/rtems/event.h index aeb71b2abd..05020b9926 100644 --- a/c/src/exec/rtems/include/rtems/rtems/event.h +++ b/c/src/exec/rtems/include/rtems/rtems/event.h @@ -28,11 +28,12 @@ extern "C" { #endif -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> -#include <rtems/eventset.h> +#include <rtems/core/object.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/eventset.h> /* * This constant is passed as the event_in to the @@ -104,9 +105,10 @@ rtems_status_code rtems_event_receive ( */ void _Event_Seize ( - rtems_event_set event_in, - rtems_option option_set, - rtems_interval ticks + rtems_event_set event_in, + rtems_option option_set, + rtems_interval ticks, + rtems_event_set *event_out ); /* @@ -147,8 +149,8 @@ void _Event_Timeout ( EXTERN boolean _Event_Sync; /* event manager sync flag */ -#include <rtems/event.inl> -#include <rtems/eventmp.h> +#include <rtems/rtems/eventmp.h> +#include <rtems/rtems/event.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/eventmp.h b/c/src/exec/rtems/include/rtems/rtems/eventmp.h index 4b42cf791e..86587adc4a 100644 --- a/c/src/exec/rtems/include/rtems/rtems/eventmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/eventmp.h @@ -21,11 +21,11 @@ extern "C" { #endif -#include <rtems/event.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/event.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/include/rtems/rtems/eventset.h b/c/src/exec/rtems/include/rtems/rtems/eventset.h index a25dabe58b..770f607075 100644 --- a/c/src/exec/rtems/include/rtems/rtems/eventset.h +++ b/c/src/exec/rtems/include/rtems/rtems/eventset.h @@ -132,7 +132,7 @@ STATIC INLINE rtems_event_set _Event_sets_Clear( rtems_event_set the_mask ); -#include <rtems/eventset.inl> +#include <rtems/rtems/eventset.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/intr.h b/c/src/exec/rtems/include/rtems/rtems/intr.h index 3669af1ccc..08c249d085 100644 --- a/c/src/exec/rtems/include/rtems/rtems/intr.h +++ b/c/src/exec/rtems/include/rtems/rtems/intr.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* * Interrupt level type @@ -30,6 +30,27 @@ extern "C" { typedef ISR_Level rtems_interrupt_level; /* + * The following type defines the control block used to manage + * the vectors. + */ + +typedef ISR_Vector_number rtems_vector_number; + +/* + * Return type for ISR Handler + */ + +typedef void rtems_isr; + +/* + * Pointer to an ISR Handler + */ + +typedef rtems_isr ( *rtems_isr_entry )( + rtems_vector_number + ); + +/* * _Interrupt_Manager_initialization * * DESCRIPTION: diff --git a/c/src/exec/rtems/include/rtems/rtems/message.h b/c/src/exec/rtems/include/rtems/rtems/message.h index 25188044be..2ee910ac05 100644 --- a/c/src/exec/rtems/include/rtems/rtems/message.h +++ b/c/src/exec/rtems/include/rtems/rtems/message.h @@ -34,10 +34,11 @@ extern "C" { #endif -#include <rtems/types.h> -#include <rtems/chain.h> -#include <rtems/object.h> -#include <rtems/threadq.h> +#include <rtems/rtems/types.h> +#include <rtems/core/chain.h> +#include <rtems/core/object.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/threadq.h> /* * The following defines the data types needed to manipulate @@ -468,8 +469,8 @@ STATIC INLINE Message_queue_Control *_Message_queue_Get ( Objects_Locations *location ); -#include <rtems/message.inl> -#include <rtems/msgmp.h> +#include <rtems/rtems/message.inl> +#include <rtems/rtems/msgmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/modes.h b/c/src/exec/rtems/include/rtems/rtems/modes.h index b3b05b3f85..115898e503 100644 --- a/c/src/exec/rtems/include/rtems/rtems/modes.h +++ b/c/src/exec/rtems/include/rtems/rtems/modes.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* * The following type defines the control block used to manage @@ -173,7 +173,7 @@ STATIC INLINE void _Modes_Change ( Modes_Control *changed ); -#include <rtems/modes.inl> +#include <rtems/rtems/modes.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/mp.h b/c/src/exec/rtems/include/rtems/rtems/mp.h index 96147d3b44..079f55b093 100644 --- a/c/src/exec/rtems/include/rtems/rtems/mp.h +++ b/c/src/exec/rtems/include/rtems/rtems/mp.h @@ -45,20 +45,6 @@ void _Multiprocessing_Manager_initialization ( void ); void rtems_multiprocessing_announce ( void ); -/* - * - * _Multiprocessing_Receive_server - * - * DESCRIPTION: - * - * This routine is a server thread which processes remote requests - * from other nodes. - */ - -Thread _Multiprocessing_Receive_server ( - Thread_Argument ignored -); - #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/include/rtems/rtems/msgmp.h b/c/src/exec/rtems/include/rtems/rtems/msgmp.h index ff84e83ed3..592328678b 100644 --- a/c/src/exec/rtems/include/rtems/rtems/msgmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/msgmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/message.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/message.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of @@ -97,7 +97,7 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( void *buffer, unsigned32 *size_p, rtems_option option_set, - rtems_interval timeout + Watchdog_Interval timeout ); /* diff --git a/c/src/exec/rtems/include/rtems/rtems/options.h b/c/src/exec/rtems/include/rtems/rtems/options.h index b318aad8c9..d8da2f9e86 100644 --- a/c/src/exec/rtems/include/rtems/rtems/options.h +++ b/c/src/exec/rtems/include/rtems/rtems/options.h @@ -69,7 +69,7 @@ STATIC INLINE boolean _Options_Is_any ( rtems_option option_set ); -#include <rtems/options.inl> +#include <rtems/rtems/options.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/part.h b/c/src/exec/rtems/include/rtems/rtems/part.h index 230cf029f7..da163c6beb 100644 --- a/c/src/exec/rtems/include/rtems/rtems/part.h +++ b/c/src/exec/rtems/include/rtems/rtems/part.h @@ -31,10 +31,10 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/address.h> -#include <rtems/attr.h> -#include <rtems/object.h> +#include <rtems/core/address.h> +#include <rtems/core/object.h> +#include <rtems/rtems/attr.h> +#include <rtems/rtems/types.h> /* * The following defines the control block used to manage each partition. @@ -280,8 +280,8 @@ STATIC INLINE boolean _Partition_Is_null ( Partition_Control *the_partition ); -#include <rtems/part.inl> -#include <rtems/partmp.h> +#include <rtems/rtems/part.inl> +#include <rtems/rtems/partmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/partmp.h b/c/src/exec/rtems/include/rtems/rtems/partmp.h index 4b3bf876ff..980eaea853 100644 --- a/c/src/exec/rtems/include/rtems/rtems/partmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/partmp.h @@ -21,11 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/part.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/part.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/include/rtems/rtems/ratemon.h b/c/src/exec/rtems/include/rtems/rtems/ratemon.h index 75a9963888..6b401ba5b0 100644 --- a/c/src/exec/rtems/include/rtems/rtems/ratemon.h +++ b/c/src/exec/rtems/include/rtems/rtems/ratemon.h @@ -29,10 +29,9 @@ extern "C" { #endif -#include <rtems.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 enumerated type defines the states in which a @@ -50,7 +49,7 @@ typedef enum { * directive to obtain status information. */ -#define RTEMS_PERIOD_STATUS RTEMS_NO_TIMEOUT +#define RTEMS_PERIOD_STATUS WATCHDOG_NO_TIMEOUT /* * The following structure defines the control block used to manage @@ -148,8 +147,8 @@ rtems_status_code rtems_rate_monotonic_delete( */ rtems_status_code rtems_rate_monotonic_period( - Objects_Id id, - rtems_interval length + Objects_Id id, + rtems_interval length ); /* @@ -276,7 +275,7 @@ STATIC INLINE boolean _Rate_monotonic_Is_null ( Rate_monotonic_Control *the_period ); -#include <rtems/ratemon.inl> +#include <rtems/rtems/ratemon.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/region.h b/c/src/exec/rtems/include/rtems/rtems/region.h index a5f6aa761c..077d2b76e7 100644 --- a/c/src/exec/rtems/include/rtems/rtems/region.h +++ b/c/src/exec/rtems/include/rtems/rtems/region.h @@ -30,11 +30,12 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/threadq.h> -#include <rtems/heap.h> +#include <rtems/core/object.h> +#include <rtems/core/threadq.h> +#include <rtems/core/heap.h> #include <rtems/debug.h> +#include <rtems/rtems/attr.h> +#include <rtems/rtems/types.h> /* * The following records define the control block used to manage @@ -158,8 +159,8 @@ rtems_status_code rtems_region_delete( rtems_status_code rtems_region_get_segment( Objects_Id id, unsigned32 size, - rtems_option option_set, - rtems_interval timeout, + rtems_option option_set, + rtems_interval timeout, void **segment ); @@ -278,8 +279,8 @@ STATIC INLINE boolean _Region_Is_null ( Region_Control *the_region ); -#include <rtems/region.inl> -#include <rtems/regionmp.h> +#include <rtems/rtems/region.inl> +#include <rtems/rtems/regionmp.h> /* * _Region_Debug_Walk diff --git a/c/src/exec/rtems/include/rtems/rtems/regionmp.h b/c/src/exec/rtems/include/rtems/rtems/regionmp.h index 9756103a60..91ac5227f2 100644 --- a/c/src/exec/rtems/include/rtems/rtems/regionmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/regionmp.h @@ -21,11 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/region.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/options.h> +#include <rtems/rtems/region.h> /* * The following enumerated type defines the list of @@ -87,8 +88,8 @@ rtems_status_code _Region_MP_Send_request_packet ( Objects_Id region_id, void *segment, unsigned32 size, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ); /* diff --git a/c/src/exec/rtems/include/rtems/rtems/rtemsapi.h b/c/src/exec/rtems/include/rtems/rtems/rtemsapi.h new file mode 100644 index 0000000000..e43de773fd --- /dev/null +++ b/c/src/exec/rtems/include/rtems/rtems/rtemsapi.h @@ -0,0 +1,34 @@ +/* + * RTEMS API Support + * + * NOTE: + * + * 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_API_h +#define __RTEMS_API_h + +#include <rtems/config.h> + +/*PAGE + * + * _RTEMS_API_Initialize + * + * XXX + */ + +void _RTEMS_API_Initialize( + rtems_configuration_table *configuration_table +); + +#endif +/* end of include file */ diff --git a/c/src/exec/rtems/include/rtems/rtems/sem.h b/c/src/exec/rtems/include/rtems/rtems/sem.h index ff8abbc773..1faf3b13e9 100644 --- a/c/src/exec/rtems/include/rtems/rtems/sem.h +++ b/c/src/exec/rtems/include/rtems/rtems/sem.h @@ -31,23 +31,26 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/attr.h> -#include <rtems/object.h> -#include <rtems/threadq.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/support.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/coremutex.h> +#include <rtems/core/object.h> +#include <rtems/core/coresem.h> +#include <rtems/core/threadq.h> /* * The following defines the control block used to manage each semaphore. */ typedef struct { - Objects_Control Object; - Thread_queue_Control Wait_queue; - rtems_attribute attribute_set; - unsigned32 count; - unsigned32 nest_count; - Thread_Control *holder; - Objects_Id holder_id; + Objects_Control Object; + rtems_attribute attribute_set; + union { + CORE_mutex_Control mutex; + CORE_semaphore_Control semaphore; + } Core_control; } Semaphore_Control; /* @@ -82,11 +85,11 @@ void _Semaphore_Manager_initialization( */ rtems_status_code rtems_semaphore_create( - rtems_name name, - unsigned32 count, - rtems_attribute attribute_set, - rtems_task_priority priority_ceiling, - Objects_Id *id + rtems_name name, + unsigned32 count, + rtems_attribute attribute_set, + rtems_task_priority priority_ceiling, + rtems_id *id ); /* @@ -106,7 +109,7 @@ rtems_status_code rtems_semaphore_create( rtems_status_code rtems_semaphore_ident( rtems_name name, unsigned32 node, - Objects_Id *id + rtems_id *id ); /* @@ -119,7 +122,7 @@ rtems_status_code rtems_semaphore_ident( */ rtems_status_code rtems_semaphore_delete( - Objects_Id id + rtems_id id ); /* @@ -137,8 +140,8 @@ rtems_status_code rtems_semaphore_delete( */ rtems_status_code rtems_semaphore_obtain( - Objects_Id id, - unsigned32 option_set, + rtems_id id, + unsigned32 option_set, rtems_interval timeout ); @@ -155,7 +158,7 @@ rtems_status_code rtems_semaphore_obtain( */ rtems_status_code rtems_semaphore_release( - Objects_Id id + rtems_id id ); /* @@ -213,7 +216,7 @@ STATIC INLINE void _Semaphore_Free ( */ STATIC INLINE Semaphore_Control *_Semaphore_Get ( - Objects_Id id, + rtems_id id, Objects_Locations *location ); @@ -229,8 +232,66 @@ STATIC INLINE boolean _Semaphore_Is_null ( Semaphore_Control *the_semaphore ); -#include <rtems/sem.inl> -#include <rtems/semmp.h> +/* + * _Semaphore_Translate_core_mutex_return_code + * + * DESCRIPTION: + * + * This function returns a RTEMS status code based on the mutex + * status code specified. + */ + +rtems_status_code _Semaphore_Translate_core_mutex_return_code ( + unsigned32 the_mutex_status +); + +/* + * _Semaphore_Translate_core_semaphore_return_code + * + * DESCRIPTION: + * + * This function returns a RTEMS status code based on the semaphore + * status code specified. + */ + +rtems_status_code _Semaphore_Translate_core_semaphore_return_code ( + unsigned32 the_mutex_status +); + +/*PAGE + * + * _Semaphore_Core_mutex_mp_support + * + * DESCRIPTION: + * + * This function processes the global actions necessary for remote + * accesses to a global semaphore based on a core mutex. This function + * is called by the core. + */ + +void _Semaphore_Core_mutex_mp_support ( + Thread_Control *the_thread, + rtems_id id +); + +/*PAGE + * + * _Semaphore_Core_mp_support + * + * DESCRIPTION: + * + * This function processes the global actions necessary for remote + * accesses to a global semaphore based on a core semaphore. This function + * is called by the core. + */ + +void _Semaphore_Core_semaphore_mp_support ( + Thread_Control *the_thread, + rtems_id id +); + +#include <rtems/rtems/sem.inl> +#include <rtems/rtems/semmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/semmp.h b/c/src/exec/rtems/include/rtems/rtems/semmp.h index 915e18164c..a796f6ad6b 100644 --- a/c/src/exec/rtems/include/rtems/rtems/semmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/semmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/sem.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/sem.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of @@ -84,8 +84,8 @@ void _Semaphore_MP_Send_process_packet ( rtems_status_code _Semaphore_MP_Send_request_packet ( Semaphore_MP_Remote_operations operation, Objects_Id semaphore_id, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ); /* diff --git a/c/src/exec/rtems/include/rtems/rtems/signal.h b/c/src/exec/rtems/include/rtems/rtems/signal.h index 74ff4a57fb..3dcb84513b 100644 --- a/c/src/exec/rtems/include/rtems/rtems/signal.h +++ b/c/src/exec/rtems/include/rtems/rtems/signal.h @@ -27,11 +27,21 @@ extern "C" { #endif -#include <rtems/asr.h> -#include <rtems/modes.h> -#include <rtems/object.h> -#include <rtems/status.h> -#include <rtems/types.h> +#include <rtems/rtems/asr.h> +#include <rtems/rtems/modes.h> +#include <rtems/core/object.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/types.h> + +/* + * _Signal_Manager_initialization + * + * DESCRIPTION: + * + * This routine performs the initialization necessary for this manager. + */ + +void _Signal_Manager_initialization( void ); /* * rtems_signal_catch @@ -63,7 +73,7 @@ rtems_status_code rtems_signal_send( rtems_signal_set signal_set ); -#include <rtems/signalmp.h> +#include <rtems/rtems/signalmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/signalmp.h b/c/src/exec/rtems/include/rtems/rtems/signalmp.h index b72f476bee..fb25c5a62f 100644 --- a/c/src/exec/rtems/include/rtems/rtems/signalmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/signalmp.h @@ -21,11 +21,11 @@ extern "C" { #endif -#include <rtems/asr.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/asr.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/include/rtems/rtems/status.h b/c/src/exec/rtems/include/rtems/rtems/status.h index 42b8754780..1c00d47bbf 100644 --- a/c/src/exec/rtems/include/rtems/rtems/status.h +++ b/c/src/exec/rtems/include/rtems/rtems/status.h @@ -52,13 +52,22 @@ typedef enum { RTEMS_NOT_OWNER_OF_RESOURCE = 23, /* not owner of resource */ RTEMS_NOT_IMPLEMENTED = 24, /* directive not implemented */ RTEMS_INTERNAL_ERROR = 25, /* RTEMS inconsistency detected */ - RTEMS_PROXY_BLOCKING = 26, /* internal multiprocessing only */ - RTEMS_NO_MEMORY = 27 /* could not get enough memory */ + RTEMS_NO_MEMORY = 26 /* could not get enough memory */ } rtems_status_code; #define RTEMS_STATUS_CODES_FIRST RTEMS_SUCCESSFUL #define RTEMS_STATUS_CODES_LAST RTEMS_NO_MEMORY +extern rtems_status_code _Status_Object_name_errors_to_status[]; + +#ifdef INIT +rtems_status_code _Status_Object_name_errors_to_status[] = { + RTEMS_SUCCESSFUL, /* OBJECTS_SUCCESSFUL */ + RTEMS_INVALID_NAME, /* OBJECTS_INVALID_NAME */ + RTEMS_INVALID_NODE /* OBJECTS_INVALID_NODE */ +}; +#endif + /* * rtems_is_status_successful * @@ -86,20 +95,7 @@ STATIC INLINE boolean rtems_are_statuses_equal ( rtems_status_code code2 ); -/* - * _Status_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 _Status_Is_proxy_blocking ( - rtems_status_code code -); - -#include <rtems/status.inl> +#include <rtems/rtems/status.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/support.h b/c/src/exec/rtems/include/rtems/rtems/support.h index c6452e0847..3cf7eb6840 100644 --- a/c/src/exec/rtems/include/rtems/rtems/support.h +++ b/c/src/exec/rtems/include/rtems/rtems/support.h @@ -21,7 +21,7 @@ extern "C" { #endif -#include <rtems/types.h> +#include <rtems/rtems/types.h> /* * rtems_is_name_valid @@ -70,7 +70,52 @@ STATIC INLINE void rtems_name_to_characters( char *c4 ); -#include <rtems/support.inl> +/* + * rtems_get_class + * + * DESCRIPTION: + * + * This function returns the class portion of the ID. + * + */ + +#define rtems_get_class( _id ) \ + _Objects_Get_class( _id ) + +/* + * rtems_get_node + * + * DESCRIPTION: + * + * This function returns the node portion of the ID. + * + */ + +#define rtems_get_node( _id ) \ + _Objects_Get_node( _id ) + +/* + * rtems_get_index + * + * DESCRIPTION: + * + * This function returns the index portion of the ID. + * + */ + +#define rtems_get_index( _id ) \ + _Objects_Get_index( _id ) + +/* + * Time related + */ + +#define RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms) \ + TOD_MILLISECONDS_TO_MICROSECONDS(_ms) +#define RTEMS_MILLISECONDS_TO_TICKS(_ms) \ + TOD_MILLISECONDS_TO_TICKS(_ms) + +#include <rtems/rtems/support.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/taskmp.h b/c/src/exec/rtems/include/rtems/rtems/taskmp.h index d05277a69c..2010485aba 100644 --- a/c/src/exec/rtems/include/rtems/rtems/taskmp.h +++ b/c/src/exec/rtems/include/rtems/rtems/taskmp.h @@ -21,12 +21,12 @@ extern "C" { #endif -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/priority.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/priority.h> +#include <rtems/rtems/tasks.h> +#include <rtems/core/thread.h> /* * The following enumerated type defines the list of diff --git a/c/src/exec/rtems/include/rtems/rtems/tasks.h b/c/src/exec/rtems/include/rtems/rtems/tasks.h index df623fe175..f3abd875fc 100644 --- a/c/src/exec/rtems/include/rtems/rtems/tasks.h +++ b/c/src/exec/rtems/include/rtems/rtems/tasks.h @@ -38,16 +38,13 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/message.h> -#include <rtems/object.h> -#include <rtems/part.h> -#include <rtems/region.h> -#include <rtems/sem.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/types.h> +#include <rtems/core/object.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/eventset.h> +#include <rtems/rtems/asr.h> +#include <rtems/rtems/attr.h> /* * Constant to be used as the ID of current task @@ -60,7 +57,106 @@ extern "C" { * interval when a task wishes to yield the CPU. */ -#define RTEMS_YIELD_PROCESSOR RTEMS_NO_TIMEOUT +#define RTEMS_YIELD_PROCESSOR WATCHDOG_NO_TIMEOUT + +/* + * Define the type for an RTEMS API task priority. + */ + +typedef Priority_Control rtems_task_priority; + +#define RTEMS_NO_PRIORITY RTEMS_CURRENT_PRIORITY + +#define RTEMS_MINIMUM_PRIORITY (PRIORITY_MINIMUM + 1) +#define RTEMS_MAXIMUM_PRIORITY PRIORITY_MAXIMUM + +/* + * The following constant is passed to rtems_task_set_priority when the + * caller wants to obtain the current priority. + */ + +#define RTEMS_CURRENT_PRIORITY PRIORITY_MINIMUM + +/* + * 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) + +/* + * External API name for Thread_Control + */ + +typedef Thread_Control rtems_tcb; + +/* + * The following defines the "return type" of an RTEMS task. + */ + +typedef void rtems_task; + +/* + * The following defines the argument to an RTEMS task. + */ + +typedef unsigned32 rtems_task_argument; + +/* + * The following defines the type for the entry point of an RTEMS task. + */ + +typedef rtems_task ( *rtems_task_entry )( + rtems_task_argument + ); + +/* + * The following records define the Initialization Tasks Table. + * Each entry contains the information required by RTEMS to + * create and start a user task automatically at executive + * initialization time. + */ + +typedef struct { + rtems_name name; /* task name */ + unsigned32 stack_size; /* task stack size */ + rtems_task_priority initial_priority; /* task priority */ + rtems_attribute attribute_set; /* task attributes */ + rtems_task_entry entry_point; /* task entry point */ + rtems_mode mode_set; /* task initial mode */ + unsigned32 argument; /* task argument */ +} rtems_initialization_tasks_table; + +/* + * This is the API specific information required by each thread for + * the RTEMS API to function correctly. + */ + + +typedef struct { + unsigned32 Notepads[ RTEMS_NUMBER_NOTEPADS ]; + rtems_event_set pending_events; + rtems_event_set event_condition; + ASR_Information Signal; +} RTEMS_API_Control; /* * The following defines the information control block used to @@ -70,6 +166,13 @@ extern "C" { EXTERN Objects_Information _RTEMS_tasks_Information; /* + * These are used to manage the user initialization tasks. + */ + +EXTERN rtems_initialization_tasks_table *_RTEMS_tasks_User_initialization_tasks; +EXTERN unsigned32 _RTEMS_tasks_Number_of_initialization_tasks; + +/* * _RTEMS_tasks_Manager_initialization * * DESCRIPTION: @@ -78,7 +181,9 @@ EXTERN Objects_Information _RTEMS_tasks_Information; */ void _RTEMS_tasks_Manager_initialization( - unsigned32 maximum_tasks + unsigned32 maximum_tasks, + unsigned32 number_of_initialization_tasks, + rtems_initialization_tasks_table *user_tasks ); /* @@ -284,7 +389,7 @@ rtems_status_code rtems_task_wake_when( */ rtems_status_code rtems_task_wake_after( - rtems_interval ticks + rtems_interval ticks ); /* @@ -313,32 +418,43 @@ STATIC INLINE void _RTEMS_tasks_Free ( ); /* - * _RTEMS_tasks_Cancel_wait + * _RTEMS_tasks_Priority_to_Core * * DESCRIPTION: * - * This routine unblocks the_thread and cancels any timers - * which the_thread has active. + * This function converts an RTEMS API priority into a core priority. */ - -STATIC INLINE void _RTEMS_tasks_Cancel_wait( - Thread_Control *the_thread + +STATIC INLINE Priority_Control _RTEMS_tasks_Priority_to_Core( + rtems_task_priority priority ); -/* - * _RTEMS_Tasks_Priority_to_Core +/*PAGE * - * DESCRIPTION: + * _RTEMS_tasks_Initialize_user_tasks * - * This function converts an RTEMS API priority into a core priority. + * This routine creates and starts all configured user + * initialzation threads. + * + * Input parameters: NONE + * + * Output parameters: NONE */ -STATIC INLINE Priority_Control _RTEMS_Tasks_Priority_to_Core( - rtems_task_priority priority +void _RTEMS_tasks_Initialize_user_tasks( void ); + +/*PAGE + * + * _RTEMS_tasks_Priority_is_valid + * + */ + +STATIC INLINE boolean _RTEMS_tasks_Priority_is_valid ( + rtems_task_priority the_priority ); -#include <rtems/tasks.inl> -#include <rtems/taskmp.h> +#include <rtems/rtems/tasks.inl> +#include <rtems/rtems/taskmp.h> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/timer.h b/c/src/exec/rtems/include/rtems/rtems/timer.h index bab05378c7..21e88a4baf 100644 --- a/c/src/exec/rtems/include/rtems/rtems/timer.h +++ b/c/src/exec/rtems/include/rtems/rtems/timer.h @@ -33,10 +33,9 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/core/object.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /* * The following enumerated type details the classes to which a timer @@ -50,10 +49,15 @@ typedef enum { } Timer_Classes; /* - * The following defines the type of a Timer Service Routine. + * The following types define a pointer to a timer service routine. */ - -typedef rtems_timer_service_routine_entry Timer_Service; + +typedef void rtems_timer_service_routine; + +typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )( + rtems_id, + void * + ); /* * The following defines the information control block used to manage @@ -153,10 +157,10 @@ rtems_status_code rtems_timer_delete( */ rtems_status_code rtems_timer_fire_after( - Objects_Id id, - rtems_interval ticks, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data ); /* @@ -170,10 +174,10 @@ rtems_status_code rtems_timer_fire_after( */ rtems_status_code rtems_timer_fire_when( - Objects_Id id, - rtems_time_of_day *wall_time, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data ); /* @@ -283,7 +287,7 @@ STATIC INLINE boolean _Timer_Is_null ( Timer_Control *the_timer ); -#include <rtems/timer.inl> +#include <rtems/rtems/timer.inl> #ifdef __cplusplus } diff --git a/c/src/exec/rtems/include/rtems/rtems/types.h b/c/src/exec/rtems/include/rtems/rtems/types.h index e4d7c11065..3b7a4a5e12 100644 --- a/c/src/exec/rtems/include/rtems/rtems/types.h +++ b/c/src/exec/rtems/include/rtems/rtems/types.h @@ -20,9 +20,11 @@ extern "C" { #endif -#include <rtems/object.h> -#include <rtems/priority.h> -#include <rtems/modes.h> +#include <rtems/core/object.h> +#include <rtems/core/priority.h> +#include <rtems/rtems/modes.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> /* * RTEMS basic type definitions @@ -51,18 +53,35 @@ typedef Context_Control_fp rtems_context_fp; typedef CPU_Interrupt_frame rtems_interrupt_frame; /* - * Define the type for an RTEMS API task priority. + * Time related */ -typedef Priority_Control rtems_task_priority; +typedef Watchdog_Interval rtems_interval; +typedef TOD_Control rtems_time_of_day; -#define RTEMS_NO_PRIORITY RTEMS_CURRENT_PRIORITY /* * Define the type for an RTEMS API task mode. */ typedef Modes_Control rtems_mode; +/* + * MPCI related entries + */ + +typedef MP_packet_Classes rtems_mp_packet_classes; +typedef MP_packet_Prefix rtems_packet_prefix; + +typedef MPCI_initialization_entry rtems_mpci_initialization_entry; +typedef MPCI_get_packet_entry rtems_mpci_get_packet_entry; +typedef MPCI_return_packet_entry rtems_mpci_return_packet_entry; +typedef MPCI_send_entry rtems_mpci_send_packet_entry; +typedef MPCI_receive_entry rtems_mpci_receive_packet_entry; + +typedef MPCI_Entry rtems_mpci_entry; + +typedef MPCI_Control rtems_mpci_table; + #ifdef __cplusplus } #endif diff --git a/c/src/exec/rtems/inline/asr.inl b/c/src/exec/rtems/inline/asr.inl index a2da1ae311..fb1d7a8efc 100644 --- a/c/src/exec/rtems/inline/asr.inl +++ b/c/src/exec/rtems/inline/asr.inl @@ -17,7 +17,7 @@ #ifndef __INLINE_ASR_inl #define __INLINE_ASR_inl -#include <rtems/isr.h> +#include <rtems/core/isr.h> /*PAGE * @@ -29,6 +29,7 @@ STATIC INLINE void _ASR_Initialize ( ASR_Information *information ) { + information->is_enabled = TRUE; information->handler = NULL; information->mode_set = RTEMS_DEFAULT_MODES; information->signals_posted = 0; @@ -47,7 +48,7 @@ STATIC INLINE void _ASR_Swap_signals ( ) { rtems_signal_set _signals; - ISR_Level _level; + ISR_Level _level; _ISR_Disable( _level ); _signals = information->signals_pending; diff --git a/c/src/exec/rtems/inline/attr.inl b/c/src/exec/rtems/inline/attr.inl index 15a9296b7e..0f1190fe93 100644 --- a/c/src/exec/rtems/inline/attr.inl +++ b/c/src/exec/rtems/inline/attr.inl @@ -108,5 +108,18 @@ STATIC INLINE boolean _Attributes_Is_inherit_priority( return ( attribute_set & RTEMS_INHERIT_PRIORITY ); } +/*PAGE + * + * _Attributes_Is_priority_ceiling + * + */ + +STATIC INLINE boolean _Attributes_Is_priority_ceiling( + rtems_attribute attribute_set +) +{ + return ( attribute_set & RTEMS_PRIORITY_CEILING ); +} + #endif /* end of include file */ diff --git a/c/src/exec/rtems/inline/event.inl b/c/src/exec/rtems/inline/event.inl index 2f2f480001..5377144f98 100644 --- a/c/src/exec/rtems/inline/event.inl +++ b/c/src/exec/rtems/inline/event.inl @@ -24,6 +24,12 @@ STATIC INLINE void _Event_Manager_initialization( void ) { _Event_Sync = FALSE; + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( MP_PACKET_EVENT, _Event_MP_Process_packet ); } #endif diff --git a/c/src/exec/rtems/inline/message.inl b/c/src/exec/rtems/inline/message.inl index 8837159580..5b34ce5a83 100644 --- a/c/src/exec/rtems/inline/message.inl +++ b/c/src/exec/rtems/inline/message.inl @@ -17,7 +17,7 @@ #ifndef __MESSAGE_QUEUE_inl #define __MESSAGE_QUEUE_inl -#include <rtems/wkspace.h> +#include <rtems/core/wkspace.h> /*PAGE * diff --git a/c/src/exec/rtems/inline/modes.inl b/c/src/exec/rtems/inline/modes.inl index 8fe964e8d8..6d4b6d06d0 100644 --- a/c/src/exec/rtems/inline/modes.inl +++ b/c/src/exec/rtems/inline/modes.inl @@ -53,7 +53,7 @@ STATIC INLINE boolean _Modes_Is_asr_disabled ( Modes_Control mode_set ) { - return ( mode_set & RTEMS_ASR_MASK ); + return (mode_set & RTEMS_ASR_MASK) == RTEMS_NO_ASR; } /*PAGE @@ -66,7 +66,7 @@ STATIC INLINE boolean _Modes_Is_preempt ( Modes_Control mode_set ) { - return ( ( mode_set & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT ); + return (mode_set & RTEMS_PREEMPT_MASK) == RTEMS_PREEMPT; } /*PAGE @@ -79,8 +79,7 @@ STATIC INLINE boolean _Modes_Is_timeslice ( Modes_Control mode_set ) { - return ((mode_set & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == - (RTEMS_TIMESLICE|RTEMS_PREEMPT) ); + return (mode_set & RTEMS_TIMESLICE_MASK) == RTEMS_TIMESLICE; } /*PAGE diff --git a/c/src/exec/rtems/inline/rtems/rtems/asr.inl b/c/src/exec/rtems/inline/rtems/rtems/asr.inl index a2da1ae311..fb1d7a8efc 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/asr.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/asr.inl @@ -17,7 +17,7 @@ #ifndef __INLINE_ASR_inl #define __INLINE_ASR_inl -#include <rtems/isr.h> +#include <rtems/core/isr.h> /*PAGE * @@ -29,6 +29,7 @@ STATIC INLINE void _ASR_Initialize ( ASR_Information *information ) { + information->is_enabled = TRUE; information->handler = NULL; information->mode_set = RTEMS_DEFAULT_MODES; information->signals_posted = 0; @@ -47,7 +48,7 @@ STATIC INLINE void _ASR_Swap_signals ( ) { rtems_signal_set _signals; - ISR_Level _level; + ISR_Level _level; _ISR_Disable( _level ); _signals = information->signals_pending; diff --git a/c/src/exec/rtems/inline/rtems/rtems/attr.inl b/c/src/exec/rtems/inline/rtems/rtems/attr.inl index 15a9296b7e..0f1190fe93 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/attr.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/attr.inl @@ -108,5 +108,18 @@ STATIC INLINE boolean _Attributes_Is_inherit_priority( return ( attribute_set & RTEMS_INHERIT_PRIORITY ); } +/*PAGE + * + * _Attributes_Is_priority_ceiling + * + */ + +STATIC INLINE boolean _Attributes_Is_priority_ceiling( + rtems_attribute attribute_set +) +{ + return ( attribute_set & RTEMS_PRIORITY_CEILING ); +} + #endif /* end of include file */ diff --git a/c/src/exec/rtems/inline/rtems/rtems/event.inl b/c/src/exec/rtems/inline/rtems/rtems/event.inl index 2f2f480001..5377144f98 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/event.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/event.inl @@ -24,6 +24,12 @@ STATIC INLINE void _Event_Manager_initialization( void ) { _Event_Sync = FALSE; + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( MP_PACKET_EVENT, _Event_MP_Process_packet ); } #endif diff --git a/c/src/exec/rtems/inline/rtems/rtems/message.inl b/c/src/exec/rtems/inline/rtems/rtems/message.inl index 8837159580..5b34ce5a83 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/message.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/message.inl @@ -17,7 +17,7 @@ #ifndef __MESSAGE_QUEUE_inl #define __MESSAGE_QUEUE_inl -#include <rtems/wkspace.h> +#include <rtems/core/wkspace.h> /*PAGE * diff --git a/c/src/exec/rtems/inline/rtems/rtems/modes.inl b/c/src/exec/rtems/inline/rtems/rtems/modes.inl index 8fe964e8d8..6d4b6d06d0 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/modes.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/modes.inl @@ -53,7 +53,7 @@ STATIC INLINE boolean _Modes_Is_asr_disabled ( Modes_Control mode_set ) { - return ( mode_set & RTEMS_ASR_MASK ); + return (mode_set & RTEMS_ASR_MASK) == RTEMS_NO_ASR; } /*PAGE @@ -66,7 +66,7 @@ STATIC INLINE boolean _Modes_Is_preempt ( Modes_Control mode_set ) { - return ( ( mode_set & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT ); + return (mode_set & RTEMS_PREEMPT_MASK) == RTEMS_PREEMPT; } /*PAGE @@ -79,8 +79,7 @@ STATIC INLINE boolean _Modes_Is_timeslice ( Modes_Control mode_set ) { - return ((mode_set & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == - (RTEMS_TIMESLICE|RTEMS_PREEMPT) ); + return (mode_set & RTEMS_TIMESLICE_MASK) == RTEMS_TIMESLICE; } /*PAGE diff --git a/c/src/exec/rtems/inline/rtems/rtems/status.inl b/c/src/exec/rtems/inline/rtems/rtems/status.inl index bd158e535b..1db5a1e89f 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/status.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/status.inl @@ -44,17 +44,5 @@ STATIC INLINE boolean rtems_are_statuses_equal( return (code1 == code2); } -/* - * _Status_Is_proxy_blocking - * - */ - -STATIC INLINE boolean _Status_Is_proxy_blocking ( - rtems_status_code code -) -{ - return (code == RTEMS_PROXY_BLOCKING); -} - #endif /* end of include file */ diff --git a/c/src/exec/rtems/inline/rtems/rtems/tasks.inl b/c/src/exec/rtems/inline/rtems/rtems/tasks.inl index 2aec654571..ccd2de2613 100644 --- a/c/src/exec/rtems/inline/rtems/rtems/tasks.inl +++ b/c/src/exec/rtems/inline/rtems/rtems/tasks.inl @@ -17,11 +17,6 @@ #ifndef __RTEMS_TASKS_inl #define __RTEMS_TASKS_inl -#include <rtems/msgmp.h> -#include <rtems/partmp.h> -#include <rtems/regionmp.h> -#include <rtems/semmp.h> - /*PAGE * * _RTEMS_tasks_Allocate @@ -51,60 +46,28 @@ STATIC INLINE void _RTEMS_tasks_Free ( /*PAGE * - * _RTEMS_tasks_Cancel_wait - * + * _RTEMS_tasks_Priority_to_Core */ - -STATIC INLINE void _RTEMS_tasks_Cancel_wait( - Thread_Control *the_thread + +STATIC INLINE Priority_Control _RTEMS_tasks_Priority_to_Core( + rtems_task_priority priority ) { - States_Control state; - States_Control remote_state; - - state = the_thread->current_state; - -/* XXX do this with the object class */ - if ( _States_Is_waiting_on_thread_queue( state ) ) { - if ( _States_Is_waiting_for_rpc_reply( state ) && - _States_Is_locally_blocked( state ) ) { - remote_state = _States_Clear( - STATES_WAITING_FOR_RPC_REPLY | STATES_TRANSIENT, - state - ); - - switch ( remote_state ) { - - case STATES_WAITING_FOR_BUFFER: - _Partition_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_SEGMENT: - _Region_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_SEMAPHORE: - _Semaphore_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_MESSAGE: - _Message_queue_MP_Send_extract_proxy( the_thread ); - break; - } - } - _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); - } - else if ( _Watchdog_Is_active( &the_thread->Timer ) ) - (void) _Watchdog_Remove( &the_thread->Timer ); + return (Priority_Control) priority; } /*PAGE * - * _RTEMS_Tasks_Priority_to_Core + * _RTEMS_tasks_Priority_is_valid + * */ -STATIC INLINE Priority_Control _RTEMS_Tasks_Priority_to_Core( - rtems_task_priority priority +STATIC INLINE boolean _RTEMS_tasks_Priority_is_valid ( + rtems_task_priority the_priority ) { - return (Priority_Control) priority; + return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) && + ( the_priority <= RTEMS_MAXIMUM_PRIORITY ) ); } #endif diff --git a/c/src/exec/rtems/inline/status.inl b/c/src/exec/rtems/inline/status.inl index bd158e535b..1db5a1e89f 100644 --- a/c/src/exec/rtems/inline/status.inl +++ b/c/src/exec/rtems/inline/status.inl @@ -44,17 +44,5 @@ STATIC INLINE boolean rtems_are_statuses_equal( return (code1 == code2); } -/* - * _Status_Is_proxy_blocking - * - */ - -STATIC INLINE boolean _Status_Is_proxy_blocking ( - rtems_status_code code -) -{ - return (code == RTEMS_PROXY_BLOCKING); -} - #endif /* end of include file */ diff --git a/c/src/exec/rtems/inline/tasks.inl b/c/src/exec/rtems/inline/tasks.inl index 2aec654571..ccd2de2613 100644 --- a/c/src/exec/rtems/inline/tasks.inl +++ b/c/src/exec/rtems/inline/tasks.inl @@ -17,11 +17,6 @@ #ifndef __RTEMS_TASKS_inl #define __RTEMS_TASKS_inl -#include <rtems/msgmp.h> -#include <rtems/partmp.h> -#include <rtems/regionmp.h> -#include <rtems/semmp.h> - /*PAGE * * _RTEMS_tasks_Allocate @@ -51,60 +46,28 @@ STATIC INLINE void _RTEMS_tasks_Free ( /*PAGE * - * _RTEMS_tasks_Cancel_wait - * + * _RTEMS_tasks_Priority_to_Core */ - -STATIC INLINE void _RTEMS_tasks_Cancel_wait( - Thread_Control *the_thread + +STATIC INLINE Priority_Control _RTEMS_tasks_Priority_to_Core( + rtems_task_priority priority ) { - States_Control state; - States_Control remote_state; - - state = the_thread->current_state; - -/* XXX do this with the object class */ - if ( _States_Is_waiting_on_thread_queue( state ) ) { - if ( _States_Is_waiting_for_rpc_reply( state ) && - _States_Is_locally_blocked( state ) ) { - remote_state = _States_Clear( - STATES_WAITING_FOR_RPC_REPLY | STATES_TRANSIENT, - state - ); - - switch ( remote_state ) { - - case STATES_WAITING_FOR_BUFFER: - _Partition_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_SEGMENT: - _Region_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_SEMAPHORE: - _Semaphore_MP_Send_extract_proxy( the_thread ); - break; - case STATES_WAITING_FOR_MESSAGE: - _Message_queue_MP_Send_extract_proxy( the_thread ); - break; - } - } - _Thread_queue_Extract( the_thread->Wait.queue, the_thread ); - } - else if ( _Watchdog_Is_active( &the_thread->Timer ) ) - (void) _Watchdog_Remove( &the_thread->Timer ); + return (Priority_Control) priority; } /*PAGE * - * _RTEMS_Tasks_Priority_to_Core + * _RTEMS_tasks_Priority_is_valid + * */ -STATIC INLINE Priority_Control _RTEMS_Tasks_Priority_to_Core( - rtems_task_priority priority +STATIC INLINE boolean _RTEMS_tasks_Priority_is_valid ( + rtems_task_priority the_priority ) { - return (Priority_Control) priority; + return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) && + ( the_priority <= RTEMS_MAXIMUM_PRIORITY ) ); } #endif diff --git a/c/src/exec/rtems/macros/asr.inl b/c/src/exec/rtems/macros/asr.inl index 421755879b..6610feea2a 100644 --- a/c/src/exec/rtems/macros/asr.inl +++ b/c/src/exec/rtems/macros/asr.inl @@ -17,7 +17,7 @@ #ifndef __INLINE_ASR_h #define __INLINE_ASR_h -#include <rtems/isr.h> +#include <rtems/core/isr.h> /*PAGE * @@ -27,6 +27,7 @@ #define _ASR_Initialize( _information ) \ { \ + (_information)->is_enabled = TRUE; \ (_information)->handler = NULL; \ (_information)->mode_set = RTEMS_DEFAULT_MODES; \ (_information)->signals_posted = 0; \ diff --git a/c/src/exec/rtems/macros/attr.inl b/c/src/exec/rtems/macros/attr.inl index 97d3463d53..27231871ba 100644 --- a/c/src/exec/rtems/macros/attr.inl +++ b/c/src/exec/rtems/macros/attr.inl @@ -78,5 +78,14 @@ #define _Attributes_Is_inherit_priority( _attribute_set ) \ ( (_attribute_set) & RTEMS_INHERIT_PRIORITY ) +/*PAGE + * + * _Attributes_Is_priority_ceiling + * + */ + +#define _Attributes_Is_priority_ceiling( _attribute_set ) \ + ( (_attribute_set) & RTEMS_PRIORITY_CEILING ) + #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/event.inl b/c/src/exec/rtems/macros/event.inl index 1d4cb78237..0d2f2e47c7 100644 --- a/c/src/exec/rtems/macros/event.inl +++ b/c/src/exec/rtems/macros/event.inl @@ -22,7 +22,19 @@ */ #define _Event_Manager_initialization() \ - _Event_Sync = FALSE + do { \ + \ + _Event_Sync = FALSE; \ + \ + /* \ + * Register the MP Process Packet routine. \ + */ \ + \ + _MPCI_Register_packet_processor( \ + MP_PACKET_EVENT, \ + _Event_MP_Process_packet \ + ); \ + } while ( 0 ) #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/modes.inl b/c/src/exec/rtems/macros/modes.inl index 4c8b35a1e8..5f71796c07 100644 --- a/c/src/exec/rtems/macros/modes.inl +++ b/c/src/exec/rtems/macros/modes.inl @@ -41,7 +41,7 @@ */ #define _Modes_Is_asr_disabled( _mode_set ) \ - ( (_mode_set) & RTEMS_ASR_MASK ) + (((_mode_set) & RTEMS_ASR_MASK) == RTEMS_NO_ASR) /*PAGE * @@ -59,8 +59,7 @@ */ #define _Modes_Is_timeslice( _mode_set ) \ - (((_mode_set) & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == \ - (RTEMS_TIMESLICE|RTEMS_PREEMPT) ) + (((_mode_set) & RTEMS_TIMESLICE_MASK) == RTEMS_TIMESLICE) /*PAGE * diff --git a/c/src/exec/rtems/macros/rtems/rtems/asr.inl b/c/src/exec/rtems/macros/rtems/rtems/asr.inl index 421755879b..6610feea2a 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/asr.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/asr.inl @@ -17,7 +17,7 @@ #ifndef __INLINE_ASR_h #define __INLINE_ASR_h -#include <rtems/isr.h> +#include <rtems/core/isr.h> /*PAGE * @@ -27,6 +27,7 @@ #define _ASR_Initialize( _information ) \ { \ + (_information)->is_enabled = TRUE; \ (_information)->handler = NULL; \ (_information)->mode_set = RTEMS_DEFAULT_MODES; \ (_information)->signals_posted = 0; \ diff --git a/c/src/exec/rtems/macros/rtems/rtems/attr.inl b/c/src/exec/rtems/macros/rtems/rtems/attr.inl index 97d3463d53..27231871ba 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/attr.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/attr.inl @@ -78,5 +78,14 @@ #define _Attributes_Is_inherit_priority( _attribute_set ) \ ( (_attribute_set) & RTEMS_INHERIT_PRIORITY ) +/*PAGE + * + * _Attributes_Is_priority_ceiling + * + */ + +#define _Attributes_Is_priority_ceiling( _attribute_set ) \ + ( (_attribute_set) & RTEMS_PRIORITY_CEILING ) + #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/rtems/rtems/event.inl b/c/src/exec/rtems/macros/rtems/rtems/event.inl index 1d4cb78237..0d2f2e47c7 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/event.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/event.inl @@ -22,7 +22,19 @@ */ #define _Event_Manager_initialization() \ - _Event_Sync = FALSE + do { \ + \ + _Event_Sync = FALSE; \ + \ + /* \ + * Register the MP Process Packet routine. \ + */ \ + \ + _MPCI_Register_packet_processor( \ + MP_PACKET_EVENT, \ + _Event_MP_Process_packet \ + ); \ + } while ( 0 ) #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/rtems/rtems/modes.inl b/c/src/exec/rtems/macros/rtems/rtems/modes.inl index 4c8b35a1e8..5f71796c07 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/modes.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/modes.inl @@ -41,7 +41,7 @@ */ #define _Modes_Is_asr_disabled( _mode_set ) \ - ( (_mode_set) & RTEMS_ASR_MASK ) + (((_mode_set) & RTEMS_ASR_MASK) == RTEMS_NO_ASR) /*PAGE * @@ -59,8 +59,7 @@ */ #define _Modes_Is_timeslice( _mode_set ) \ - (((_mode_set) & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == \ - (RTEMS_TIMESLICE|RTEMS_PREEMPT) ) + (((_mode_set) & RTEMS_TIMESLICE_MASK) == RTEMS_TIMESLICE) /*PAGE * diff --git a/c/src/exec/rtems/macros/rtems/rtems/status.inl b/c/src/exec/rtems/macros/rtems/rtems/status.inl index c4f8a523df..408cb816d1 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/status.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/status.inl @@ -35,13 +35,5 @@ #define rtems_are_statuses_equal( _code1, _code2 ) \ ((_code1) == (_code2)) -/* - * _Status_Is_proxy_blocking - * - */ - -#define _Status_Is_proxy_blocking( _code ) \ - ( (_code) == RTEMS_PROXY_BLOCKING ) - #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/rtems/rtems/tasks.inl b/c/src/exec/rtems/macros/rtems/rtems/tasks.inl index 243d0addc7..8dd6ff351b 100644 --- a/c/src/exec/rtems/macros/rtems/rtems/tasks.inl +++ b/c/src/exec/rtems/macros/rtems/rtems/tasks.inl @@ -17,11 +17,6 @@ #ifndef __RTEMS_TASKS_inl #define __RTEMS_TASKS_inl -#include <rtems/msgmp.h> -#include <rtems/partmp.h> -#include <rtems/regionmp.h> -#include <rtems/semmp.h> - /*PAGE * * _RTEMS_tasks_Allocate @@ -42,54 +37,22 @@ /*PAGE * - * _RTEMS_tasks_Cancel_wait - * + * _RTEMS_tasks_Priority_to_Core */ - -#define _RTEMS_tasks_Cancel_wait( _the_thread ) \ - { \ - States_Control _state; \ - States_Control _remote_state; \ - \ - _state = (_the_thread)->current_state; \ - \ - if ( _States_Is_waiting_on_thread_queue( _state ) ) { \ - if ( _States_Is_waiting_for_rpc_reply( _state ) && \ - _States_Is_locally_blocked( _state ) ) { \ - _remote_state = _States_Clear( \ - STATES_WAITING_FOR_RPC_REPLY + STATES_TRANSIENT, \ - _state \ - ); \ - \ - switch ( _remote_state ) { \ - \ - case STATES_WAITING_FOR_BUFFER: \ - _Partition_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_SEGMENT: \ - _Region_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_SEMAPHORE: \ - _Semaphore_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_MESSAGE: \ - _Message_queue_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - } \ - } \ - _Thread_queue_Extract( (_the_thread)->Wait.queue, (_the_thread) ); \ - } \ - else if ( _Watchdog_Is_active( &(_the_thread)->Timer ) ) \ - (void) _Watchdog_Remove( &(_the_thread)->Timer ); \ - } + +#define _RTEMS_tasks_Priority_to_Core( _priority ) \ + ((Priority_Control) (_priority)) /*PAGE * - * _RTEMS_Tasks_Priority_to_Core + * _RTEMS_tasks_Priority_is_valid + * */ -#define _RTEMS_Tasks_Priority_to_Core( _priority ) \ - ((Priority_Control) (_priority)) +#define _RTEMS_tasks_Priority_is_valid( _the_priority ) \ + ( ((_the_priority) >= RTEMS_MINIMUM_PRIORITY) && \ + ((_the_priority) <= RTEMS_MAXIMUM_PRIORITY) ) + #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/status.inl b/c/src/exec/rtems/macros/status.inl index c4f8a523df..408cb816d1 100644 --- a/c/src/exec/rtems/macros/status.inl +++ b/c/src/exec/rtems/macros/status.inl @@ -35,13 +35,5 @@ #define rtems_are_statuses_equal( _code1, _code2 ) \ ((_code1) == (_code2)) -/* - * _Status_Is_proxy_blocking - * - */ - -#define _Status_Is_proxy_blocking( _code ) \ - ( (_code) == RTEMS_PROXY_BLOCKING ) - #endif /* end of include file */ diff --git a/c/src/exec/rtems/macros/tasks.inl b/c/src/exec/rtems/macros/tasks.inl index 243d0addc7..8dd6ff351b 100644 --- a/c/src/exec/rtems/macros/tasks.inl +++ b/c/src/exec/rtems/macros/tasks.inl @@ -17,11 +17,6 @@ #ifndef __RTEMS_TASKS_inl #define __RTEMS_TASKS_inl -#include <rtems/msgmp.h> -#include <rtems/partmp.h> -#include <rtems/regionmp.h> -#include <rtems/semmp.h> - /*PAGE * * _RTEMS_tasks_Allocate @@ -42,54 +37,22 @@ /*PAGE * - * _RTEMS_tasks_Cancel_wait - * + * _RTEMS_tasks_Priority_to_Core */ - -#define _RTEMS_tasks_Cancel_wait( _the_thread ) \ - { \ - States_Control _state; \ - States_Control _remote_state; \ - \ - _state = (_the_thread)->current_state; \ - \ - if ( _States_Is_waiting_on_thread_queue( _state ) ) { \ - if ( _States_Is_waiting_for_rpc_reply( _state ) && \ - _States_Is_locally_blocked( _state ) ) { \ - _remote_state = _States_Clear( \ - STATES_WAITING_FOR_RPC_REPLY + STATES_TRANSIENT, \ - _state \ - ); \ - \ - switch ( _remote_state ) { \ - \ - case STATES_WAITING_FOR_BUFFER: \ - _Partition_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_SEGMENT: \ - _Region_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_SEMAPHORE: \ - _Semaphore_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - case STATES_WAITING_FOR_MESSAGE: \ - _Message_queue_MP_Send_extract_proxy( (_the_thread) ); \ - break; \ - } \ - } \ - _Thread_queue_Extract( (_the_thread)->Wait.queue, (_the_thread) ); \ - } \ - else if ( _Watchdog_Is_active( &(_the_thread)->Timer ) ) \ - (void) _Watchdog_Remove( &(_the_thread)->Timer ); \ - } + +#define _RTEMS_tasks_Priority_to_Core( _priority ) \ + ((Priority_Control) (_priority)) /*PAGE * - * _RTEMS_Tasks_Priority_to_Core + * _RTEMS_tasks_Priority_is_valid + * */ -#define _RTEMS_Tasks_Priority_to_Core( _priority ) \ - ((Priority_Control) (_priority)) +#define _RTEMS_tasks_Priority_is_valid( _the_priority ) \ + ( ((_the_priority) >= RTEMS_MINIMUM_PRIORITY) && \ + ((_the_priority) <= RTEMS_MAXIMUM_PRIORITY) ) + #endif /* end of include file */ diff --git a/c/src/exec/rtems/optman/no-dpmem.c b/c/src/exec/rtems/optman/no-dpmem.c index 40f343eef4..a7116fefa1 100644 --- a/c/src/exec/rtems/optman/no-dpmem.c +++ b/c/src/exec/rtems/optman/no-dpmem.c @@ -13,10 +13,13 @@ */ #include <rtems/system.h> -#include <rtems/address.h> -#include <rtems/dpmem.h> -#include <rtems/object.h> -#include <rtems/thread.h> +#include <rtems/core/address.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/status.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/dpmem.h> void _Dual_ported_memory_Manager_initialization( unsigned32 maximum_ports @@ -32,7 +35,7 @@ rtems_status_code rtems_port_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_port_ident( @@ -40,14 +43,14 @@ rtems_status_code rtems_port_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_port_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_port_internal_to_external( @@ -56,7 +59,7 @@ rtems_status_code rtems_port_internal_to_external( void **external ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_port_external_to_internal( @@ -65,5 +68,5 @@ rtems_status_code rtems_port_external_to_internal( void **internal ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/optman/no-event.c b/c/src/exec/rtems/optman/no-event.c index c987193711..a0b2cecee7 100644 --- a/c/src/exec/rtems/optman/no-event.c +++ b/c/src/exec/rtems/optman/no-event.c @@ -13,19 +13,20 @@ */ #include <rtems/system.h> -#include <rtems/event.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/states.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/event.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> rtems_status_code rtems_event_send( Objects_Id id, rtems_event_set event_in ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_event_receive( @@ -35,6 +36,6 @@ rtems_status_code rtems_event_receive( rtems_event_set *event_out ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/optman/no-mp.c b/c/src/exec/rtems/optman/no-mp.c index 9446cabb29..f354397c9f 100644 --- a/c/src/exec/rtems/optman/no-mp.c +++ b/c/src/exec/rtems/optman/no-mp.c @@ -14,23 +14,18 @@ */ #include <rtems/system.h> -#include <rtems/config.h> -#include <rtems/cpu.h> -#include <rtems/event.h> -#include <rtems/fatal.h> -#include <rtems/intthrd.h> -#include <rtems/message.h> -#include <rtems/mp.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/part.h> -#include <rtems/sem.h> -#include <rtems/signal.h> -#include <rtems/states.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/mp.h> +#include <rtems/core/cpu.h> +#include <rtems/core/interr.h> +#include <rtems/core/mpci.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/sysstate.h> void _Multiprocessing_Manager_initialization ( void ) { @@ -40,62 +35,76 @@ void rtems_multiprocessing_announce ( void ) { } -Thread _Multiprocessing_Receive_server ( - Thread_Argument ignored +void _MPCI_Handler_initialization( + MPCI_Control *users_mpci_table ) { } -void _MPCI_Handler_initialization ( void ) +void _MPCI_Initialization ( void ) { } -void _MPCI_Initialization ( void ) +void _MPCI_Register_packet_processor( + Objects_Classes the_class, + MPCI_Packet_processor the_packet_processor + +) { } - -rtems_packet_prefix *_MPCI_Get_packet ( void ) + +MP_packet_Prefix *_MPCI_Get_packet ( void ) { return NULL; } void _MPCI_Return_packet ( - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ) { } void _MPCI_Send_process_packet ( unsigned32 destination, - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ) { } -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 ) { - return( RTEMS_NOT_CONFIGURED ); + return 0; } void _MPCI_Send_response_packet ( unsigned32 destination, - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ) { } -rtems_packet_prefix *_MPCI_Receive_packet ( void ) +MP_packet_Prefix *_MPCI_Receive_packet ( void ) { return NULL; } Thread_Control *_MPCI_Process_response ( - rtems_packet_prefix *the_packet + MP_packet_Prefix *the_packet ) { return NULL; } + +void _MPCI_Receive_server( void ) +{ +} + +void _MPCI_Announce ( void ) +{ +} + +/* end of file */ diff --git a/c/src/exec/rtems/optman/no-msg.c b/c/src/exec/rtems/optman/no-msg.c index 6e8503ee32..8cdfcf8090 100644 --- a/c/src/exec/rtems/optman/no-msg.c +++ b/c/src/exec/rtems/optman/no-msg.c @@ -14,16 +14,17 @@ */ #include <rtems/system.h> -#include <rtems/attr.h> -#include <rtems/chain.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/chain.h> #include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/message.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/wkspace.h> +#include <rtems/core/isr.h> +#include <rtems/rtems/message.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/core/wkspace.h> void _Message_queue_Manager_initialization( unsigned32 maximum_message_queues @@ -39,7 +40,7 @@ rtems_status_code rtems_message_queue_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_ident( @@ -48,14 +49,14 @@ rtems_status_code rtems_message_queue_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_send( @@ -64,7 +65,7 @@ rtems_status_code rtems_message_queue_send( unsigned32 size ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_urgent( @@ -73,7 +74,7 @@ rtems_status_code rtems_message_queue_urgent( unsigned32 size ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_broadcast( @@ -83,7 +84,7 @@ rtems_status_code rtems_message_queue_broadcast( unsigned32 *count ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_receive( @@ -94,7 +95,7 @@ rtems_status_code rtems_message_queue_receive( rtems_interval timeout ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_message_queue_flush( @@ -102,7 +103,7 @@ rtems_status_code rtems_message_queue_flush( unsigned32 *count ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } unsigned32 _Message_queue_Flush_support( @@ -130,5 +131,5 @@ rtems_status_code _Message_queue_Submit( Message_queue_Submit_types submit_type ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/optman/no-part.c b/c/src/exec/rtems/optman/no-part.c index 0b0e51329f..45cf1a7d78 100644 --- a/c/src/exec/rtems/optman/no-part.c +++ b/c/src/exec/rtems/optman/no-part.c @@ -14,11 +14,12 @@ */ #include <rtems/system.h> -#include <rtems/address.h> +#include <rtems/rtems/status.h> +#include <rtems/core/address.h> #include <rtems/config.h> -#include <rtems/object.h> -#include <rtems/part.h> -#include <rtems/thread.h> +#include <rtems/core/object.h> +#include <rtems/rtems/part.h> +#include <rtems/core/thread.h> void _Partition_Manager_initialization( unsigned32 maximum_partitions @@ -35,7 +36,7 @@ rtems_status_code rtems_partition_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_partition_ident( @@ -44,14 +45,14 @@ rtems_status_code rtems_partition_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_partition_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_partition_get_buffer( @@ -59,7 +60,7 @@ rtems_status_code rtems_partition_get_buffer( void **buffer ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_partition_return_buffer( @@ -67,5 +68,5 @@ rtems_status_code rtems_partition_return_buffer( void *buffer ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/optman/no-region.c b/c/src/exec/rtems/optman/no-region.c index 490d1371c0..4985000cab 100644 --- a/c/src/exec/rtems/optman/no-region.c +++ b/c/src/exec/rtems/optman/no-region.c @@ -14,12 +14,13 @@ */ #include <rtems/system.h> +#include <rtems/rtems/status.h> #include <rtems/config.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/region.h> -#include <rtems/states.h> -#include <rtems/thread.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/region.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> void _Region_Manager_initialization( unsigned32 maximum_regions @@ -36,7 +37,7 @@ rtems_status_code rtems_region_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_region_ident( @@ -44,14 +45,14 @@ rtems_status_code rtems_region_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_region_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_region_get_segment( @@ -62,7 +63,7 @@ rtems_status_code rtems_region_get_segment( void **segment ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_region_get_segment_size( @@ -71,7 +72,7 @@ rtems_status_code rtems_region_get_segment_size( unsigned32 *size ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_region_return_segment( @@ -79,5 +80,5 @@ rtems_status_code rtems_region_return_segment( void *segment ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/optman/no-rtmon.c b/c/src/exec/rtems/optman/no-rtmon.c index 8371f19a7f..3c633721cc 100644 --- a/c/src/exec/rtems/optman/no-rtmon.c +++ b/c/src/exec/rtems/optman/no-rtmon.c @@ -14,10 +14,13 @@ */ #include <rtems/system.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/ratemon.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> + +#include <rtems/rtems/types.h> +#include <rtems/rtems/ratemon.h> void _Rate_monotonic_Manager_initialization( unsigned32 maximum_periods @@ -30,7 +33,7 @@ rtems_status_code rtems_rate_monotonic_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_rate_monotonic_ident( @@ -38,21 +41,21 @@ rtems_status_code rtems_rate_monotonic_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_rate_monotonic_cancel( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_rate_monotonic_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_rate_monotonic_period( @@ -60,7 +63,7 @@ rtems_status_code rtems_rate_monotonic_period( rtems_interval length ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } void _Rate_monotonic_Timeout( diff --git a/c/src/exec/rtems/optman/no-sem.c b/c/src/exec/rtems/optman/no-sem.c index d96b1693e2..eabd8e12a9 100644 --- a/c/src/exec/rtems/optman/no-sem.c +++ b/c/src/exec/rtems/optman/no-sem.c @@ -14,15 +14,16 @@ */ #include <rtems/system.h> -#include <rtems/attr.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/attr.h> #include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/sem.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/sem.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> void _Semaphore_Manager_initialization( unsigned32 maximum_semaphores @@ -38,7 +39,7 @@ rtems_status_code rtems_semaphore_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_semaphore_ident( @@ -47,14 +48,14 @@ rtems_status_code rtems_semaphore_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_semaphore_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_semaphore_obtain( @@ -63,14 +64,14 @@ rtems_status_code rtems_semaphore_obtain( rtems_interval timeout ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_semaphore_release( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } boolean _Semaphore_Seize( diff --git a/c/src/exec/rtems/optman/no-signal.c b/c/src/exec/rtems/optman/no-signal.c index fedbf87db3..2193881d18 100644 --- a/c/src/exec/rtems/optman/no-signal.c +++ b/c/src/exec/rtems/optman/no-signal.c @@ -14,18 +14,24 @@ */ #include <rtems/system.h> -#include <rtems/asr.h> -#include <rtems/isr.h> -#include <rtems/modes.h> -#include <rtems/signal.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/core/isr.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/asr.h> +#include <rtems/rtems/modes.h> +#include <rtems/rtems/signal.h> + +void _Signal_Manager_initialization( void ) +{ +} + rtems_status_code rtems_signal_catch( rtems_asr_entry handler, rtems_mode mode_set ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_signal_send( @@ -33,5 +39,7 @@ rtems_status_code rtems_signal_send( rtems_signal_set signal_set ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } + +/* end of file */ diff --git a/c/src/exec/rtems/optman/no-timer.c b/c/src/exec/rtems/optman/no-timer.c index 1f6deb2e4f..0e32a501a6 100644 --- a/c/src/exec/rtems/optman/no-timer.c +++ b/c/src/exec/rtems/optman/no-timer.c @@ -14,11 +14,14 @@ */ #include <rtems/system.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/timer.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> + +#include <rtems/rtems/types.h> +#include <rtems/rtems/timer.h> void _Timer_Manager_initialization( unsigned32 maximum_timers @@ -31,7 +34,7 @@ rtems_status_code rtems_timer_create( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_ident( @@ -39,46 +42,46 @@ rtems_status_code rtems_timer_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_cancel( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_fire_after( - Objects_Id id, - rtems_interval ticks, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_fire_when( - Objects_Id id, - rtems_time_of_day *wall_time, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_timer_reset( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/rtems/src/clock.c b/c/src/exec/rtems/src/clock.c index f82baa6337..01f61374cf 100644 --- a/c/src/exec/rtems/src/clock.c +++ b/c/src/exec/rtems/src/clock.c @@ -13,12 +13,12 @@ */ #include <rtems/system.h> -#include <rtems/clock.h> -#include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/thread.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/clock.h> +#include <rtems/core/isr.h> +#include <rtems/core/thread.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /*PAGE * @@ -49,29 +49,29 @@ rtems_status_code rtems_clock_get( switch ( option ) { case RTEMS_CLOCK_GET_TOD: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; *(rtems_time_of_day *)time_buffer = _TOD_Current; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: *(rtems_interval *)time_buffer = _TOD_Ticks_since_boot; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TICKS_PER_SECOND: *(rtems_interval *)time_buffer = _TOD_Ticks_per_second; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TIME_VALUE: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; _ISR_Disable( level ); ((rtems_clock_time_value *)time_buffer)->seconds = @@ -79,13 +79,13 @@ rtems_status_code rtems_clock_get( tmp = _TOD_Current.ticks; _ISR_Enable( level ); - tmp *= _Configuration_Table->microseconds_per_tick; + tmp *= _TOD_Microseconds_per_tick; ((rtems_clock_time_value *)time_buffer)->microseconds = tmp; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_SUCCESSFUL ); /* should never get here */ + return RTEMS_INTERNAL_ERROR; /* should never get here */ } @@ -107,18 +107,16 @@ rtems_status_code rtems_clock_set( rtems_time_of_day *time_buffer ) { - rtems_status_code local_result; - rtems_interval seconds; + rtems_interval seconds; - local_result = _TOD_Validate( time_buffer ); - if ( rtems_is_status_successful( local_result ) ) { + if ( _TOD_Validate( time_buffer ) ) { seconds = _TOD_To_seconds( time_buffer ); _Thread_Disable_dispatch(); _TOD_Set( time_buffer, seconds ); _Thread_Enable_dispatch(); - + return RTEMS_SUCCESSFUL; } - return( local_result ); + return RTEMS_INVALID_CLOCK; } /*PAGE @@ -149,5 +147,5 @@ rtems_status_code rtems_clock_tick( void ) _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } diff --git a/c/src/exec/rtems/src/dpmem.c b/c/src/exec/rtems/src/dpmem.c index 522c14866b..ee41eec142 100644 --- a/c/src/exec/rtems/src/dpmem.c +++ b/c/src/exec/rtems/src/dpmem.c @@ -13,11 +13,13 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/address.h> -#include <rtems/dpmem.h> -#include <rtems/object.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/address.h> +#include <rtems/rtems/dpmem.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/dpmem.h> /*PAGE * @@ -78,11 +80,11 @@ rtems_status_code rtems_port_create( register Dual_ported_memory_Control *the_port; if ( !rtems_is_name_valid( name) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; if ( !_Addresses_Is_aligned( internal_start ) || !_Addresses_Is_aligned( external_start ) ) - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -90,7 +92,7 @@ rtems_status_code rtems_port_create( if ( !the_port ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_port->internal_base = internal_start; @@ -105,7 +107,7 @@ rtems_status_code rtems_port_create( *id = the_port->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -130,14 +132,16 @@ rtems_status_code rtems_port_ident( Objects_Id *id ) { - return( - _Objects_Name_to_id( - &_Dual_ported_memory_Information, - &name, - RTEMS_SEARCH_ALL_NODES, - id - ) + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( + &_Dual_ported_memory_Information, + &name, + OBJECTS_SEARCH_ALL_NODES, + id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -165,17 +169,17 @@ rtems_status_code rtems_port_delete( the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Objects_Close( &_Dual_ported_memory_Information, &the_port->Object ); _Dual_ported_memory_Free( the_port ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -210,9 +214,9 @@ rtems_status_code rtems_port_internal_to_external( the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: ending = _Addresses_Subtract( internal, the_port->internal_base ); if ( ending > the_port->length ) @@ -221,10 +225,10 @@ rtems_status_code rtems_port_internal_to_external( *external = _Addresses_Add_offset( the_port->external_base, ending ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -259,9 +263,9 @@ rtems_status_code rtems_port_external_to_internal( the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: ending = _Addresses_Subtract( external, the_port->external_base ); if ( ending > the_port->length ) @@ -270,8 +274,8 @@ rtems_status_code rtems_port_external_to_internal( *internal = _Addresses_Add_offset( the_port->internal_base, ending ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/rtems/src/event.c b/c/src/exec/rtems/src/event.c index ec14c2aaa9..833358bca8 100644 --- a/c/src/exec/rtems/src/event.c +++ b/c/src/exec/rtems/src/event.c @@ -13,12 +13,14 @@ */ #include <rtems/system.h> -#include <rtems/event.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/states.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/event.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/tasks.h> /*PAGE * @@ -42,11 +44,12 @@ rtems_status_code rtems_event_send( { register Thread_Control *the_thread; Objects_Locations location; + RTEMS_API_Control *api; the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: return( _Event_MP_Send_request_packet( @@ -56,13 +59,14 @@ rtems_status_code rtems_event_send( ) ); case OBJECTS_LOCAL: - _Event_sets_Post( event_in, &the_thread->RTEMS_API->pending_events ); + api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; + _Event_sets_Post( event_in, &api->pending_events ); _Event_Surrender( the_thread ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -90,14 +94,17 @@ rtems_status_code rtems_event_receive( rtems_event_set *event_out ) { + RTEMS_API_Control *api; + + api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; + if ( _Event_sets_Is_empty( event_in ) ) { - *event_out = _Thread_Executing->RTEMS_API->pending_events; - return( RTEMS_SUCCESSFUL ); + *event_out = api->pending_events; + return RTEMS_SUCCESSFUL; } _Thread_Disable_dispatch(); - _Event_Seize( event_in, option_set, ticks ); + _Event_Seize( event_in, option_set, ticks, event_out ); _Thread_Enable_dispatch(); - *event_out = _Thread_Executing->RTEMS_API->events_out; return( _Thread_Executing->Wait.return_code ); } diff --git a/c/src/exec/rtems/src/eventmp.c b/c/src/exec/rtems/src/eventmp.c index 4bc5925c2a..e477c9d3b5 100644 --- a/c/src/exec/rtems/src/eventmp.c +++ b/c/src/exec/rtems/src/eventmp.c @@ -13,13 +13,15 @@ */ #include <rtems/system.h> -#include <rtems/event.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/states.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/event.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -49,7 +51,7 @@ rtems_status_code _Event_MP_Send_request_packet ( case EVENT_MP_SEND_REQUEST: the_packet = _Event_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_EVENT; + the_packet->Prefix.the_class = MP_PACKET_EVENT; the_packet->Prefix.length = sizeof ( Event_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Event_MP_Packet ); the_packet->operation = operation; diff --git a/c/src/exec/rtems/src/intr.c b/c/src/exec/rtems/src/intr.c index 25f5176967..dbcc23434c 100644 --- a/c/src/exec/rtems/src/intr.c +++ b/c/src/exec/rtems/src/intr.c @@ -14,10 +14,9 @@ */ #include <rtems/system.h> -#include <rtems/isr.h> -#include <rtems/stack.h> -#include <rtems/intr.h> -#include <rtems/wkspace.h> +#include <rtems/rtems/status.h> +#include <rtems/core/isr.h> +#include <rtems/rtems/intr.h> /* _Interrupt_Manager_initialization * @@ -30,25 +29,6 @@ void _Interrupt_Manager_initialization( void ) { -#if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) - - if ( _CPU_Table.interrupt_stack_size < RTEMS_MINIMUM_STACK_SIZE ) - rtems_fatal_error_occurred( RTEMS_INVALID_SIZE ); - - _CPU_Interrupt_stack_low = - _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size ); - - _CPU_Interrupt_stack_high = _Addresses_Add_offset( - _CPU_Interrupt_stack_low, - _CPU_Table.interrupt_stack_size - ); - -#endif - -#if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE ) - _CPU_Install_interrupt_stack(); -#endif - } /* rtems_interrupt_catch @@ -73,13 +53,13 @@ rtems_status_code rtems_interrupt_catch( ) { if ( !_ISR_Is_vector_number_valid( vector ) ) - return( RTEMS_INVALID_NUMBER ); + return RTEMS_INVALID_NUMBER; if ( !_ISR_Is_valid_user_handler( new_isr_handler ) ) - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; _ISR_Install_vector( vector, (proc_ptr)new_isr_handler, (proc_ptr *)old_isr_handler ); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } diff --git a/c/src/exec/rtems/src/mp.c b/c/src/exec/rtems/src/mp.c index c555ffb3f1..f17d3b13e6 100644 --- a/c/src/exec/rtems/src/mp.c +++ b/c/src/exec/rtems/src/mp.c @@ -14,23 +14,9 @@ */ #include <rtems/system.h> -#include <rtems/config.h> -#include <rtems/cpu.h> -#include <rtems/event.h> -#include <rtems/fatal.h> -#include <rtems/intthrd.h> -#include <rtems/message.h> -#include <rtems/mp.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/part.h> -#include <rtems/sem.h> -#include <rtems/signal.h> -#include <rtems/states.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/mp.h> +#include <rtems/core/mpci.h> /*PAGE * @@ -40,11 +26,6 @@ void _Multiprocessing_Manager_initialization ( void ) { - if ( _Configuration_MP_table->node < 1 || - _Configuration_MP_table->node > _Configuration_MP_table->maximum_nodes ) - rtems_fatal_error_occurred( RTEMS_INVALID_NODE ); - - _Internal_threads_Set_MP_receive_server( _Multiprocessing_Receive_server ); } /*PAGE @@ -55,67 +36,7 @@ void _Multiprocessing_Manager_initialization ( void ) void rtems_multiprocessing_announce ( void ) { - _Thread_Disable_dispatch(); - _Event_sets_Post( - RTEMS_EVENT_0, - &_Internal_threads_System_initialization_thread->RTEMS_API->pending_events - ); - _Event_Surrender( _Internal_threads_System_initialization_thread ); - _Thread_Enable_dispatch(); -} - -/*PAGE - * - * _Multiprocessing_Receive_server - * - */ - -typedef void (*packet_processor)( rtems_packet_prefix * ); - -packet_processor _Multiprocessor_Packet_processors[] = { - _Internal_threads_MP_Process_packet, /* RTEMS_MP_PACKET_INTERNAL_THREADS */ - _RTEMS_tasks_MP_Process_packet, /* RTEMS_MP_PACKET_TASKS */ - _Message_queue_MP_Process_packet, /* RTEMS_MP_PACKET_MESSAGE_QUEUE */ - _Semaphore_MP_Process_packet, /* RTEMS_MP_PACKET_SEMAPHORE */ - _Partition_MP_Process_packet, /* RTEMS_MP_PACKET_PARTITION */ - 0, /* RTEMS_MP_PACKET_REGION */ - _Event_MP_Process_packet, /* RTEMS_MP_PACKET_EVENT */ - _Signal_MP_Process_packet /* RTEMS_MP_PACKET_SIGNAL */ -}; - -Thread _Multiprocessing_Receive_server ( - Thread_Argument ignored -) -{ - - rtems_packet_prefix *the_packet; - packet_processor the_function; - - for ( ; ; ) { - - _Thread_Disable_dispatch(); - _Event_Seize( RTEMS_EVENT_0, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); - _Thread_Enable_dispatch(); - - for ( ; ; ) { - the_packet = _MPCI_Receive_packet(); - - if ( !the_packet ) - break; - - _Thread_Executing->receive_packet = the_packet; - - if ( !_Mp_packet_Is_valid_packet_class ( the_packet->the_class ) ) - break; - - the_function = _Multiprocessor_Packet_processors[ the_packet->the_class ]; - - if ( !the_function ) - break; - - (*the_function)( the_packet ); - } - } + _MPCI_Announce(); } /* end of file */ diff --git a/c/src/exec/rtems/src/msg.c b/c/src/exec/rtems/src/msg.c index ff4683f880..a69ae777c6 100644 --- a/c/src/exec/rtems/src/msg.c +++ b/c/src/exec/rtems/src/msg.c @@ -14,18 +14,19 @@ */ #include <rtems/system.h> -#include <rtems/attr.h> -#include <rtems/chain.h> -#include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/message.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/states.h> -#include <rtems/support.h> -#include <rtems/thread.h> -#include <rtems/wkspace.h> -#include <rtems/mpci.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/chain.h> +#include <rtems/core/isr.h> +#include <rtems/rtems/message.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/states.h> +#include <rtems/rtems/support.h> +#include <rtems/core/thread.h> +#include <rtems/core/wkspace.h> +#include <rtems/core/mpci.h> +#include <rtems/sysstate.h> /*PAGE * @@ -54,6 +55,16 @@ void _Message_queue_Manager_initialization( RTEMS_MAXIMUM_NAME_LENGTH, FALSE ); + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_MESSAGE_QUEUE, + _Message_queue_MP_Process_packet + ); + } /*PAGE @@ -72,7 +83,7 @@ Message_queue_Control *_Message_queue_Allocate ( unsigned32 message_buffering_required; unsigned32 allocated_message_size; - mq = \ + mq = (Message_queue_Control *)_Objects_Allocate(&_Message_queue_Information); if (mq == 0) @@ -144,11 +155,11 @@ rtems_status_code rtems_message_queue_create( register Message_queue_Control *the_message_queue; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; - if ( _Attributes_Is_global( attribute_set ) && - !_Configuration_Is_multiprocessing() ) - return( RTEMS_MP_NOT_CONFIGURED ); + if ( _Attributes_Is_global( attribute_set ) && + !_System_state_Is_multiprocessing ) + return RTEMS_MP_NOT_CONFIGURED; if (count == 0) return RTEMS_INVALID_NUMBER; @@ -164,8 +175,7 @@ rtems_status_code rtems_message_queue_create( */ if ( _Attributes_Is_global( attribute_set ) && - _Configuration_MPCI_table && - (_Configuration_MPCI_table->maximum_packet_size < max_message_size)) + (_MPCI_table->maximum_packet_size < max_message_size)) { return RTEMS_INVALID_SIZE; } @@ -177,7 +187,7 @@ rtems_status_code rtems_message_queue_create( if ( !the_message_queue ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } if ( _Attributes_Is_global( attribute_set ) && @@ -201,7 +211,8 @@ rtems_status_code rtems_message_queue_create( _Attributes_Is_priority( attribute_set ) ? THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, STATES_WAITING_FOR_MESSAGE, - _Message_queue_MP_Send_extract_proxy + _Message_queue_MP_Send_extract_proxy, + RTEMS_TIMEOUT ); _Objects_Open( @@ -221,7 +232,7 @@ rtems_status_code rtems_message_queue_create( ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -248,12 +259,16 @@ rtems_status_code rtems_message_queue_ident( Objects_Id *id ) { - return _Objects_Name_to_id( + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Message_queue_Information, &name, node, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -281,10 +296,10 @@ rtems_status_code rtems_message_queue_delete( the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Dispatch(); - return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; case OBJECTS_LOCAL: _Objects_Close( &_Message_queue_Information, &the_message_queue->Object ); @@ -294,7 +309,8 @@ rtems_status_code rtems_message_queue_delete( else _Thread_queue_Flush( &the_message_queue->Wait_queue, - _Message_queue_MP_Send_object_was_deleted + _Message_queue_MP_Send_object_was_deleted, + RTEMS_OBJECT_WAS_DELETED ); _Message_queue_Free( the_message_queue ); @@ -314,10 +330,10 @@ rtems_status_code rtems_message_queue_delete( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -403,7 +419,7 @@ rtems_status_code rtems_message_queue_broadcast( the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Executing->Wait.return_argument = count; @@ -436,7 +452,7 @@ rtems_status_code rtems_message_queue_broadcast( waitp->return_argument, constrained_size); - *waitp->Extra.message_size_p = constrained_size; + *(rtems_unsigned32 *)the_thread->Wait.return_argument_1 = size; if ( !_Objects_Is_local_id( the_thread->Object.id ) ) { the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL; @@ -450,7 +466,7 @@ rtems_status_code rtems_message_queue_broadcast( } _Thread_Enable_dispatch(); *count = number_broadcasted; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } default: @@ -491,11 +507,9 @@ rtems_status_code rtems_message_queue_receive( switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: - _Thread_Executing->Wait.return_argument = buffer; - return _Message_queue_MP_Send_request_packet( MESSAGE_QUEUE_MP_RECEIVE_REQUEST, id, @@ -517,7 +531,7 @@ rtems_status_code rtems_message_queue_receive( return _Thread_Executing->Wait.return_code; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -549,7 +563,7 @@ rtems_status_code rtems_message_queue_flush( the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Executing->Wait.return_argument = count; @@ -569,10 +583,10 @@ rtems_status_code rtems_message_queue_flush( else *count = 0; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -633,9 +647,9 @@ boolean _Message_queue_Seize( the_message_queue->Wait_queue.sync = TRUE; executing->Wait.queue = &the_message_queue->Wait_queue; executing->Wait.id = the_message_queue->Object.id; - executing->Wait.option_set = option_set; - executing->Wait.return_argument = (unsigned32 *)buffer; - executing->Wait.Extra.message_size_p = size_p; + executing->Wait.option = option_set; + executing->Wait.return_argument = (void *)buffer; + executing->Wait.return_argument_1 = (void *)size_p; _ISR_Enable( level ); return FALSE; } @@ -724,7 +738,7 @@ rtems_status_code _Message_queue_Submit( switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: switch ( submit_type ) { @@ -770,7 +784,7 @@ rtems_status_code _Message_queue_Submit( the_thread->Wait.return_argument, size ); - *the_thread->Wait.Extra.message_size_p = size; + *(rtems_unsigned32 *)the_thread->Wait.return_argument_1 = size; if ( !_Objects_Is_local_id( the_thread->Object.id ) ) { the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL; @@ -783,7 +797,7 @@ rtems_status_code _Message_queue_Submit( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /* @@ -794,13 +808,13 @@ rtems_status_code _Message_queue_Submit( if ( the_message_queue->number_of_pending_messages == the_message_queue->maximum_pending_messages ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_message = _Message_queue_Allocate_message_buffer(the_message_queue); if ( the_message == 0) { _Thread_Enable_dispatch(); - return( RTEMS_UNSATISFIED ); + return RTEMS_UNSATISFIED; } _Message_queue_Copy_buffer( buffer, the_message->Contents.buffer, size ); @@ -818,7 +832,7 @@ rtems_status_code _Message_queue_Submit( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; default: return RTEMS_INTERNAL_ERROR; /* And they were such nice boys, too! */ diff --git a/c/src/exec/rtems/src/msgmp.c b/c/src/exec/rtems/src/msgmp.c index 48e572c43b..06afd4eedc 100644 --- a/c/src/exec/rtems/src/msgmp.c +++ b/c/src/exec/rtems/src/msgmp.c @@ -14,14 +14,15 @@ */ #include <rtems/system.h> -#include <rtems/message.h> -#include <rtems/mpci.h> -#include <rtems/msgmp.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> -#include <rtems/config.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/message.h> +#include <rtems/core/mpci.h> +#include <rtems/rtems/msgmp.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -46,7 +47,7 @@ void _Message_queue_MP_Send_process_packet ( case MESSAGE_QUEUE_MP_EXTRACT_PROXY: the_packet = _Message_queue_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_MESSAGE_QUEUE; + the_packet->Prefix.the_class = MP_PACKET_MESSAGE_QUEUE; the_packet->Prefix.length = sizeof ( Message_queue_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Message_queue_MP_Packet ); the_packet->operation = operation; @@ -102,10 +103,10 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( case MESSAGE_QUEUE_MP_FLUSH_REQUEST: the_packet = _Message_queue_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_MESSAGE_QUEUE; + the_packet->Prefix.the_class = MP_PACKET_MESSAGE_QUEUE; the_packet->Prefix.length = sizeof(Message_queue_MP_Packet); if ( size_p ) - the_packet->Prefix.length += *size_p; + the_packet->Prefix.length += *size_p; the_packet->Prefix.to_convert = sizeof(Message_queue_MP_Packet); /* @@ -114,9 +115,7 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( * we are about to slam in the payload */ - if (the_packet->Prefix.length > - _Configuration_MPCI_table->maximum_packet_size) - { + if (the_packet->Prefix.length > _MPCI_table->maximum_packet_size) { _Thread_Enable_dispatch(); return RTEMS_INVALID_SIZE; } @@ -132,8 +131,7 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( * Copy the data into place if needed */ - if (buffer) - { + if (buffer) { the_packet->Buffer.size = *size_p; _Message_queue_Copy_buffer(buffer, the_packet->Buffer.buffer, @@ -148,7 +146,7 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( case MESSAGE_QUEUE_MP_RECEIVE_REQUEST: the_packet = _Message_queue_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_MESSAGE_QUEUE; + the_packet->Prefix.the_class = MP_PACKET_MESSAGE_QUEUE; the_packet->Prefix.length = sizeof(Message_queue_MP_Packet); the_packet->Prefix.to_convert = sizeof(Message_queue_MP_Packet); @@ -160,8 +158,8 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( the_packet->option_set = option_set; the_packet->size = 0; /* just in case of an error */ - _Thread_Executing->Wait.return_argument = (unsigned32 *)buffer; - _Thread_Executing->Wait.Extra.message_size_p = size_p; + _Thread_Executing->Wait.return_argument = (unsigned32 *)buffer; + _Thread_Executing->Wait.return_argument_1 = size_p; return _MPCI_Send_request_packet(rtems_get_node(message_queue_id), &the_packet->Prefix, @@ -296,7 +294,7 @@ void _Message_queue_MP_Process_packet ( the_packet->Prefix.timeout ); - if ( ! _Status_Is_proxy_blocking( the_packet->Prefix.return_code ) ) + if ( ! _Thread_Is_proxy_blocking( the_packet->Prefix.return_code ) ) _Message_queue_MP_Send_response_packet( MESSAGE_QUEUE_MP_RECEIVE_RESPONSE, the_packet->Prefix.id, @@ -309,7 +307,8 @@ void _Message_queue_MP_Process_packet ( the_thread = _MPCI_Process_response( the_packet_prefix ); if (the_packet->Prefix.return_code == RTEMS_SUCCESSFUL) { - *the_thread->Wait.Extra.message_size_p = the_packet->size; + *(rtems_unsigned32 *)the_thread->Wait.return_argument_1 = + the_packet->size; _Message_queue_Copy_buffer( the_packet->Buffer.buffer, diff --git a/c/src/exec/rtems/src/part.c b/c/src/exec/rtems/src/part.c index 3d21eed416..ee714f64c1 100644 --- a/c/src/exec/rtems/src/part.c +++ b/c/src/exec/rtems/src/part.c @@ -14,12 +14,13 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/address.h> -#include <rtems/config.h> -#include <rtems/object.h> -#include <rtems/part.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/address.h> +#include <rtems/core/object.h> +#include <rtems/rtems/part.h> +#include <rtems/core/thread.h> +#include <rtems/sysstate.h> /*PAGE * @@ -49,6 +50,15 @@ void _Partition_Manager_initialization( FALSE ); + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_PARTITION, + _Partition_MP_Process_packet + ); + } /*PAGE @@ -84,18 +94,18 @@ rtems_status_code rtems_partition_create( register Partition_Control *the_partition; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; if ( length == 0 || buffer_size == 0 || length < buffer_size || !_Partition_Is_buffer_size_aligned( buffer_size ) ) - return ( RTEMS_INVALID_SIZE ); + return RTEMS_INVALID_SIZE; if ( !_Addresses_Is_aligned( starting_address ) ) - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; - if ( _Attributes_Is_global( attribute_set ) && - !_Configuration_Is_multiprocessing() ) - return( RTEMS_MP_NOT_CONFIGURED ); + if ( _Attributes_Is_global( attribute_set ) && + !_System_state_Is_multiprocessing ) + return RTEMS_MP_NOT_CONFIGURED; _Thread_Disable_dispatch(); /* prevents deletion */ @@ -103,7 +113,7 @@ rtems_status_code rtems_partition_create( if ( !the_partition ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } if ( _Attributes_Is_global( attribute_set ) && @@ -111,7 +121,7 @@ rtems_status_code rtems_partition_create( the_partition->Object.id, FALSE ) ) ) { _Partition_Free( the_partition ); _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_partition->starting_address = starting_address; the_partition->length = length; @@ -134,7 +144,7 @@ rtems_status_code rtems_partition_create( ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -161,7 +171,11 @@ rtems_status_code rtems_partition_ident( Objects_Id *id ) { - return _Objects_Name_to_id( &_Partition_Information, &name, node, id ); + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Partition_Information, &name, node, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -190,10 +204,10 @@ rtems_status_code rtems_partition_delete( the_partition = _Partition_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Dispatch(); - return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; case OBJECTS_LOCAL: if ( the_partition->number_of_used_blocks == 0 ) { _Objects_Close( &_Partition_Information, &the_partition->Object ); @@ -214,13 +228,13 @@ rtems_status_code rtems_partition_delete( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_RESOURCE_IN_USE ); + return RTEMS_RESOURCE_IN_USE; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -251,7 +265,7 @@ rtems_status_code rtems_partition_get_buffer( the_partition = _Partition_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Executing->Wait.return_argument = buffer; return( @@ -267,13 +281,13 @@ rtems_status_code rtems_partition_get_buffer( the_partition->number_of_used_blocks += 1; _Thread_Enable_dispatch(); *buffer = the_buffer; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_UNSATISFIED ); + return RTEMS_UNSATISFIED; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -303,7 +317,7 @@ rtems_status_code rtems_partition_return_buffer( the_partition = _Partition_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: return( _Partition_MP_Send_request_packet( @@ -317,11 +331,11 @@ rtems_status_code rtems_partition_return_buffer( _Partition_Free_buffer( the_partition, buffer ); the_partition->number_of_used_blocks -= 1; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/rtems/src/partmp.c b/c/src/exec/rtems/src/partmp.c index 0097844183..8fc36c6a04 100644 --- a/c/src/exec/rtems/src/partmp.c +++ b/c/src/exec/rtems/src/partmp.c @@ -14,12 +14,14 @@ */ #include <rtems/system.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/part.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/part.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -44,7 +46,7 @@ void _Partition_MP_Send_process_packet ( case PARTITION_MP_EXTRACT_PROXY: the_packet = _Partition_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_PARTITION; + the_packet->Prefix.the_class = MP_PACKET_PARTITION; the_packet->Prefix.length = sizeof ( Partition_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Partition_MP_Packet ); the_packet->operation = operation; @@ -88,7 +90,7 @@ rtems_status_code _Partition_MP_Send_request_packet ( case PARTITION_MP_RETURN_BUFFER_REQUEST: the_packet = _Partition_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_PARTITION; + the_packet->Prefix.the_class = MP_PACKET_PARTITION; the_packet->Prefix.length = sizeof ( Partition_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Partition_MP_Packet ); the_packet->operation = operation; diff --git a/c/src/exec/rtems/src/ratemon.c b/c/src/exec/rtems/src/ratemon.c index c98de762af..a94ba66ea0 100644 --- a/c/src/exec/rtems/src/ratemon.c +++ b/c/src/exec/rtems/src/ratemon.c @@ -14,11 +14,12 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/ratemon.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/core/thread.h> /*PAGE * @@ -77,7 +78,7 @@ rtems_status_code rtems_rate_monotonic_create( Rate_monotonic_Control *the_period; if ( !rtems_is_name_valid( name ) ) - return( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -85,7 +86,7 @@ rtems_status_code rtems_rate_monotonic_create( if ( !the_period ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_period->owner = _Thread_Executing; @@ -95,7 +96,7 @@ rtems_status_code rtems_rate_monotonic_create( *id = the_period->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -120,12 +121,16 @@ rtems_status_code rtems_rate_monotonic_ident( Objects_Id *id ) { - return _Objects_Name_to_id( + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Rate_monotonic_Information, &name, - RTEMS_SEARCH_LOCAL_NODE, + OBJECTS_SEARCH_LOCAL_NODE, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -152,21 +157,21 @@ rtems_status_code rtems_rate_monotonic_cancel( the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); - case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INVALID_ID; + case OBJECTS_REMOTE: + return RTEMS_INTERNAL_ERROR; /* should never return this */ case OBJECTS_LOCAL: if ( !_Thread_Is_executing( the_period->owner ) ) { _Thread_Enable_dispatch(); - return( RTEMS_NOT_OWNER_OF_RESOURCE ); + return RTEMS_NOT_OWNER_OF_RESOURCE; } (void) _Watchdog_Remove( &the_period->Timer ); the_period->state = RATE_MONOTONIC_INACTIVE; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -193,19 +198,19 @@ rtems_status_code rtems_rate_monotonic_delete( the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Objects_Close( &_Rate_monotonic_Information, &the_period->Object ); (void) _Watchdog_Remove( &the_period->Timer ); the_period->state = RATE_MONOTONIC_INACTIVE; _Rate_monotonic_Free( the_period ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -225,23 +230,23 @@ rtems_status_code rtems_rate_monotonic_delete( rtems_status_code rtems_rate_monotonic_period( Objects_Id id, - rtems_interval length + rtems_interval length ) { Rate_monotonic_Control *the_period; Objects_Locations location; - rtems_status_code return_value; + rtems_status_code return_value; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( !_Thread_Is_executing( the_period->owner ) ) { _Thread_Enable_dispatch(); - return( RTEMS_NOT_OWNER_OF_RESOURCE ); + return RTEMS_NOT_OWNER_OF_RESOURCE; } if ( length == RTEMS_PERIOD_STATUS ) { @@ -275,14 +280,14 @@ rtems_status_code rtems_rate_monotonic_period( _Watchdog_Insert_ticks( &the_period->Timer, length, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RATE_MONOTONIC_ACTIVE: /* following is and could be a critical section problem */ _Thread_Executing->Wait.id = the_period->Object.id; if ( _Rate_monotonic_Set_state( the_period ) ) { _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /* has expired -- fall into next case */ case RATE_MONOTONIC_EXPIRED: @@ -290,11 +295,11 @@ rtems_status_code rtems_rate_monotonic_period( _Watchdog_Insert_ticks( &the_period->Timer, length, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_TIMEOUT ); + return RTEMS_TIMEOUT; } } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE diff --git a/c/src/exec/rtems/src/region.c b/c/src/exec/rtems/src/region.c index 25aca9cda7..b5d55afdc3 100644 --- a/c/src/exec/rtems/src/region.c +++ b/c/src/exec/rtems/src/region.c @@ -14,13 +14,13 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/config.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/region.h> -#include <rtems/states.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/region.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> /*PAGE * @@ -48,6 +48,16 @@ void _Region_Manager_initialization( RTEMS_MAXIMUM_NAME_LENGTH, FALSE ); + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_REGION, + 0 /* XXX _Region_MP_Process_packet */ + ); + } /*PAGE @@ -83,10 +93,10 @@ rtems_status_code rtems_region_create( Region_Control *the_region; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; if ( !_Addresses_Is_aligned( starting_address ) ) - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -94,7 +104,7 @@ rtems_status_code rtems_region_create( if ( !the_region ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_region->maximum_segment_size = @@ -103,7 +113,7 @@ rtems_status_code rtems_region_create( if ( !the_region->maximum_segment_size ) { _Region_Free( the_region ); _Thread_Enable_dispatch(); - return( RTEMS_INVALID_SIZE ); + return RTEMS_INVALID_SIZE; } the_region->starting_address = starting_address; @@ -118,14 +128,15 @@ rtems_status_code rtems_region_create( _Attributes_Is_priority( attribute_set ) ? THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, STATES_WAITING_FOR_SEGMENT, - _Region_MP_Send_extract_proxy + _Region_MP_Send_extract_proxy, + RTEMS_TIMEOUT ); _Objects_Open( &_Region_Information, &the_region->Object, &name ); *id = the_region->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -150,12 +161,16 @@ rtems_status_code rtems_region_ident( Objects_Id *id ) { - return _Objects_Name_to_id( - &_Region_Information, - &name, - RTEMS_SEARCH_LOCAL_NODE, - id - ); + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( + &_Region_Information, + &name, + OBJECTS_SEARCH_LOCAL_NODE, + id + ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -184,22 +199,22 @@ rtems_status_code rtems_region_delete( the_region = _Region_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 5 ); if ( the_region->number_of_used_blocks == 0 ) { _Objects_Close( &_Region_Information, &the_region->Object ); _Region_Free( the_region ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_RESOURCE_IN_USE ); + return RTEMS_RESOURCE_IN_USE; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -236,9 +251,9 @@ rtems_status_code rtems_region_extend( the_region = _Region_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: heap_status = _Heap_Extend( @@ -264,7 +279,7 @@ rtems_status_code rtems_region_extend( return( status ); } - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -289,8 +304,8 @@ rtems_status_code rtems_region_extend( rtems_status_code rtems_region_get_segment( Objects_Id id, unsigned32 size, - rtems_option option_set, - rtems_interval timeout, + rtems_option option_set, + rtems_interval timeout, void **segment ) { @@ -300,19 +315,19 @@ rtems_status_code rtems_region_get_segment( void *the_segment; if ( size == 0 ) - return( RTEMS_INVALID_SIZE ); + return RTEMS_INVALID_SIZE; executing = _Thread_Executing; the_region = _Region_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( size > the_region->maximum_segment_size ) { _Thread_Enable_dispatch(); - return( RTEMS_INVALID_SIZE ); + return RTEMS_INVALID_SIZE; } _Region_Debug_Walk( the_region, 1 ); @@ -325,18 +340,18 @@ rtems_status_code rtems_region_get_segment( the_region->number_of_used_blocks += 1; _Thread_Enable_dispatch(); *segment = the_segment; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } if ( _Options_Is_no_wait( option_set ) ) { _Thread_Enable_dispatch(); - return( RTEMS_UNSATISFIED ); + return RTEMS_UNSATISFIED; } - executing->Wait.queue = &the_region->Wait_queue; - executing->Wait.id = id; - executing->Wait.Extra.segment_size = size; - executing->Wait.return_argument = (unsigned32 *) segment; + executing->Wait.queue = &the_region->Wait_queue; + executing->Wait.id = id; + executing->Wait.count = size; + executing->Wait.return_argument = (unsigned32 *) segment; the_region->Wait_queue.sync = TRUE; @@ -346,7 +361,7 @@ rtems_status_code rtems_region_get_segment( return( executing->Wait.return_code ); } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE * @@ -379,20 +394,20 @@ rtems_status_code rtems_region_get_segment_size( the_region = _Region_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( _Heap_Size_of_user_area( &the_region->Memory, segment, size ) ) { _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -424,9 +439,9 @@ rtems_status_code rtems_region_return_segment( the_region = _Region_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* this error cannot be returned */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Region_Debug_Walk( the_region, 3 ); @@ -437,7 +452,7 @@ rtems_status_code rtems_region_return_segment( if ( !status ) { _Thread_Enable_dispatch(); - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; } the_region->number_of_used_blocks -= 1; @@ -448,7 +463,9 @@ rtems_status_code rtems_region_return_segment( break; the_segment = _Region_Allocate_segment( - the_region, the_thread->Wait.Extra.segment_size ); + the_region, + the_thread->Wait.count + ); if ( the_segment == NULL ) break; @@ -460,8 +477,8 @@ rtems_status_code rtems_region_return_segment( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/rtems/src/regionmp.c b/c/src/exec/rtems/src/regionmp.c index b460e554fe..89b9d851c5 100644 --- a/c/src/exec/rtems/src/regionmp.c +++ b/c/src/exec/rtems/src/regionmp.c @@ -14,12 +14,14 @@ */ #include <rtems/system.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/region.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/region.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -44,7 +46,7 @@ void _Region_MP_Send_process_packet ( case REGION_MP_EXTRACT_PROXY: the_packet = _Region_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_REGION; + the_packet->Prefix.the_class = MP_PACKET_REGION; the_packet->Prefix.length = sizeof ( Region_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Region_MP_Packet ); the_packet->operation = operation; @@ -79,8 +81,8 @@ rtems_status_code _Region_MP_Send_request_packet ( Objects_Id region_id, void *segment, unsigned32 size, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ) { Region_MP_Packet *the_packet; @@ -91,7 +93,7 @@ rtems_status_code _Region_MP_Send_request_packet ( case REGION_MP_RETURN_SEGMENT_REQUEST: the_packet = _Region_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_REGION; + the_packet->Prefix.the_class = MP_PACKET_REGION; the_packet->Prefix.length = sizeof ( Region_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Region_MP_Packet ); if ( ! _Options_Is_no_wait(option_set)) diff --git a/c/src/exec/rtems/src/rtclock.c b/c/src/exec/rtems/src/rtclock.c index f82baa6337..01f61374cf 100644 --- a/c/src/exec/rtems/src/rtclock.c +++ b/c/src/exec/rtems/src/rtclock.c @@ -13,12 +13,12 @@ */ #include <rtems/system.h> -#include <rtems/clock.h> -#include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/thread.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/clock.h> +#include <rtems/core/isr.h> +#include <rtems/core/thread.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /*PAGE * @@ -49,29 +49,29 @@ rtems_status_code rtems_clock_get( switch ( option ) { case RTEMS_CLOCK_GET_TOD: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; *(rtems_time_of_day *)time_buffer = _TOD_Current; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT: *(rtems_interval *)time_buffer = _TOD_Ticks_since_boot; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TICKS_PER_SECOND: *(rtems_interval *)time_buffer = _TOD_Ticks_per_second; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; case RTEMS_CLOCK_GET_TIME_VALUE: if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; _ISR_Disable( level ); ((rtems_clock_time_value *)time_buffer)->seconds = @@ -79,13 +79,13 @@ rtems_status_code rtems_clock_get( tmp = _TOD_Current.ticks; _ISR_Enable( level ); - tmp *= _Configuration_Table->microseconds_per_tick; + tmp *= _TOD_Microseconds_per_tick; ((rtems_clock_time_value *)time_buffer)->microseconds = tmp; - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_SUCCESSFUL ); /* should never get here */ + return RTEMS_INTERNAL_ERROR; /* should never get here */ } @@ -107,18 +107,16 @@ rtems_status_code rtems_clock_set( rtems_time_of_day *time_buffer ) { - rtems_status_code local_result; - rtems_interval seconds; + rtems_interval seconds; - local_result = _TOD_Validate( time_buffer ); - if ( rtems_is_status_successful( local_result ) ) { + if ( _TOD_Validate( time_buffer ) ) { seconds = _TOD_To_seconds( time_buffer ); _Thread_Disable_dispatch(); _TOD_Set( time_buffer, seconds ); _Thread_Enable_dispatch(); - + return RTEMS_SUCCESSFUL; } - return( local_result ); + return RTEMS_INVALID_CLOCK; } /*PAGE @@ -149,5 +147,5 @@ rtems_status_code rtems_clock_tick( void ) _Thread_Is_dispatching_enabled() ) _Thread_Dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } diff --git a/c/src/exec/rtems/src/rtemstimer.c b/c/src/exec/rtems/src/rtemstimer.c index 68d9e4591b..c59e137d0c 100644 --- a/c/src/exec/rtems/src/rtemstimer.c +++ b/c/src/exec/rtems/src/rtemstimer.c @@ -14,12 +14,13 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/timer.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/timer.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /*PAGE * @@ -73,7 +74,7 @@ rtems_status_code rtems_timer_create( Timer_Control *the_timer; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -81,7 +82,7 @@ rtems_status_code rtems_timer_create( if ( !the_timer ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_timer->the_class = TIMER_DORMANT; @@ -90,7 +91,7 @@ rtems_status_code rtems_timer_create( *id = the_timer->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -115,12 +116,16 @@ rtems_status_code rtems_timer_ident( Objects_Id *id ) { - return _Objects_Name_to_id( + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Timer_Information, &name, - RTEMS_SEARCH_LOCAL_NODE, + OBJECTS_SEARCH_LOCAL_NODE, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -147,17 +152,17 @@ rtems_status_code rtems_timer_cancel( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) (void) _Watchdog_Remove( &the_timer->Ticker ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -184,18 +189,18 @@ rtems_status_code rtems_timer_delete( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Objects_Close( &_Timer_Information, &the_timer->Object ); (void) _Watchdog_Remove( &the_timer->Ticker ); _Timer_Free( the_timer ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -215,24 +220,24 @@ rtems_status_code rtems_timer_delete( */ rtems_status_code rtems_timer_fire_after( - Objects_Id id, - rtems_interval ticks, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data ) { Timer_Control *the_timer; Objects_Locations location; if ( ticks == 0 ) - return( RTEMS_INVALID_NUMBER ); + return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); the_timer->the_class = TIMER_INTERVAL; @@ -240,10 +245,10 @@ rtems_status_code rtems_timer_fire_after( _Watchdog_Insert_ticks( &the_timer->Ticker, ticks, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -263,34 +268,32 @@ rtems_status_code rtems_timer_fire_after( */ rtems_status_code rtems_timer_fire_when( - Objects_Id id, - rtems_time_of_day *wall_time, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data ) { - Timer_Control *the_timer; - Objects_Locations location; - rtems_status_code validate_status; + Timer_Control *the_timer; + Objects_Locations location; rtems_interval seconds; if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; - validate_status = _TOD_Validate( wall_time ); - if ( !rtems_is_status_successful( validate_status ) ) - return( validate_status ); + if ( !_TOD_Validate( wall_time ) ) + return RTEMS_INVALID_CLOCK; seconds = _TOD_To_seconds( wall_time ); if ( seconds <= _TOD_Seconds_since_epoch ) - return( RTEMS_INVALID_CLOCK ); + return RTEMS_INVALID_CLOCK; the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); the_timer->the_class = TIMER_TIME_OF_DAY; @@ -298,10 +301,10 @@ rtems_status_code rtems_timer_fire_when( _Watchdog_Insert_seconds( &the_timer->Ticker, seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -328,18 +331,18 @@ rtems_status_code rtems_timer_reset( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( _Timer_Is_interval_class( the_timer->the_class ) ) { _Watchdog_Reset( &the_timer->Ticker ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/rtems/src/sem.c b/c/src/exec/rtems/src/sem.c index 9e87550c31..9ba1634164 100644 --- a/c/src/exec/rtems/src/sem.c +++ b/c/src/exec/rtems/src/sem.c @@ -27,17 +27,22 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/attr.h> -#include <rtems/config.h> -#include <rtems/isr.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/sem.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/mpci.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/rtems/attr.h> +#include <rtems/core/isr.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/sem.h> +#include <rtems/core/coremutex.h> +#include <rtems/core/coresem.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> +#include <rtems/core/mpci.h> +#include <rtems/sysstate.h> + +#include <rtems/core/interr.h> /*PAGE * @@ -65,6 +70,16 @@ void _Semaphore_Manager_initialization( RTEMS_MAXIMUM_NAME_LENGTH, FALSE ); + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_SEMAPHORE, + _Semaphore_MP_Process_packet + ); + } /*PAGE @@ -75,10 +90,11 @@ void _Semaphore_Manager_initialization( * on the given count. A semaphore id is returned. * * Input parameters: - * name - user defined semaphore name - * count - initial count of semaphore - * attribute_set - semaphore attributes - * id - pointer to semaphore id + * name - user defined semaphore name + * count - initial count of semaphore + * attribute_set - semaphore attributes + * priority_ceiling - semaphore's ceiling priority + * id - pointer to semaphore id * * Output parameters: * id - semaphore id @@ -87,21 +103,24 @@ void _Semaphore_Manager_initialization( */ rtems_status_code rtems_semaphore_create( - rtems_name name, - unsigned32 count, - rtems_attribute attribute_set, - rtems_task_priority priority_ceiling, - Objects_Id *id + rtems_name name, + unsigned32 count, + rtems_attribute attribute_set, + rtems_task_priority priority_ceiling, + Objects_Id *id ) { register Semaphore_Control *the_semaphore; + CORE_mutex_Attributes the_mutex_attributes; + CORE_semaphore_Attributes the_semaphore_attributes; + unsigned32 lock; if ( !rtems_is_name_valid( name ) ) return ( RTEMS_INVALID_NAME ); if ( _Attributes_Is_global( attribute_set ) ) { - if ( !_Configuration_Is_multiprocessing() ) + if ( !_System_state_Is_multiprocessing ) return( RTEMS_MP_NOT_CONFIGURED ); if ( _Attributes_Is_inherit_priority( attribute_set ) ) @@ -128,7 +147,7 @@ rtems_status_code rtems_semaphore_create( } if ( _Attributes_Is_global( attribute_set ) && - !( _Objects_MP_Allocate_and_open( &_Semaphore_Information, name, + ! ( _Objects_MP_Allocate_and_open( &_Semaphore_Information, name, the_semaphore->Object.id, FALSE ) ) ) { _Semaphore_Free( the_semaphore ); _Thread_Enable_dispatch(); @@ -136,27 +155,48 @@ rtems_status_code rtems_semaphore_create( } the_semaphore->attribute_set = attribute_set; - the_semaphore->count = count; - - if ( _Attributes_Is_binary_semaphore( attribute_set ) && count == 0 ) { - the_semaphore->nest_count = 1; - the_semaphore->holder = _Thread_Executing; - the_semaphore->holder_id = _Thread_Executing->Object.id; - _Thread_Executing->resource_count++; - } else { - the_semaphore->nest_count = 0; - the_semaphore->holder = NULL; - the_semaphore->holder_id = 0; - } - _Thread_queue_Initialize( - &the_semaphore->Wait_queue, - OBJECTS_RTEMS_SEMAPHORES, - _Attributes_Is_priority( attribute_set ) ? - THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO, - STATES_WAITING_FOR_SEMAPHORE, - _Semaphore_MP_Send_extract_proxy - ); + if ( _Attributes_Is_binary_semaphore( attribute_set ) ) { + if ( _Attributes_Is_inherit_priority( attribute_set ) ) + the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT; + else if (_Attributes_Is_priority_ceiling( attribute_set ) ) + the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING; + else if (_Attributes_Is_priority( attribute_set ) ) + the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY; + else + the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO; + + the_mutex_attributes.allow_nesting = TRUE; + + /* Add priority ceiling code here ????? */ + + if ( count == 1 ) + lock = CORE_MUTEX_UNLOCKED; + else + lock = CORE_MUTEX_LOCKED; + + _CORE_mutex_Initialize( + &the_semaphore->Core_control.mutex, + OBJECTS_RTEMS_SEMAPHORES, + &the_mutex_attributes, + lock, + _Semaphore_MP_Send_extract_proxy + ); + } + else { + if ( _Attributes_Is_priority( attribute_set ) ) + the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY; + else + the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO; + + _CORE_semaphore_Initialize( + &the_semaphore->Core_control.semaphore, + OBJECTS_RTEMS_SEMAPHORES, + &the_semaphore_attributes, + count, + _Semaphore_MP_Send_extract_proxy + ); + } _Objects_Open( &_Semaphore_Information, &the_semaphore->Object, &name ); @@ -192,12 +232,16 @@ rtems_status_code rtems_semaphore_create( */ rtems_status_code rtems_semaphore_ident( - rtems_name name, - unsigned32 node, - Objects_Id *id + rtems_name name, + unsigned32 node, + Objects_Id *id ) { - return( _Objects_Name_to_id( &_Semaphore_Information, &name, node, id ) ); + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Semaphore_Information, &name, node, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -231,19 +275,27 @@ rtems_status_code rtems_semaphore_delete( _Thread_Dispatch(); return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); case OBJECTS_LOCAL: - if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set) && - ( the_semaphore->count == 0 ) ) { - _Thread_Enable_dispatch(); - return( RTEMS_RESOURCE_IN_USE ); + if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set) ) { + if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) ) { + _Thread_Enable_dispatch(); + return( RTEMS_RESOURCE_IN_USE ); + } + else + _CORE_mutex_Flush( + &the_semaphore->Core_control.mutex, + _Semaphore_MP_Send_object_was_deleted, + CORE_MUTEX_WAS_DELETED + ); } + else + _CORE_semaphore_Flush( + &the_semaphore->Core_control.semaphore, + _Semaphore_MP_Send_object_was_deleted, + CORE_SEMAPHORE_WAS_DELETED + ); _Objects_Close( &_Semaphore_Information, &the_semaphore->Object ); - _Thread_queue_Flush( - &the_semaphore->Wait_queue, - _Semaphore_MP_Send_object_was_deleted - ); - _Semaphore_Free( the_semaphore ); if ( _Attributes_Is_global( the_semaphore->attribute_set ) ) { @@ -281,13 +333,14 @@ rtems_status_code rtems_semaphore_delete( */ rtems_status_code rtems_semaphore_obtain( - Objects_Id id, - unsigned32 option_set, - rtems_interval timeout + Objects_Id id, + unsigned32 option_set, + rtems_interval timeout ) { register Semaphore_Control *the_semaphore; Objects_Locations location; + boolean wait; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { @@ -301,17 +354,32 @@ rtems_status_code rtems_semaphore_obtain( timeout ); case OBJECTS_LOCAL: - if ( !_Semaphore_Seize( the_semaphore, option_set ) ) { - if ( _Attributes_Is_inherit_priority( the_semaphore->attribute_set ) && - the_semaphore->holder->current_priority > - _Thread_Executing->current_priority ) { - _Thread_Change_priority( - the_semaphore->holder, _Thread_Executing->current_priority ); - } - _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout ); + if ( _Options_Is_no_wait( option_set ) ) + wait = FALSE; + else + wait = TRUE; + + if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) { + _CORE_mutex_Seize( + &the_semaphore->Core_control.mutex, + id, + wait, + timeout + ); + _Thread_Enable_dispatch(); + return( _Semaphore_Translate_core_mutex_return_code( + _Thread_Executing->Wait.return_code ) ); + } else { + _CORE_semaphore_Seize( + &the_semaphore->Core_control.semaphore, + id, + wait, + timeout + ); + _Thread_Enable_dispatch(); + return( _Semaphore_Translate_core_semaphore_return_code( + _Thread_Executing->Wait.return_code ) ); } - _Thread_Enable_dispatch(); - return( _Thread_Executing->Wait.return_code ); } return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ @@ -337,7 +405,8 @@ rtems_status_code rtems_semaphore_release( { register Semaphore_Control *the_semaphore; Objects_Locations location; - Thread_Control *the_thread; + CORE_mutex_Status mutex_status; + CORE_semaphore_Status semaphore_status; the_semaphore = _Semaphore_Get( id, &location ); switch ( location ) { @@ -353,143 +422,153 @@ rtems_status_code rtems_semaphore_release( ) ); case OBJECTS_LOCAL: - if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set)) { - - if ( !_Objects_Are_ids_equal( - _Thread_Executing->Object.id, the_semaphore->holder_id ) ) { - _Thread_Enable_dispatch(); - return( RTEMS_NOT_OWNER_OF_RESOURCE ); - } - - the_semaphore->nest_count--; - - if ( the_semaphore->nest_count != 0 ) { - _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); - } - - _Thread_Executing->resource_count--; - the_semaphore->holder = NULL; - the_semaphore->holder_id = 0; - - /* - * Whether or not someone is waiting for the semaphore, an - * inherited priority must be lowered if this is the last - * semaphore (i.e. resource) this task has. - */ - - if ( _Attributes_Is_inherit_priority(the_semaphore->attribute_set) && - _Thread_Executing->resource_count == 0 && - _Thread_Executing->real_priority != - _Thread_Executing->current_priority ) { - _Thread_Change_priority( - _Thread_Executing, _Thread_Executing->real_priority ); - } - + if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) { + mutex_status = _CORE_mutex_Surrender( + &the_semaphore->Core_control.mutex, + id, + _Semaphore_Core_mutex_mp_support + ); + _Thread_Enable_dispatch(); + return( _Semaphore_Translate_core_mutex_return_code( mutex_status ) ); } + else + semaphore_status = _CORE_semaphore_Surrender( + &the_semaphore->Core_control.semaphore, + id, + _Semaphore_Core_semaphore_mp_support + ); + _Thread_Enable_dispatch(); + return( + _Semaphore_Translate_core_semaphore_return_code( semaphore_status ) ); + } - if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) { - - if ( !_Objects_Is_local_id( the_thread->Object.id ) ) { - the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL; - - if ( _Attributes_Is_binary_semaphore(the_semaphore->attribute_set) ) { - the_semaphore->holder = NULL; - the_semaphore->holder_id = the_thread->Object.id; - the_semaphore->nest_count = 1; - } - - _Semaphore_MP_Send_response_packet( - SEMAPHORE_MP_OBTAIN_RESPONSE, - id, - the_thread - ); - } else { - - if ( _Attributes_Is_binary_semaphore(the_semaphore->attribute_set) ) { - the_semaphore->holder = the_thread; - the_semaphore->holder_id = the_thread->Object.id; - the_thread->resource_count++; - the_semaphore->nest_count = 1; - } - - /* - * No special action for priority inheritance because the_thread - * is guaranteed to be the highest priority thread waiting for - * the semaphore. - */ - } - } else - the_semaphore->count += 1; + return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ +} - _Thread_Enable_dispatch(); +/*PAGE + * + * _Semaphore_Translate_core_mutex_return_code + * + * Input parameters: + * the_mutex_status - mutex status code to translate + * + * Output parameters: + * rtems status code - translated RTEMS status code + * + */ + +rtems_status_code _Semaphore_Translate_core_mutex_return_code ( + unsigned32 the_mutex_status +) +{ + switch ( the_mutex_status ) { + case CORE_MUTEX_STATUS_SUCCESSFUL: return( RTEMS_SUCCESSFUL ); + case CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT: + return( RTEMS_UNSATISFIED ); + case CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED: + return( RTEMS_INTERNAL_ERROR ); + case CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE: + return( RTEMS_NOT_OWNER_OF_RESOURCE ); + case CORE_MUTEX_WAS_DELETED: + return( RTEMS_OBJECT_WAS_DELETED ); + case CORE_MUTEX_TIMEOUT: + return( RTEMS_TIMEOUT ); + case THREAD_STATUS_PROXY_BLOCKING: + return( THREAD_STATUS_PROXY_BLOCKING ); } - + _Internal_error_Occurred( + INTERNAL_ERROR_RTEMS_API, + TRUE, + the_mutex_status + ); return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ } /*PAGE * - * _Semaphore_Seize - * - * This routine attempts to allocate a semaphore to the calling thread. + * _Semaphore_Translate_core_semaphore_return_code * * Input parameters: - * the_semaphore - pointer to semaphore control block - * option_set - acquire semaphore options + * the_semaphore_status - semaphore status code to translate * * Output parameters: - * TRUE - if semaphore allocated - * FALSE - if semaphore NOT allocated + * rtems status code - translated RTEMS status code * - * INTERRUPT LATENCY: - * available - * wait */ - -boolean _Semaphore_Seize( - Semaphore_Control *the_semaphore, - rtems_option option_set + +rtems_status_code _Semaphore_Translate_core_semaphore_return_code ( + unsigned32 the_semaphore_status ) { - Thread_Control *executing; - ISR_Level level; - - executing = _Thread_Executing; - executing->Wait.return_code = RTEMS_SUCCESSFUL; - _ISR_Disable( level ); - if ( the_semaphore->count != 0 ) { - the_semaphore->count -= 1; - if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) { - the_semaphore->holder = executing; - the_semaphore->holder_id = executing->Object.id; - the_semaphore->nest_count = 1; - executing->resource_count++; - } - _ISR_Enable( level ); - return( TRUE ); + switch ( the_semaphore_status ) { + case CORE_SEMAPHORE_STATUS_SUCCESSFUL: + return( RTEMS_SUCCESSFUL ); + case CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT: + return( RTEMS_UNSATISFIED ); + case CORE_SEMAPHORE_WAS_DELETED: + return( RTEMS_OBJECT_WAS_DELETED ); + case CORE_SEMAPHORE_TIMEOUT: + return( RTEMS_TIMEOUT ); + case THREAD_STATUS_PROXY_BLOCKING: + return( THREAD_STATUS_PROXY_BLOCKING ); } + _Internal_error_Occurred( + INTERNAL_ERROR_RTEMS_API, + TRUE, + the_semaphore_status + ); + return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ +} - if ( _Options_Is_no_wait( option_set ) ) { - _ISR_Enable( level ); - executing->Wait.return_code = RTEMS_UNSATISFIED; - return( TRUE ); - } +/*PAGE + * + * _Semaphore_Core_mutex_mp_support + * + * Input parameters: + * the_thread - the remote thread the semaphore was surrendered to + * id - id of the surrendered semaphore + * + * Output parameters: NONE + */ + +void _Semaphore_Core_mutex_mp_support ( + Thread_Control *the_thread, + Objects_Id id +) +{ + the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL; + + _Semaphore_MP_Send_response_packet( + SEMAPHORE_MP_OBTAIN_RESPONSE, + id, + the_thread + ); +} - if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) { - if ( _Objects_Are_ids_equal( - _Thread_Executing->Object.id, the_semaphore->holder_id ) ) { - the_semaphore->nest_count++; - _ISR_Enable( level ); - return( TRUE ); - } - } - the_semaphore->Wait_queue.sync = TRUE; - executing->Wait.queue = &the_semaphore->Wait_queue; - executing->Wait.id = the_semaphore->Object.id; - executing->Wait.option_set = option_set; - _ISR_Enable( level ); - return( FALSE ); +/*PAGE + * + * _Semaphore_Core_semaphore_mp_support + * + * Input parameters: + * the_thread - the remote thread the semaphore was surrendered to + * id - id of the surrendered semaphore + * + * Output parameters: NONE + */ + +void _Semaphore_Core_semaphore_mp_support ( + Thread_Control *the_thread, + Objects_Id id +) +{ + the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL; + + _Semaphore_MP_Send_response_packet( + SEMAPHORE_MP_OBTAIN_RESPONSE, + id, + the_thread + ); } diff --git a/c/src/exec/rtems/src/semmp.c b/c/src/exec/rtems/src/semmp.c index 03ca51a228..c0a43f3f53 100644 --- a/c/src/exec/rtems/src/semmp.c +++ b/c/src/exec/rtems/src/semmp.c @@ -14,13 +14,15 @@ */ #include <rtems/system.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/sem.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/sem.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -45,7 +47,7 @@ void _Semaphore_MP_Send_process_packet ( case SEMAPHORE_MP_EXTRACT_PROXY: the_packet = _Semaphore_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_SEMAPHORE; + the_packet->Prefix.the_class = MP_PACKET_SEMAPHORE; the_packet->Prefix.length = sizeof ( Semaphore_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Semaphore_MP_Packet ); the_packet->operation = operation; @@ -78,8 +80,8 @@ void _Semaphore_MP_Send_process_packet ( rtems_status_code _Semaphore_MP_Send_request_packet ( Semaphore_MP_Remote_operations operation, Objects_Id semaphore_id, - rtems_option option_set, - rtems_interval timeout + rtems_option option_set, + rtems_interval timeout ) { Semaphore_MP_Packet *the_packet; @@ -90,7 +92,7 @@ rtems_status_code _Semaphore_MP_Send_request_packet ( case SEMAPHORE_MP_RELEASE_REQUEST: the_packet = _Semaphore_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_SEMAPHORE; + the_packet->Prefix.the_class = MP_PACKET_SEMAPHORE; the_packet->Prefix.length = sizeof ( Semaphore_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Semaphore_MP_Packet ); if ( ! _Options_Is_no_wait(option_set)) @@ -222,7 +224,7 @@ void _Semaphore_MP_Process_packet ( the_packet->Prefix.timeout ); - if ( ! _Status_Is_proxy_blocking( the_packet->Prefix.return_code ) ) + if ( ! _Thread_Is_proxy_blocking( the_packet->Prefix.return_code ) ) _Semaphore_MP_Send_response_packet( SEMAPHORE_MP_OBTAIN_RESPONSE, the_packet->Prefix.id, diff --git a/c/src/exec/rtems/src/signal.c b/c/src/exec/rtems/src/signal.c index 8a300d2969..f43107fe12 100644 --- a/c/src/exec/rtems/src/signal.c +++ b/c/src/exec/rtems/src/signal.c @@ -14,14 +14,39 @@ */ #include <rtems/system.h> -#include <rtems/asr.h> -#include <rtems/isr.h> -#include <rtems/modes.h> -#include <rtems/signal.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/asr.h> +#include <rtems/core/isr.h> +#include <rtems/rtems/modes.h> +#include <rtems/rtems/signal.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/tasks.h> /*PAGE * + * _Signal_Manager_initialization + * + * This routine initializes all signal manager related data structures. + * + * Input parameters: NONE + * + * Output parameters: NONE + */ + +void _Signal_Manager_initialization( void ) +{ + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_SIGNAL, + _Signal_MP_Process_packet + ); +} + +/*PAGE + * * rtems_signal_catch * * This directive allows a thread to specify what action to take when @@ -41,21 +66,26 @@ rtems_status_code rtems_signal_catch( rtems_mode mode_set ) { - Thread_Control *executing; + Thread_Control *executing; + RTEMS_API_Control *api; + ASR_Information *asr; /* XXX normalize mode */ executing = _Thread_Executing; + api = executing->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + _Thread_Disable_dispatch(); /* cannot reschedule while */ /* the thread is inconsistent */ if ( !_ASR_Is_null_handler( asr_handler ) ) { - executing->RTEMS_API->Signal.mode_set = mode_set; - executing->RTEMS_API->Signal.handler = asr_handler; + asr->mode_set = mode_set; + asr->handler = asr_handler; } else - _ASR_Initialize( &executing->RTEMS_API->Signal ); + _ASR_Initialize( asr ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -80,11 +110,13 @@ rtems_status_code rtems_signal_send( { register Thread_Control *the_thread; Objects_Locations location; + RTEMS_API_Control *api; + ASR_Information *asr; the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: return _Signal_MP_Send_request_packet( SIGNAL_MP_SEND_REQUEST, @@ -92,22 +124,23 @@ rtems_status_code rtems_signal_send( signal_set ); case OBJECTS_LOCAL: - if ( ! _ASR_Is_null_handler( the_thread->RTEMS_API->Signal.handler ) ) { - if ( _Modes_Is_asr_disabled( the_thread->current_modes ) ) - _ASR_Post_signals( - signal_set, &the_thread->RTEMS_API->Signal.signals_pending ); - else { - _ASR_Post_signals( - signal_set, &the_thread->RTEMS_API->Signal.signals_posted ); + api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + + if ( ! _ASR_Is_null_handler( asr->handler ) ) { + if ( asr->is_enabled ) { + _ASR_Post_signals( signal_set, &asr->signals_posted ); if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) ) _ISR_Signals_to_thread_executing = TRUE; + } else { + _ASR_Post_signals( signal_set, &asr->signals_pending ); } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/rtems/src/signalmp.c b/c/src/exec/rtems/src/signalmp.c index 4ac8123766..3a38818c25 100644 --- a/c/src/exec/rtems/src/signalmp.c +++ b/c/src/exec/rtems/src/signalmp.c @@ -14,14 +14,16 @@ */ #include <rtems/system.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/signal.h> -#include <rtems/states.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/signal.h> +#include <rtems/core/states.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -51,7 +53,7 @@ rtems_status_code _Signal_MP_Send_request_packet ( case SIGNAL_MP_SEND_REQUEST: the_packet = _Signal_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_SIGNAL; + the_packet->Prefix.the_class = MP_PACKET_SIGNAL; the_packet->Prefix.length = sizeof ( Signal_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( Signal_MP_Packet ); the_packet->operation = operation; diff --git a/c/src/exec/rtems/src/taskmp.c b/c/src/exec/rtems/src/taskmp.c index 2b7fb214c6..98b0e9d3e5 100644 --- a/c/src/exec/rtems/src/taskmp.c +++ b/c/src/exec/rtems/src/taskmp.c @@ -14,13 +14,15 @@ */ #include <rtems/system.h> -#include <rtems/mpci.h> -#include <rtems/mppkt.h> -#include <rtems/object.h> -#include <rtems/options.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/core/mpci.h> +#include <rtems/core/mppkt.h> +#include <rtems/core/object.h> +#include <rtems/rtems/options.h> +#include <rtems/rtems/tasks.h> +#include <rtems/core/thread.h> +#include <rtems/core/watchdog.h> +#include <rtems/rtems/support.h> /*PAGE * @@ -42,7 +44,7 @@ void _RTEMS_tasks_MP_Send_process_packet ( case RTEMS_TASKS_MP_ANNOUNCE_DELETE: the_packet = _RTEMS_tasks_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_TASKS; + the_packet->Prefix.the_class = MP_PACKET_TASKS; the_packet->Prefix.length = sizeof ( RTEMS_tasks_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet ); the_packet->operation = operation; @@ -91,7 +93,7 @@ rtems_status_code _RTEMS_tasks_MP_Send_request_packet ( case RTEMS_TASKS_MP_SET_NOTE_REQUEST: the_packet = _RTEMS_tasks_MP_Get_packet(); - the_packet->Prefix.the_class = RTEMS_MP_PACKET_TASKS; + the_packet->Prefix.the_class = MP_PACKET_TASKS; the_packet->Prefix.length = sizeof ( RTEMS_tasks_MP_Packet ); the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet ); the_packet->operation = operation; @@ -332,7 +334,7 @@ void _RTEMS_tasks_MP_Process_packet ( RTEMS_tasks_MP_Packet *_RTEMS_tasks_MP_Get_packet ( void ) { - return ( (RTEMS_tasks_MP_Packet *) _MPCI_Get_packet() ); + return (RTEMS_tasks_MP_Packet *) _MPCI_Get_packet(); } /* end of file */ diff --git a/c/src/exec/rtems/src/tasks.c b/c/src/exec/rtems/src/tasks.c index 62bc8c1995..70ec7d6928 100644 --- a/c/src/exec/rtems/src/tasks.c +++ b/c/src/exec/rtems/src/tasks.c @@ -14,17 +14,148 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/modes.h> -#include <rtems/object.h> -#include <rtems/stack.h> -#include <rtems/states.h> -#include <rtems/tasks.h> -#include <rtems/thread.h> -#include <rtems/threadq.h> -#include <rtems/tod.h> -#include <rtems/userext.h> -#include <rtems/wkspace.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/rtems/modes.h> +#include <rtems/core/object.h> +#include <rtems/core/stack.h> +#include <rtems/core/states.h> +#include <rtems/rtems/tasks.h> +#include <rtems/core/thread.h> +#include <rtems/core/threadq.h> +#include <rtems/core/tod.h> +#include <rtems/core/userext.h> +#include <rtems/core/wkspace.h> +#include <rtems/core/intthrd.h> +#include <rtems/sysstate.h> + +/*PAGE + * + * _RTEMS_tasks_Create_extension + * + * XXX + */ + +boolean _RTEMS_tasks_Create_extension( + Thread_Control *executing, + Thread_Control *created +) +{ + RTEMS_API_Control *api; + + api = _Workspace_Allocate( sizeof( RTEMS_API_Control ) ); + + if ( !api ) + return FALSE; + + created->API_Extensions[ THREAD_API_RTEMS ] = api; + + api->pending_events = EVENT_SETS_NONE_PENDING; + _ASR_Initialize( &api->Signal ); + return TRUE; +} + +/*PAGE + * + * _RTEMS_tasks_Start_extension + * + * XXX + */ + +User_extensions_routine _RTEMS_tasks_Start_extension( + Thread_Control *executing, + Thread_Control *started +) +{ + RTEMS_API_Control *api; + + api = started->API_Extensions[ THREAD_API_RTEMS ]; + + api->pending_events = EVENT_SETS_NONE_PENDING; + + _ASR_Initialize( &api->Signal ); +} + +/*PAGE + * + * _RTEMS_tasks_Delete_extension + * + * XXX + */ + +User_extensions_routine _RTEMS_tasks_Delete_extension( + Thread_Control *executing, + Thread_Control *deleted +) +{ + (void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] ); + + deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL; +} + +/*PAGE + * + * _RTEMS_tasks_Switch_extension + * + * XXX + */ + +User_extensions_routine _RTEMS_tasks_Switch_extension( + Thread_Control *executing +) +{ + ISR_Level level; + RTEMS_API_Control *api; + ASR_Information *asr; + rtems_signal_set signal_set; + Modes_Control prev_mode; + + api = executing->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + + _ISR_Disable( level ); + + signal_set = asr->signals_posted; + + if ( signal_set ) { + /* if ( _ASR_Are_signals_pending( asr ) ) { + + signal_set = asr->signals_posted; */ + asr->signals_posted = 0; + _ISR_Enable( level ); + + asr->nest_level += 1; + rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); + + (*asr->handler)( signal_set ); + + asr->nest_level -= 1; + rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); + } + else + _ISR_Enable( level ); + +} + +Internal_threads_Extensions_control _RTEMS_tasks_Internal_thread_extensions = { + { NULL, NULL }, + NULL, /* predriver */ + _RTEMS_tasks_Initialize_user_tasks /* postdriver */ +}; + +User_extensions_Control _RTEMS_tasks_API_extensions = { + { NULL, NULL }, + { _RTEMS_tasks_Create_extension, /* create */ + _RTEMS_tasks_Start_extension, /* start */ + _RTEMS_tasks_Start_extension, /* restart */ + _RTEMS_tasks_Delete_extension, /* delete */ + NULL, /* switch */ + _RTEMS_tasks_Switch_extension, /* post switch */ + NULL, /* begin */ + NULL, /* exitted */ + NULL /* fatal */ + } +}; /*PAGE * @@ -39,9 +170,18 @@ */ void _RTEMS_tasks_Manager_initialization( - unsigned32 maximum_tasks + unsigned32 maximum_tasks, + unsigned32 number_of_initialization_tasks, + rtems_initialization_tasks_table *user_tasks ) { + + _RTEMS_tasks_Number_of_initialization_tasks = number_of_initialization_tasks; + _RTEMS_tasks_User_initialization_tasks = user_tasks; + + if ( user_tasks == NULL || number_of_initialization_tasks == 0 ) + _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, RTEMS_TOO_MANY ); + _Objects_Initialize_information( &_RTEMS_tasks_Information, OBJECTS_RTEMS_TASKS, @@ -52,6 +192,24 @@ void _RTEMS_tasks_Manager_initialization( RTEMS_MAXIMUM_NAME_LENGTH, TRUE ); + + /* + * Add all the extensions for this API + */ + + _User_extensions_Add_API_set( &_RTEMS_tasks_API_extensions ); + + _Internal_threads_Add_extension( &_RTEMS_tasks_Internal_thread_extensions ); + + /* + * Register the MP Process Packet routine. + */ + + _MPCI_Register_packet_processor( + MP_PACKET_TASKS, + _RTEMS_tasks_MP_Process_packet + ); + } /*PAGE @@ -89,12 +247,15 @@ rtems_status_code rtems_task_create( Objects_MP_Control *the_global_object = NULL; boolean is_fp; boolean is_global; + boolean status; rtems_attribute the_attribute_set; Priority_Control core_priority; + RTEMS_API_Control *api; + ASR_Information *asr; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; /* * Core Thread Initialize insures we get the minimum amount of @@ -103,17 +264,17 @@ rtems_status_code rtems_task_create( #if 0 if ( !_Stack_Is_enough( stack_size ) ) - return( RTEMS_INVALID_SIZE ); + return RTEMS_INVALID_SIZE; #endif /* * Validate the RTEMS API priority and convert it to the core priority range. */ - if ( !_Priority_Is_valid( initial_priority ) ) - return( RTEMS_INVALID_PRIORITY ); + if ( !_RTEMS_tasks_Priority_is_valid( initial_priority ) ) + return RTEMS_INVALID_PRIORITY; - core_priority = _RTEMS_Tasks_Priority_to_Core( initial_priority ); + core_priority = _RTEMS_tasks_Priority_to_Core( initial_priority ); /* * Fix the attribute set to match the attributes which @@ -137,8 +298,8 @@ rtems_status_code rtems_task_create( is_global = TRUE; - if ( !_Configuration_Is_multiprocessing() ) - return( RTEMS_MP_NOT_CONFIGURED ); + if ( !_System_state_Is_multiprocessing ) + return RTEMS_MP_NOT_CONFIGURED; } else is_global = FALSE; @@ -167,7 +328,7 @@ rtems_status_code rtems_task_create( if ( !the_thread ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } if ( is_global ) { @@ -176,49 +337,45 @@ rtems_status_code rtems_task_create( if ( _Objects_MP_Is_null_global_object( the_global_object ) ) { _RTEMS_tasks_Free( the_thread ); _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } } -#if 0 - /* - * Allocate and initialize the RTEMS API specific information - */ - - the_thread->RTEMS_API = _Workspace_Allocate( sizeof( RTEMS_API_Control ) ); - - if ( !the_thread->RTEMS_API ) { - _RTEMS_tasks_Free( the_thread ); - if ( is_global ) - _Objects_MP_Free_global_object( the_global_object ); - _Thread_Enable_dispatch(); - return( RTEMS_UNSATISFIED ); - } - - the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; - _ASR_Initialize( &the_thread->RTEMS_API->Signal ); -#endif - /* * Initialize the core thread for this task. */ -/* XXX normalize mode */ + status = _Thread_Initialize( + &_RTEMS_tasks_Information, + the_thread, + NULL, + stack_size, + is_fp, + core_priority, + _Modes_Is_preempt(initial_modes) ? TRUE : FALSE, + _Modes_Is_timeslice(initial_modes) ? TRUE : FALSE, + _Modes_Get_interrupt_level(initial_modes), + &name + ); - if ( !_Thread_Initialize( &_RTEMS_tasks_Information, the_thread, - NULL, stack_size, is_fp, core_priority, initial_modes, &name ) ) { + if ( !status ) { if ( is_global ) _Objects_MP_Free_global_object( the_global_object ); _RTEMS_tasks_Free( the_thread ); _Thread_Enable_dispatch(); - return( RTEMS_UNSATISFIED ); + return RTEMS_UNSATISFIED; } + api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + + asr->is_enabled = _Modes_Is_asr_disabled(initial_modes) ? FALSE : TRUE; + *id = the_thread->Object.id; if ( is_global ) { - the_thread->RTEMS_API->is_global = TRUE; + the_thread->is_global = TRUE; _Objects_MP_Open( &_RTEMS_tasks_Information, @@ -236,7 +393,7 @@ rtems_status_code rtems_task_create( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -263,11 +420,16 @@ rtems_status_code rtems_task_ident( Objects_Id *id ) { - if ( name != OBJECTS_ID_OF_SELF ) - return( _Objects_Name_to_id( &_RTEMS_tasks_Information, &name, node, id ) ); + Objects_Name_to_id_errors status; + + if ( name == OBJECTS_ID_OF_SELF ) { + *id = _Thread_Executing->Object.id; + return RTEMS_SUCCESSFUL; + } + + status = _Objects_Name_to_id( &_RTEMS_tasks_Information, &name, node, id ); - *id = _Thread_Executing->Object.id; - return( RTEMS_SUCCESSFUL ); + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -298,26 +460,26 @@ rtems_status_code rtems_task_start( Objects_Locations location; if ( entry_point == NULL ) - return( RTEMS_INVALID_ADDRESS ); + return RTEMS_INVALID_ADDRESS; the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Dispatch(); - return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; case OBJECTS_LOCAL: if ( _Thread_Start( the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) { _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_INCORRECT_STATE ); + return RTEMS_INCORRECT_STATE; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -349,25 +511,20 @@ rtems_status_code rtems_task_restart( the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Dispatch(); - return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; case OBJECTS_LOCAL: if ( _Thread_Restart( the_thread, NULL, argument ) ) { - - /* XXX until these are in an API extension they are too late. */ - _ASR_Initialize( &the_thread->RTEMS_API->Signal ); - the_thread->RTEMS_API->pending_events = EVENT_SETS_NONE_PENDING; - _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_INCORRECT_STATE ); + return RTEMS_INCORRECT_STATE; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -398,19 +555,16 @@ rtems_status_code rtems_task_delete( the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Dispatch(); - return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT ); + return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; case OBJECTS_LOCAL: _Thread_Close( &_RTEMS_tasks_Information, the_thread ); - /* XXX */ - (void) _Workspace_Free( the_thread->RTEMS_API ); - _RTEMS_tasks_Free( the_thread ); - if ( _Attributes_Is_global( the_thread->RTEMS_API->is_global ) ) { + if ( the_thread->is_global ) { _Objects_MP_Close( &_RTEMS_tasks_Information, the_thread->Object.id ); @@ -422,10 +576,10 @@ rtems_status_code rtems_task_delete( } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -454,28 +608,26 @@ rtems_status_code rtems_task_suspend( the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: - return( - _RTEMS_tasks_MP_Send_request_packet( - RTEMS_TASKS_MP_SUSPEND_REQUEST, - id, - 0, /* Not used */ - 0, /* Not used */ - 0 /* Not used */ - ) + return _RTEMS_tasks_MP_Send_request_packet( + RTEMS_TASKS_MP_SUSPEND_REQUEST, + id, + 0, /* Not used */ + 0, /* Not used */ + 0 /* Not used */ ); case OBJECTS_LOCAL: if ( !_States_Is_suspended( the_thread->current_state ) ) { _Thread_Set_state( the_thread, STATES_SUSPENDED ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_ALREADY_SUSPENDED ); + return RTEMS_ALREADY_SUSPENDED; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -503,7 +655,7 @@ rtems_status_code rtems_task_resume( the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: return( _RTEMS_tasks_MP_Send_request_packet( @@ -518,13 +670,13 @@ rtems_status_code rtems_task_resume( if ( _States_Is_suspended( the_thread->current_state ) ) { _Thread_Resume( the_thread ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_INCORRECT_STATE ); + return RTEMS_INCORRECT_STATE; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -556,13 +708,13 @@ rtems_status_code rtems_task_set_priority( Objects_Locations location; if ( new_priority != RTEMS_CURRENT_PRIORITY && - !_Priority_Is_valid( new_priority ) ) - return( RTEMS_INVALID_PRIORITY ); + !_RTEMS_tasks_Priority_is_valid( new_priority ) ) + return RTEMS_INVALID_PRIORITY; the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Executing->Wait.return_argument = old_priority; return( @@ -583,10 +735,10 @@ rtems_status_code rtems_task_set_priority( _Thread_Change_priority( the_thread, new_priority ); } _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -603,7 +755,7 @@ rtems_status_code rtems_task_set_priority( * * Output: * *previous_mode_set - previous mode set - * always returns RTEMS_SUCCESSFUL + * always return RTEMS_SUCCESSFUL; */ rtems_status_code rtems_task_mode( @@ -612,9 +764,62 @@ rtems_status_code rtems_task_mode( rtems_mode *previous_mode_set ) { - if ( _Thread_Change_mode( mode_set, mask, previous_mode_set ) ) + Thread_Control *executing; + RTEMS_API_Control *api; + ASR_Information *asr; + boolean is_asr_enabled = FALSE; + boolean needs_asr_dispatching = FALSE; + rtems_mode old_mode; + + executing = _Thread_Executing; + api = executing->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + + old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT; + old_mode |= (executing->is_timeslice) ? RTEMS_TIMESLICE : RTEMS_NO_TIMESLICE; + old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR; + old_mode |= _ISR_Get_level(); + + *previous_mode_set = old_mode; + + /* + * These are generic thread scheduling characteristics. + */ + + if ( mask & RTEMS_PREEMPT_MASK ) + executing->is_preemptible = _Modes_Is_preempt(mode_set) ? TRUE : FALSE; + + if ( mask & RTEMS_TIMESLICE_MASK ) + executing->is_timeslice = _Modes_Is_timeslice(mode_set) ? TRUE : FALSE; + + /* + * Set the new interrupt level + */ + + if ( mask & RTEMS_INTERRUPT_MASK ) + _Modes_Set_interrupt_level( mode_set ); + + /* + * This is specific to the RTEMS API + */ + + is_asr_enabled = FALSE; + needs_asr_dispatching = FALSE; + + if ( mask & RTEMS_ASR_MASK ) { + is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? FALSE : TRUE; + if ( is_asr_enabled != asr->is_enabled ) { + asr->is_enabled = is_asr_enabled; + _ASR_Swap_signals( asr ); + if ( _ASR_Are_signals_pending( asr ) ) + needs_asr_dispatching = TRUE; + } + } + + if ( _Thread_Evaluate_mode() || needs_asr_dispatching ) _Thread_Dispatch(); - return( RTEMS_SUCCESSFUL ); + + return RTEMS_SUCCESSFUL; } /*PAGE @@ -643,6 +848,7 @@ rtems_status_code rtems_task_get_note( { register Thread_Control *the_thread; Objects_Locations location; + RTEMS_API_Control *api; /* * NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would @@ -650,7 +856,7 @@ rtems_status_code rtems_task_get_note( */ if ( notepad > RTEMS_NOTEPAD_LAST ) - return( RTEMS_INVALID_NUMBER ); + return RTEMS_INVALID_NUMBER; /* * Optimize the most likely case to avoid the Thread_Dispatch. @@ -658,14 +864,15 @@ rtems_status_code rtems_task_get_note( if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { - *note = _Thread_Executing->RTEMS_API->Notepads[ notepad ]; - return( RTEMS_SUCCESSFUL ); + api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; + *note = api->Notepads[ notepad ]; + return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: _Thread_Executing->Wait.return_argument = note; @@ -677,12 +884,13 @@ rtems_status_code rtems_task_get_note( 0 /* Not used */ ); case OBJECTS_LOCAL: - *note= the_thread->RTEMS_API->Notepads[ notepad ]; + api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; + *note = api->Notepads[ notepad ]; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -710,6 +918,7 @@ rtems_status_code rtems_task_set_note( { register Thread_Control *the_thread; Objects_Locations location; + RTEMS_API_Control *api; /* * NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would @@ -717,7 +926,7 @@ rtems_status_code rtems_task_set_note( */ if ( notepad > RTEMS_NOTEPAD_LAST ) - return( RTEMS_INVALID_NUMBER ); + return RTEMS_INVALID_NUMBER; /* * Optimize the most likely case to avoid the Thread_Dispatch. @@ -725,14 +934,15 @@ rtems_status_code rtems_task_set_note( if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) || _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) { - _Thread_Executing->RTEMS_API->Notepads[ notepad ] = note; - return( RTEMS_SUCCESSFUL ); + api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; + api->Notepads[ notepad ] = note; + return RTEMS_SUCCESSFUL; } the_thread = _Thread_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: return _RTEMS_tasks_MP_Send_request_packet( RTEMS_TASKS_MP_SET_NOTE_REQUEST, @@ -743,12 +953,13 @@ rtems_status_code rtems_task_set_note( ); case OBJECTS_LOCAL: - the_thread->RTEMS_API->Notepads[ notepad ] = note; + api = the_thread->API_Extensions[ THREAD_API_RTEMS ]; + api->Notepads[ notepad ] = note; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -785,7 +996,7 @@ rtems_status_code rtems_task_wake_after( ticks, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); } - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -807,23 +1018,20 @@ rtems_status_code rtems_task_wake_when( rtems_time_of_day *time_buffer ) { - rtems_interval seconds; - rtems_status_code local_result; + Watchdog_Interval seconds; if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; time_buffer->ticks = 0; - local_result = _TOD_Validate( time_buffer ); - - if ( !rtems_is_status_successful( local_result ) ) - return( local_result ); + if ( !_TOD_Validate( time_buffer ) ) + return RTEMS_INVALID_CLOCK; seconds = _TOD_To_seconds( time_buffer ); if ( seconds <= _TOD_Seconds_since_epoch ) - return( RTEMS_INVALID_CLOCK ); + return RTEMS_INVALID_CLOCK; _Thread_Disable_dispatch(); _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_TIME ); @@ -836,5 +1044,57 @@ rtems_time_of_day *time_buffer _Watchdog_Insert_seconds( &_Thread_Executing->Timer, seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } + +/*PAGE + * + * _RTEMS_tasks_Initialize_user_tasks + * + * This routine creates and starts all configured user + * initialzation threads. + * + * Input parameters: NONE + * + * Output parameters: NONE + */ + +void _RTEMS_tasks_Initialize_user_tasks( void ) +{ + unsigned32 index; + unsigned32 maximum; + rtems_id id; + rtems_status_code return_value; + rtems_initialization_tasks_table *user_tasks; + + /* + * NOTE: This is slightly different from the Ada implementation. + */ + + user_tasks = _RTEMS_tasks_User_initialization_tasks; + maximum = _RTEMS_tasks_Number_of_initialization_tasks; + + for ( index=0 ; index < maximum ; index++ ) { + return_value = rtems_task_create( + user_tasks[ index ].name, + user_tasks[ index ].initial_priority, + user_tasks[ index ].stack_size, + user_tasks[ index ].mode_set, + user_tasks[ index ].attribute_set, + &id + ); + + if ( !rtems_is_status_successful( return_value ) ) + _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); + + return_value = rtems_task_start( + id, + user_tasks[ index ].entry_point, + user_tasks[ index ].argument + ); + + if ( !rtems_is_status_successful( return_value ) ) + _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, TRUE, return_value ); + } +} + diff --git a/c/src/exec/rtems/src/timer.c b/c/src/exec/rtems/src/timer.c index 68d9e4591b..c59e137d0c 100644 --- a/c/src/exec/rtems/src/timer.c +++ b/c/src/exec/rtems/src/timer.c @@ -14,12 +14,13 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/object.h> -#include <rtems/thread.h> -#include <rtems/timer.h> -#include <rtems/tod.h> -#include <rtems/watchdog.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> +#include <rtems/rtems/timer.h> +#include <rtems/core/tod.h> +#include <rtems/core/watchdog.h> /*PAGE * @@ -73,7 +74,7 @@ rtems_status_code rtems_timer_create( Timer_Control *the_timer; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -81,7 +82,7 @@ rtems_status_code rtems_timer_create( if ( !the_timer ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } the_timer->the_class = TIMER_DORMANT; @@ -90,7 +91,7 @@ rtems_status_code rtems_timer_create( *id = the_timer->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -115,12 +116,16 @@ rtems_status_code rtems_timer_ident( Objects_Id *id ) { - return _Objects_Name_to_id( + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Timer_Information, &name, - RTEMS_SEARCH_LOCAL_NODE, + OBJECTS_SEARCH_LOCAL_NODE, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -147,17 +152,17 @@ rtems_status_code rtems_timer_cancel( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) (void) _Watchdog_Remove( &the_timer->Ticker ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -184,18 +189,18 @@ rtems_status_code rtems_timer_delete( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: _Objects_Close( &_Timer_Information, &the_timer->Object ); (void) _Watchdog_Remove( &the_timer->Ticker ); _Timer_Free( the_timer ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -215,24 +220,24 @@ rtems_status_code rtems_timer_delete( */ rtems_status_code rtems_timer_fire_after( - Objects_Id id, - rtems_interval ticks, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_interval ticks, + rtems_timer_service_routine_entry routine, + void *user_data ) { Timer_Control *the_timer; Objects_Locations location; if ( ticks == 0 ) - return( RTEMS_INVALID_NUMBER ); + return RTEMS_INVALID_NUMBER; the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); the_timer->the_class = TIMER_INTERVAL; @@ -240,10 +245,10 @@ rtems_status_code rtems_timer_fire_after( _Watchdog_Insert_ticks( &the_timer->Ticker, ticks, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -263,34 +268,32 @@ rtems_status_code rtems_timer_fire_after( */ rtems_status_code rtems_timer_fire_when( - Objects_Id id, - rtems_time_of_day *wall_time, - Timer_Service routine, - void *user_data + Objects_Id id, + rtems_time_of_day *wall_time, + rtems_timer_service_routine_entry routine, + void *user_data ) { - Timer_Control *the_timer; - Objects_Locations location; - rtems_status_code validate_status; + Timer_Control *the_timer; + Objects_Locations location; rtems_interval seconds; if ( !_TOD_Is_set() ) - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; - validate_status = _TOD_Validate( wall_time ); - if ( !rtems_is_status_successful( validate_status ) ) - return( validate_status ); + if ( !_TOD_Validate( wall_time ) ) + return RTEMS_INVALID_CLOCK; seconds = _TOD_To_seconds( wall_time ); if ( seconds <= _TOD_Seconds_since_epoch ) - return( RTEMS_INVALID_CLOCK ); + return RTEMS_INVALID_CLOCK; the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: (void) _Watchdog_Remove( &the_timer->Ticker ); the_timer->the_class = TIMER_TIME_OF_DAY; @@ -298,10 +301,10 @@ rtems_status_code rtems_timer_fire_when( _Watchdog_Insert_seconds( &the_timer->Ticker, seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } /*PAGE @@ -328,18 +331,18 @@ rtems_status_code rtems_timer_reset( the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_ERROR: - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INTERNAL_ERROR ); + return RTEMS_INTERNAL_ERROR; case OBJECTS_LOCAL: if ( _Timer_Is_interval_class( the_timer->the_class ) ) { _Watchdog_Reset( &the_timer->Ticker ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } _Thread_Enable_dispatch(); - return( RTEMS_NOT_DEFINED ); + return RTEMS_NOT_DEFINED; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/sapi/headers/config.h b/c/src/exec/sapi/headers/config.h index 766ea4a4a8..31e8093387 100644 --- a/c/src/exec/sapi/headers/config.h +++ b/c/src/exec/sapi/headers/config.h @@ -21,164 +21,12 @@ extern "C" { #endif -#include <rtems/types.h> -#include <rtems/object.h> -#include <rtems/thread.h> - -/* - * The following records define the Initialization Tasks Table. - * Each entry contains the information required by RTEMS to - * create and start a user task automatically at executive - * initialization time. - */ - -typedef struct { - rtems_name name; /* task name */ - unsigned32 stack_size; /* task stack size */ - rtems_task_priority initial_priority; /* task priority */ - rtems_attribute attribute_set; /* task attributes */ - rtems_task_entry entry_point; /* task entry point */ - rtems_mode mode_set; /* task initial mode */ - unsigned32 argument; /* task argument */ -} rtems_initialization_tasks_table; - -/* - * - * The following defines the types for: - * - * + major and minor numbers - * + the return type of a device driver entry - * + a pointer to a device driver entry - * + an entry in the the Device Driver Address Table. Each entry in this - * table corresponds to an application provided device driver and - * defines the entry points for that device driver. - */ - -typedef unsigned32 rtems_device_major_number; -typedef unsigned32 rtems_device_minor_number; - -typedef rtems_status_code rtems_device_driver; - -typedef rtems_device_driver ( *rtems_device_driver_entry )( - rtems_device_major_number, - rtems_device_minor_number, - void * - ); - -typedef struct { - rtems_device_driver_entry initialization; /* initialization procedure */ - rtems_device_driver_entry open; /* open request procedure */ - rtems_device_driver_entry close; /* close request procedure */ - rtems_device_driver_entry read; /* read request procedure */ - rtems_device_driver_entry write; /* write request procedure */ - rtems_device_driver_entry control; /* special functions procedure */ -} rtems_driver_address_table; - -/* - * 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 task and - * the system as a whole. - */ - -typedef void rtems_extension; - -typedef rtems_extension ( *rtems_task_create_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_delete_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_start_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_restart_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_switch_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_begin_extension )( - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_exitted_extension )( - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_fatal_extension )( - unsigned32 - ); - -typedef struct { - rtems_task_create_extension rtems_task_create; - rtems_task_start_extension rtems_task_start; - rtems_task_restart_extension rtems_task_restart; - rtems_task_delete_extension rtems_task_delete; - rtems_task_switch_extension task_switch; - rtems_task_begin_extension task_begin; - rtems_task_exitted_extension task_exitted; - rtems_fatal_extension fatal; -} rtems_extensions_table; - -/* - * 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 RTEMS system. - * - * For non-blocking local operations that become remote operations, - * we need a timeout. This is a per-driver timeout: default_timeout - */ - -/* XXX FORWARD REFERENCES */ - -typedef struct Configuration_Table rtems_configuration_table; -typedef struct Configuration_Table_MP rtems_multiprocessing_table; - -typedef void rtems_mpci_entry; - -typedef rtems_mpci_entry ( *rtems_mpci_initialization_entry )( - rtems_configuration_table *, - rtems_cpu_table *, - rtems_multiprocessing_table * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_get_packet_entry )( - rtems_packet_prefix ** - ); - -typedef rtems_mpci_entry ( *rtems_mpci_return_packet_entry )( - rtems_packet_prefix * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_send_entry )( - unsigned32, - rtems_packet_prefix * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_receive_entry )( - rtems_packet_prefix ** - ); - -typedef struct { - unsigned32 default_timeout; /* in ticks */ - unsigned32 maximum_packet_size; - rtems_mpci_initialization_entry initialization; - rtems_mpci_get_packet_entry get_packet; - rtems_mpci_return_packet_entry return_packet; - rtems_mpci_send_entry send_packet; - rtems_mpci_receive_entry receive_packet; -} rtems_mpci_table; +#include <rtems/rtems/status.h> +#include <rtems/extension.h> +#include <rtems/io.h> +#include <rtems/core/mpci.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/tasks.h> /* * The following records define the Multiprocessor Configuration @@ -187,13 +35,13 @@ typedef struct { * system. */ -struct Configuration_Table_MP { - unsigned32 node; /* local node number */ - unsigned32 maximum_nodes; /* maximum # nodes in system */ - unsigned32 maximum_global_objects; /* maximum # global objects */ - unsigned32 maximum_proxies; /* maximum # proxies */ - rtems_mpci_table *User_mpci_table; /* pointer to MPCI table */ -}; +typedef struct { + unsigned32 node; /* local node number */ + unsigned32 maximum_nodes; /* maximum # nodes in system */ + unsigned32 maximum_global_objects; /* maximum # global objects */ + unsigned32 maximum_proxies; /* maximum # proxies */ + MPCI_Control *User_mpci_table; /* pointer to MPCI table */ +} rtems_multiprocessing_table; /* * The following records define the Configuration Table. The @@ -207,7 +55,7 @@ struct Configuration_Table_MP { * + clock ticks per task timeslice */ -struct Configuration_Table { +typedef struct { void *work_space_start; unsigned32 work_space_size; unsigned32 maximum_tasks; @@ -224,92 +72,19 @@ struct Configuration_Table { unsigned32 number_of_initialization_tasks; rtems_initialization_tasks_table *User_initialization_tasks_table; unsigned32 number_of_device_drivers; + unsigned32 maximum_devices; rtems_driver_address_table *Device_driver_table; rtems_extensions_table *User_extension_table; rtems_multiprocessing_table *User_multiprocessing_table; -}; - -/* - * The following defines the default Multiprocessing Configuration - * Table. This table is used in a single processor system. - */ - -extern const rtems_multiprocessing_table - _Configuration_Default_multiprocessing_table; - -/* - * The following define the internal pointers to the user's - * configuration information. - */ - -EXTERN rtems_configuration_table *_Configuration_Table; -EXTERN rtems_multiprocessing_table *_Configuration_MP_table; -EXTERN rtems_mpci_table *_Configuration_MPCI_table; - -/* - * - * _Configuration_Handler_initialization - * - * DESCRIPTION: - * - * This routine performs the initialization necessary for this handler. - */ - -STATIC INLINE void _Configuration_Handler_initialization( - rtems_configuration_table *configuration_table, - rtems_multiprocessing_table *multiprocessing_table, - rtems_mpci_table *users_mpci_table -); - -/* - * _Configuration_Is_multiprocessing - * - * DESCRIPTION: - * - * This function determines if a multiprocessing application has been - * configured, if so, TRUE is returned, otherwise FALSE is returned. - */ - -STATIC INLINE boolean _Configuration_Is_multiprocessing( void ); - -/* - * _Configuration_Is_null_driver_address_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. - */ - -STATIC INLINE boolean _Configuration_Is_null_driver_address_table_pointer( - rtems_driver_address_table *the_table -); - -/* - * _Configuration_Is_null_extension_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. - */ - -STATIC INLINE boolean _Configuration_Is_null_extension_table_pointer( - rtems_extensions_table *the_table -); +} rtems_configuration_table; /* - * _Configuration_Is_null_initialization_tasks_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. + * The following are provided strictly for the convenience of + * the user. They are not used in RTEMS itself. */ -STATIC INLINE boolean - _Configuration_Is_null_initialization_tasks_table_pointer( - rtems_initialization_tasks_table *the_table -); - -#include <rtems/config.inl> +EXTERN rtems_configuration_table *_Configuration_Table; +EXTERN rtems_multiprocessing_table *_Configuration_MP_table; #ifdef __cplusplus } diff --git a/c/src/exec/sapi/headers/directives.h b/c/src/exec/sapi/headers/directives.h index 2b26672a0c..afcd56278f 100644 --- a/c/src/exec/sapi/headers/directives.h +++ b/c/src/exec/sapi/headers/directives.h @@ -106,6 +106,12 @@ extern "C" { #define RTEMS_NUMBER_OF_ENTRY_POINTS 82 +/* + * The jump table of entry points into RTEMS directives. + */ + +extern const void *_Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ]; + #ifdef __cplusplus } #endif diff --git a/c/src/exec/sapi/headers/extension.h b/c/src/exec/sapi/headers/extension.h index b447cc43fe..57c8a54271 100644 --- a/c/src/exec/sapi/headers/extension.h +++ b/c/src/exec/sapi/headers/extension.h @@ -28,9 +28,28 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/userext.h> +#include <rtems/core/object.h> +#include <rtems/core/userext.h> +#include <rtems/rtems/status.h> /* XXX */ +#include <rtems/rtems/types.h> /* XXX */ + +/* + * Extension related types + */ + +typedef User_extensions_routine rtems_extension; +typedef User_extensions_thread_create_extension rtems_task_create_extension; +typedef User_extensions_thread_delete_extension rtems_task_delete_extension; +typedef User_extensions_thread_start_extension rtems_task_start_extension; +typedef User_extensions_thread_restart_extension rtems_task_restart_extension; +typedef User_extensions_thread_switch_extension rtems_task_switch_extension; +typedef User_extensions_thread_post_switch_extension + rtems_task_post_switch_extension; +typedef User_extensions_thread_begin_extension rtems_task_begin_extension; +typedef User_extensions_thread_exitted_extension rtems_task_exitted_extension; +typedef User_extensions_fatal_extension rtems_fatal_extension; + +typedef User_extensions_Table rtems_extensions_table; /* * The following defines the information control block used to manage @@ -73,9 +92,9 @@ void _Extension_Manager_initialization( */ rtems_status_code rtems_extension_create( - rtems_name name, + rtems_name name, rtems_extensions_table *extension_table, - Objects_Id *id + Objects_Id *id ); /* diff --git a/c/src/exec/sapi/headers/init.h b/c/src/exec/sapi/headers/init.h index 8c6e34d2c3..e008c45ebc 100644 --- a/c/src/exec/sapi/headers/init.h +++ b/c/src/exec/sapi/headers/init.h @@ -30,9 +30,17 @@ extern "C" { #endif -#include <rtems/types.h> +#include <rtems/rtems/types.h> #include <rtems/config.h> -#include <rtems/intr.h> +#include <rtems/rtems/intr.h> + +/* + * The following defines the default Multiprocessing Configuration + * Table. This table is used in a single processor system. + */ + +extern const rtems_multiprocessing_table + _Initialization_Default_multiprocessing_table; /* * rtems_initialize_executive diff --git a/c/src/exec/sapi/headers/io.h b/c/src/exec/sapi/headers/io.h index ef9fc69d03..6f3afba53e 100644 --- a/c/src/exec/sapi/headers/io.h +++ b/c/src/exec/sapi/headers/io.h @@ -32,16 +32,40 @@ extern "C" { #endif -#include <rtems/config.h> +#include <rtems/rtems/status.h> /* - * The following declare the data required to manage the Device Driver - * Address Table. + * + * The following defines the types for: + * + * + major and minor numbers + * + the return type of a device driver entry + * + a pointer to a device driver entry + * + an entry in the the Device Driver Address Table. Each entry in this + * table corresponds to an application provided device driver and + * defines the entry points for that device driver. */ + +typedef unsigned32 rtems_device_major_number; +typedef unsigned32 rtems_device_minor_number; + +typedef rtems_status_code rtems_device_driver; + +typedef rtems_device_driver ( *rtems_device_driver_entry )( + rtems_device_major_number, + rtems_device_minor_number, + void * + ); -EXTERN unsigned32 _IO_Number_of_drivers; -EXTERN rtems_driver_address_table *_IO_Driver_address_table; - +typedef struct { + rtems_device_driver_entry initialization; /* initialization procedure */ + rtems_device_driver_entry open; /* open request procedure */ + rtems_device_driver_entry close; /* close request procedure */ + rtems_device_driver_entry read; /* read request procedure */ + rtems_device_driver_entry write; /* write request procedure */ + rtems_device_driver_entry control; /* special functions procedure */ +} rtems_driver_address_table; + /* * Table for the io device names */ @@ -53,12 +77,19 @@ typedef struct { rtems_device_minor_number minor; } rtems_driver_name_t; -/*XXX this really should be allocated some better way... */ -/*XXX it should probably be a chain and use a 'maximum' drivers field - * in config table */ -#define RTEMS_MAX_DRIVER_NAMES 20 -EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; +/* + * This is the table of device names. + */ + +/* + * The following declare the data required to manage the Driver + * Address Table and Device Name Table. + */ +EXTERN unsigned32 _IO_Number_of_drivers; +EXTERN rtems_driver_address_table *_IO_Driver_address_table; +EXTERN unsigned32 _IO_Number_of_devices; +EXTERN rtems_driver_name_t *_IO_Driver_name_table; /* * _IO_Manager_initialization @@ -70,7 +101,8 @@ EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; STATIC INLINE void _IO_Manager_initialization( rtems_driver_address_table *driver_table, - unsigned32 number_of_drivers + unsigned32 number_of_drivers, + unsigned32 number_of_devices ); /* diff --git a/c/src/exec/sapi/headers/sptables.h b/c/src/exec/sapi/headers/sptables.h index bbfd132760..2a91025100 100644 --- a/c/src/exec/sapi/headers/sptables.h +++ b/c/src/exec/sapi/headers/sptables.h @@ -23,13 +23,33 @@ extern "C" { #include <rtems/config.h> +#include <rtems/debug.h> +#include <rtems/fatal.h> +#include <rtems/init.h> +#include <rtems/io.h> +#include <rtems/sysstate.h> + +#include <rtems/rtems/intr.h> +#include <rtems/rtems/clock.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/dpmem.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/message.h> +#include <rtems/rtems/mp.h> +#include <rtems/rtems/part.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/rtems/region.h> +#include <rtems/rtems/sem.h> +#include <rtems/rtems/signal.h> +#include <rtems/rtems/timer.h> + /* * This is the default Multiprocessing Configuration Table. * It is used in single processor configurations. */ const rtems_multiprocessing_table - _Configuration_Default_multiprocessing_table = { + _Initialization_Default_multiprocessing_table = { 1, /* local node number */ 1, /* maximum number nodes in system */ 0, /* maximum number global objects */ diff --git a/c/src/exec/sapi/include/rtems/config.h b/c/src/exec/sapi/include/rtems/config.h index 766ea4a4a8..31e8093387 100644 --- a/c/src/exec/sapi/include/rtems/config.h +++ b/c/src/exec/sapi/include/rtems/config.h @@ -21,164 +21,12 @@ extern "C" { #endif -#include <rtems/types.h> -#include <rtems/object.h> -#include <rtems/thread.h> - -/* - * The following records define the Initialization Tasks Table. - * Each entry contains the information required by RTEMS to - * create and start a user task automatically at executive - * initialization time. - */ - -typedef struct { - rtems_name name; /* task name */ - unsigned32 stack_size; /* task stack size */ - rtems_task_priority initial_priority; /* task priority */ - rtems_attribute attribute_set; /* task attributes */ - rtems_task_entry entry_point; /* task entry point */ - rtems_mode mode_set; /* task initial mode */ - unsigned32 argument; /* task argument */ -} rtems_initialization_tasks_table; - -/* - * - * The following defines the types for: - * - * + major and minor numbers - * + the return type of a device driver entry - * + a pointer to a device driver entry - * + an entry in the the Device Driver Address Table. Each entry in this - * table corresponds to an application provided device driver and - * defines the entry points for that device driver. - */ - -typedef unsigned32 rtems_device_major_number; -typedef unsigned32 rtems_device_minor_number; - -typedef rtems_status_code rtems_device_driver; - -typedef rtems_device_driver ( *rtems_device_driver_entry )( - rtems_device_major_number, - rtems_device_minor_number, - void * - ); - -typedef struct { - rtems_device_driver_entry initialization; /* initialization procedure */ - rtems_device_driver_entry open; /* open request procedure */ - rtems_device_driver_entry close; /* close request procedure */ - rtems_device_driver_entry read; /* read request procedure */ - rtems_device_driver_entry write; /* write request procedure */ - rtems_device_driver_entry control; /* special functions procedure */ -} rtems_driver_address_table; - -/* - * 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 task and - * the system as a whole. - */ - -typedef void rtems_extension; - -typedef rtems_extension ( *rtems_task_create_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_delete_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_start_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_restart_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_switch_extension )( - rtems_tcb *, - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_begin_extension )( - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_task_exitted_extension )( - rtems_tcb * - ); - -typedef rtems_extension ( *rtems_fatal_extension )( - unsigned32 - ); - -typedef struct { - rtems_task_create_extension rtems_task_create; - rtems_task_start_extension rtems_task_start; - rtems_task_restart_extension rtems_task_restart; - rtems_task_delete_extension rtems_task_delete; - rtems_task_switch_extension task_switch; - rtems_task_begin_extension task_begin; - rtems_task_exitted_extension task_exitted; - rtems_fatal_extension fatal; -} rtems_extensions_table; - -/* - * 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 RTEMS system. - * - * For non-blocking local operations that become remote operations, - * we need a timeout. This is a per-driver timeout: default_timeout - */ - -/* XXX FORWARD REFERENCES */ - -typedef struct Configuration_Table rtems_configuration_table; -typedef struct Configuration_Table_MP rtems_multiprocessing_table; - -typedef void rtems_mpci_entry; - -typedef rtems_mpci_entry ( *rtems_mpci_initialization_entry )( - rtems_configuration_table *, - rtems_cpu_table *, - rtems_multiprocessing_table * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_get_packet_entry )( - rtems_packet_prefix ** - ); - -typedef rtems_mpci_entry ( *rtems_mpci_return_packet_entry )( - rtems_packet_prefix * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_send_entry )( - unsigned32, - rtems_packet_prefix * - ); - -typedef rtems_mpci_entry ( *rtems_mpci_receive_entry )( - rtems_packet_prefix ** - ); - -typedef struct { - unsigned32 default_timeout; /* in ticks */ - unsigned32 maximum_packet_size; - rtems_mpci_initialization_entry initialization; - rtems_mpci_get_packet_entry get_packet; - rtems_mpci_return_packet_entry return_packet; - rtems_mpci_send_entry send_packet; - rtems_mpci_receive_entry receive_packet; -} rtems_mpci_table; +#include <rtems/rtems/status.h> +#include <rtems/extension.h> +#include <rtems/io.h> +#include <rtems/core/mpci.h> +#include <rtems/rtems/types.h> +#include <rtems/rtems/tasks.h> /* * The following records define the Multiprocessor Configuration @@ -187,13 +35,13 @@ typedef struct { * system. */ -struct Configuration_Table_MP { - unsigned32 node; /* local node number */ - unsigned32 maximum_nodes; /* maximum # nodes in system */ - unsigned32 maximum_global_objects; /* maximum # global objects */ - unsigned32 maximum_proxies; /* maximum # proxies */ - rtems_mpci_table *User_mpci_table; /* pointer to MPCI table */ -}; +typedef struct { + unsigned32 node; /* local node number */ + unsigned32 maximum_nodes; /* maximum # nodes in system */ + unsigned32 maximum_global_objects; /* maximum # global objects */ + unsigned32 maximum_proxies; /* maximum # proxies */ + MPCI_Control *User_mpci_table; /* pointer to MPCI table */ +} rtems_multiprocessing_table; /* * The following records define the Configuration Table. The @@ -207,7 +55,7 @@ struct Configuration_Table_MP { * + clock ticks per task timeslice */ -struct Configuration_Table { +typedef struct { void *work_space_start; unsigned32 work_space_size; unsigned32 maximum_tasks; @@ -224,92 +72,19 @@ struct Configuration_Table { unsigned32 number_of_initialization_tasks; rtems_initialization_tasks_table *User_initialization_tasks_table; unsigned32 number_of_device_drivers; + unsigned32 maximum_devices; rtems_driver_address_table *Device_driver_table; rtems_extensions_table *User_extension_table; rtems_multiprocessing_table *User_multiprocessing_table; -}; - -/* - * The following defines the default Multiprocessing Configuration - * Table. This table is used in a single processor system. - */ - -extern const rtems_multiprocessing_table - _Configuration_Default_multiprocessing_table; - -/* - * The following define the internal pointers to the user's - * configuration information. - */ - -EXTERN rtems_configuration_table *_Configuration_Table; -EXTERN rtems_multiprocessing_table *_Configuration_MP_table; -EXTERN rtems_mpci_table *_Configuration_MPCI_table; - -/* - * - * _Configuration_Handler_initialization - * - * DESCRIPTION: - * - * This routine performs the initialization necessary for this handler. - */ - -STATIC INLINE void _Configuration_Handler_initialization( - rtems_configuration_table *configuration_table, - rtems_multiprocessing_table *multiprocessing_table, - rtems_mpci_table *users_mpci_table -); - -/* - * _Configuration_Is_multiprocessing - * - * DESCRIPTION: - * - * This function determines if a multiprocessing application has been - * configured, if so, TRUE is returned, otherwise FALSE is returned. - */ - -STATIC INLINE boolean _Configuration_Is_multiprocessing( void ); - -/* - * _Configuration_Is_null_driver_address_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. - */ - -STATIC INLINE boolean _Configuration_Is_null_driver_address_table_pointer( - rtems_driver_address_table *the_table -); - -/* - * _Configuration_Is_null_extension_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. - */ - -STATIC INLINE boolean _Configuration_Is_null_extension_table_pointer( - rtems_extensions_table *the_table -); +} rtems_configuration_table; /* - * _Configuration_Is_null_initialization_tasks_table_pointer - * - * DESCRIPTION: - * - * This function returns TRUE if the_table is NULL and FALSE otherwise. + * The following are provided strictly for the convenience of + * the user. They are not used in RTEMS itself. */ -STATIC INLINE boolean - _Configuration_Is_null_initialization_tasks_table_pointer( - rtems_initialization_tasks_table *the_table -); - -#include <rtems/config.inl> +EXTERN rtems_configuration_table *_Configuration_Table; +EXTERN rtems_multiprocessing_table *_Configuration_MP_table; #ifdef __cplusplus } diff --git a/c/src/exec/sapi/include/rtems/directives.h b/c/src/exec/sapi/include/rtems/directives.h index 2b26672a0c..afcd56278f 100644 --- a/c/src/exec/sapi/include/rtems/directives.h +++ b/c/src/exec/sapi/include/rtems/directives.h @@ -106,6 +106,12 @@ extern "C" { #define RTEMS_NUMBER_OF_ENTRY_POINTS 82 +/* + * The jump table of entry points into RTEMS directives. + */ + +extern const void *_Entry_points[ RTEMS_NUMBER_OF_ENTRY_POINTS ]; + #ifdef __cplusplus } #endif diff --git a/c/src/exec/sapi/include/rtems/extension.h b/c/src/exec/sapi/include/rtems/extension.h index b447cc43fe..57c8a54271 100644 --- a/c/src/exec/sapi/include/rtems/extension.h +++ b/c/src/exec/sapi/include/rtems/extension.h @@ -28,9 +28,28 @@ extern "C" { #endif -#include <rtems.h> -#include <rtems/object.h> -#include <rtems/userext.h> +#include <rtems/core/object.h> +#include <rtems/core/userext.h> +#include <rtems/rtems/status.h> /* XXX */ +#include <rtems/rtems/types.h> /* XXX */ + +/* + * Extension related types + */ + +typedef User_extensions_routine rtems_extension; +typedef User_extensions_thread_create_extension rtems_task_create_extension; +typedef User_extensions_thread_delete_extension rtems_task_delete_extension; +typedef User_extensions_thread_start_extension rtems_task_start_extension; +typedef User_extensions_thread_restart_extension rtems_task_restart_extension; +typedef User_extensions_thread_switch_extension rtems_task_switch_extension; +typedef User_extensions_thread_post_switch_extension + rtems_task_post_switch_extension; +typedef User_extensions_thread_begin_extension rtems_task_begin_extension; +typedef User_extensions_thread_exitted_extension rtems_task_exitted_extension; +typedef User_extensions_fatal_extension rtems_fatal_extension; + +typedef User_extensions_Table rtems_extensions_table; /* * The following defines the information control block used to manage @@ -73,9 +92,9 @@ void _Extension_Manager_initialization( */ rtems_status_code rtems_extension_create( - rtems_name name, + rtems_name name, rtems_extensions_table *extension_table, - Objects_Id *id + Objects_Id *id ); /* diff --git a/c/src/exec/sapi/include/rtems/init.h b/c/src/exec/sapi/include/rtems/init.h index 8c6e34d2c3..e008c45ebc 100644 --- a/c/src/exec/sapi/include/rtems/init.h +++ b/c/src/exec/sapi/include/rtems/init.h @@ -30,9 +30,17 @@ extern "C" { #endif -#include <rtems/types.h> +#include <rtems/rtems/types.h> #include <rtems/config.h> -#include <rtems/intr.h> +#include <rtems/rtems/intr.h> + +/* + * The following defines the default Multiprocessing Configuration + * Table. This table is used in a single processor system. + */ + +extern const rtems_multiprocessing_table + _Initialization_Default_multiprocessing_table; /* * rtems_initialize_executive diff --git a/c/src/exec/sapi/include/rtems/io.h b/c/src/exec/sapi/include/rtems/io.h index ef9fc69d03..6f3afba53e 100644 --- a/c/src/exec/sapi/include/rtems/io.h +++ b/c/src/exec/sapi/include/rtems/io.h @@ -32,16 +32,40 @@ extern "C" { #endif -#include <rtems/config.h> +#include <rtems/rtems/status.h> /* - * The following declare the data required to manage the Device Driver - * Address Table. + * + * The following defines the types for: + * + * + major and minor numbers + * + the return type of a device driver entry + * + a pointer to a device driver entry + * + an entry in the the Device Driver Address Table. Each entry in this + * table corresponds to an application provided device driver and + * defines the entry points for that device driver. */ + +typedef unsigned32 rtems_device_major_number; +typedef unsigned32 rtems_device_minor_number; + +typedef rtems_status_code rtems_device_driver; + +typedef rtems_device_driver ( *rtems_device_driver_entry )( + rtems_device_major_number, + rtems_device_minor_number, + void * + ); -EXTERN unsigned32 _IO_Number_of_drivers; -EXTERN rtems_driver_address_table *_IO_Driver_address_table; - +typedef struct { + rtems_device_driver_entry initialization; /* initialization procedure */ + rtems_device_driver_entry open; /* open request procedure */ + rtems_device_driver_entry close; /* close request procedure */ + rtems_device_driver_entry read; /* read request procedure */ + rtems_device_driver_entry write; /* write request procedure */ + rtems_device_driver_entry control; /* special functions procedure */ +} rtems_driver_address_table; + /* * Table for the io device names */ @@ -53,12 +77,19 @@ typedef struct { rtems_device_minor_number minor; } rtems_driver_name_t; -/*XXX this really should be allocated some better way... */ -/*XXX it should probably be a chain and use a 'maximum' drivers field - * in config table */ -#define RTEMS_MAX_DRIVER_NAMES 20 -EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; +/* + * This is the table of device names. + */ + +/* + * The following declare the data required to manage the Driver + * Address Table and Device Name Table. + */ +EXTERN unsigned32 _IO_Number_of_drivers; +EXTERN rtems_driver_address_table *_IO_Driver_address_table; +EXTERN unsigned32 _IO_Number_of_devices; +EXTERN rtems_driver_name_t *_IO_Driver_name_table; /* * _IO_Manager_initialization @@ -70,7 +101,8 @@ EXTERN rtems_driver_name_t rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; STATIC INLINE void _IO_Manager_initialization( rtems_driver_address_table *driver_table, - unsigned32 number_of_drivers + unsigned32 number_of_drivers, + unsigned32 number_of_devices ); /* diff --git a/c/src/exec/sapi/include/rtems/sptables.h b/c/src/exec/sapi/include/rtems/sptables.h index bbfd132760..2a91025100 100644 --- a/c/src/exec/sapi/include/rtems/sptables.h +++ b/c/src/exec/sapi/include/rtems/sptables.h @@ -23,13 +23,33 @@ extern "C" { #include <rtems/config.h> +#include <rtems/debug.h> +#include <rtems/fatal.h> +#include <rtems/init.h> +#include <rtems/io.h> +#include <rtems/sysstate.h> + +#include <rtems/rtems/intr.h> +#include <rtems/rtems/clock.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/dpmem.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/message.h> +#include <rtems/rtems/mp.h> +#include <rtems/rtems/part.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/rtems/region.h> +#include <rtems/rtems/sem.h> +#include <rtems/rtems/signal.h> +#include <rtems/rtems/timer.h> + /* * This is the default Multiprocessing Configuration Table. * It is used in single processor configurations. */ const rtems_multiprocessing_table - _Configuration_Default_multiprocessing_table = { + _Initialization_Default_multiprocessing_table = { 1, /* local node number */ 1, /* maximum number nodes in system */ 0, /* maximum number global objects */ diff --git a/c/src/exec/sapi/optman/no-ext.c b/c/src/exec/sapi/optman/no-ext.c index db1df3624f..ea5f04d672 100644 --- a/c/src/exec/sapi/optman/no-ext.c +++ b/c/src/exec/sapi/optman/no-ext.c @@ -14,8 +14,10 @@ */ #include <rtems/system.h> -#include <rtems/object.h> -#include <rtems/thread.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/support.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> #include <rtems/extension.h> void _Extension_Manager_initialization( @@ -25,12 +27,12 @@ void _Extension_Manager_initialization( } rtems_status_code rtems_extension_create( - rtems_name name, + rtems_name name, rtems_extensions_table *extension_table, - Objects_Id *id + Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_extension_ident( @@ -38,12 +40,12 @@ rtems_status_code rtems_extension_ident( Objects_Id *id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_extension_delete( Objects_Id id ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/sapi/optman/no-io.c b/c/src/exec/sapi/optman/no-io.c index d0fc7676f1..058ecfbfd2 100644 --- a/c/src/exec/sapi/optman/no-io.c +++ b/c/src/exec/sapi/optman/no-io.c @@ -14,10 +14,11 @@ */ #include <rtems/system.h> +#include <rtems/rtems/status.h> #include <rtems/config.h> #include <rtems/io.h> -#include <rtems/isr.h> -#include <rtems/thread.h> +#include <rtems/core/isr.h> +#include <rtems/core/thread.h> void _IO_Initialize_all_drivers( void ) { @@ -46,7 +47,7 @@ rtems_status_code rtems_io_initialize( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_io_open( @@ -55,7 +56,7 @@ rtems_status_code rtems_io_open( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_io_close( @@ -64,7 +65,7 @@ rtems_status_code rtems_io_close( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_io_read( @@ -73,7 +74,7 @@ rtems_status_code rtems_io_read( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_io_write( @@ -82,7 +83,7 @@ rtems_status_code rtems_io_write( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } rtems_status_code rtems_io_control( @@ -91,5 +92,5 @@ rtems_status_code rtems_io_control( void *argument ) { - return( RTEMS_NOT_CONFIGURED ); + return RTEMS_NOT_CONFIGURED; } diff --git a/c/src/exec/sapi/src/exinit.c b/c/src/exec/sapi/src/exinit.c index f85504b18d..4c9cb2e785 100644 --- a/c/src/exec/sapi/src/exinit.c +++ b/c/src/exec/sapi/src/exinit.c @@ -21,39 +21,31 @@ #include <rtems/system.h> #include <rtems/config.h> -#include <rtems/copyrt.h> -#include <rtems/clock.h> -#include <rtems/tasks.h> #include <rtems/debug.h> -#include <rtems/dpmem.h> -#include <rtems/event.h> #include <rtems/extension.h> #include <rtems/fatal.h> -#include <rtems/heap.h> #include <rtems/init.h> -#include <rtems/intthrd.h> -#include <rtems/isr.h> -#include <rtems/intr.h> #include <rtems/io.h> -#include <rtems/message.h> -#include <rtems/mp.h> -#include <rtems/mpci.h> -#include <rtems/part.h> -#include <rtems/priority.h> -#include <rtems/ratemon.h> -#include <rtems/region.h> -#include <rtems/sem.h> -#include <rtems/signal.h> #include <rtems/sysstate.h> -#include <rtems/thread.h> -#include <rtems/timer.h> -#include <rtems/tod.h> -#include <rtems/userext.h> -#include <rtems/watchdog.h> -#include <rtems/wkspace.h> +#include <rtems/core/copyrt.h> +#include <rtems/core/heap.h> +#include <rtems/core/interr.h> +#include <rtems/core/intthrd.h> +#include <rtems/core/isr.h> +#include <rtems/core/mpci.h> +#include <rtems/core/priority.h> +#include <rtems/core/thread.h> +#include <rtems/core/tod.h> +#include <rtems/core/userext.h> +#include <rtems/core/watchdog.h> +#include <rtems/core/wkspace.h> + +#include <rtems/directives.h> #include <rtems/sptables.h> +#include <rtems/rtems/rtemsapi.h> + /*PAGE * * rtems_initialize_executive @@ -103,29 +95,54 @@ rtems_interrupt_level rtems_initialize_executive_early( _ISR_Disable( bsp_level ); - _System_state_Set( SYSTEM_STATE_BEFORE_INITIALIZATION ); + if ( cpu_table == NULL ) + _Internal_error_Occurred( + INTERNAL_ERROR_CORE, + TRUE, + INTERNAL_ERROR_NO_CONFIGURATION_TABLE + ); - _CPU_Initialize( cpu_table, _Thread_Dispatch ); + /* + * Initialize the system state based on whether this is an MP system. + */ + + multiprocessing_table = configuration_table->User_multiprocessing_table; + + _System_state_Handler_initialization( + (multiprocessing_table) ? TRUE : FALSE + ); /* - * Do this as early as possible to insure no debugging output - * is even attempted to be printed. + * Provided just for user convenience. */ - _Debug_Manager_initialization(); + _Configuration_Table = configuration_table; + _Configuration_MP_table = multiprocessing_table; + + /* + * Internally we view single processor systems as a very restricted + * multiprocessor system. + */ - multiprocessing_table = configuration_table->User_multiprocessing_table; if ( multiprocessing_table == NULL ) - multiprocessing_table = - (void *) &_Configuration_Default_multiprocessing_table; + multiprocessing_table = + (void *)&_Initialization_Default_multiprocessing_table; - _Configuration_Handler_initialization( - configuration_table, - multiprocessing_table, - multiprocessing_table->User_mpci_table - ); + if ( cpu_table == NULL ) + _Internal_error_Occurred( + INTERNAL_ERROR_CORE, + TRUE, + INTERNAL_ERROR_NO_CPU_TABLE + ); + + _CPU_Initialize( cpu_table, _Thread_Dispatch ); - _Attributes_Handler_initialization(); + /* + * Do this as early as possible to insure no debugging output + * is even attempted to be printed. + */ + + _Debug_Manager_initialization(); _Thread_Dispatch_initialization(); @@ -142,6 +159,7 @@ rtems_interrupt_level rtems_initialize_executive_early( _Objects_Handler_initialization( multiprocessing_table->node, + multiprocessing_table->maximum_nodes, multiprocessing_table->maximum_global_objects ); @@ -153,57 +171,33 @@ rtems_interrupt_level rtems_initialize_executive_early( _Thread_Handler_initialization( configuration_table->ticks_per_timeslice, + configuration_table->maximum_extensions, multiprocessing_table->maximum_proxies ); - _MPCI_Handler_initialization(); - -/* MANAGERS */ - - _Interrupt_Manager_initialization(); - - _Multiprocessing_Manager_initialization(); + _MPCI_Handler_initialization( + multiprocessing_table->User_mpci_table + ); - _RTEMS_tasks_Manager_initialization( configuration_table->maximum_tasks ); + _Internal_threads_Initialization(); - _Timer_Manager_initialization( configuration_table->maximum_timers ); +/* MANAGERS */ _Extension_Manager_initialization( configuration_table->maximum_extensions ); _IO_Manager_initialization( configuration_table->Device_driver_table, - configuration_table->number_of_device_drivers + configuration_table->number_of_device_drivers, + configuration_table->maximum_devices ); - _Event_Manager_initialization(); - - _Message_queue_Manager_initialization( - configuration_table->maximum_message_queues - ); - - _Semaphore_Manager_initialization( - configuration_table->maximum_semaphores - ); - - _Partition_Manager_initialization( - configuration_table->maximum_partitions - ); - - _Region_Manager_initialization( configuration_table->maximum_regions ); - - _Dual_ported_memory_Manager_initialization( - configuration_table->maximum_ports - ); - - _Rate_monotonic_Manager_initialization( - configuration_table->maximum_periods - ); - - _Internal_threads_Initialization(); + _RTEMS_API_Initialize( configuration_table ); if ( cpu_table->pretasking_hook ) (*cpu_table->pretasking_hook)(); + _Internal_threads_Start(); + _System_state_Set( SYSTEM_STATE_BEFORE_MULTITASKING ); return bsp_level; diff --git a/c/src/exec/sapi/src/extension.c b/c/src/exec/sapi/src/extension.c index a962ad270e..4c1ac96ebd 100644 --- a/c/src/exec/sapi/src/extension.c +++ b/c/src/exec/sapi/src/extension.c @@ -14,9 +14,9 @@ */ #include <rtems/system.h> -#include <rtems/support.h> -#include <rtems/object.h> -#include <rtems/thread.h> +#include <rtems/rtems/support.h> +#include <rtems/core/object.h> +#include <rtems/core/thread.h> #include <rtems/extension.h> /*PAGE @@ -65,15 +65,15 @@ void _Extension_Manager_initialization( */ rtems_status_code rtems_extension_create( - rtems_name name, + rtems_name name, rtems_extensions_table *extension_table, - Objects_Id *id + Objects_Id *id ) { Extension_Control *the_extension; if ( !rtems_is_name_valid( name ) ) - return ( RTEMS_INVALID_NAME ); + return RTEMS_INVALID_NAME; _Thread_Disable_dispatch(); /* to prevent deletion */ @@ -81,7 +81,7 @@ rtems_status_code rtems_extension_create( if ( !the_extension ) { _Thread_Enable_dispatch(); - return( RTEMS_TOO_MANY ); + return RTEMS_TOO_MANY; } _User_extensions_Add_set( &the_extension->Extension, extension_table ); @@ -90,7 +90,7 @@ rtems_status_code rtems_extension_create( *id = the_extension->Object.id; _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } /*PAGE @@ -115,12 +115,16 @@ rtems_status_code rtems_extension_ident( Objects_Id *id ) { - return _Objects_Name_to_id( + Objects_Name_to_id_errors status; + + status = _Objects_Name_to_id( &_Extension_Information, &name, - RTEMS_SEARCH_LOCAL_NODE, + OBJECTS_SEARCH_LOCAL_NODE, id ); + + return _Status_Object_name_errors_to_status[ status ]; } /*PAGE @@ -148,14 +152,14 @@ rtems_status_code rtems_extension_delete( switch ( location ) { case OBJECTS_ERROR: case OBJECTS_REMOTE: /* should never return this */ - return( RTEMS_INVALID_ID ); + return RTEMS_INVALID_ID; case OBJECTS_LOCAL: _User_extensions_Remove_set( &the_extension->Extension ); _Objects_Close( &_Extension_Information, &the_extension->Object ); _Extension_Free( the_extension ); _Thread_Enable_dispatch(); - return( RTEMS_SUCCESSFUL ); + return RTEMS_SUCCESSFUL; } - return( RTEMS_INTERNAL_ERROR ); /* unreached - only to remove warnings */ + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/c/src/exec/sapi/src/fatal.c b/c/src/exec/sapi/src/fatal.c index 2ecc73ff3f..321eec1c00 100644 --- a/c/src/exec/sapi/src/fatal.c +++ b/c/src/exec/sapi/src/fatal.c @@ -13,42 +13,26 @@ */ #include <rtems/system.h> -#include <rtems/config.h> #include <rtems/fatal.h> -#include <rtems/sysstate.h> -#include <rtems/userext.h> +#include <rtems/core/interr.h> /*PAGE * * rtems_fatal_error_occurred * - * This directive will invoke the fatal error handler supplied by the user - * followed by the the default one provided by the executive. The default - * error handler assumes no hardware is present to help inform the user - * of the problem. Halt stores the error code in a known register, - * disables interrupts, and halts the CPU. If the CPU does not have a - * halt instruction, it will loop to itself. + * This directive will invoke the internal fatal error handler. * * Input parameters: * the_error - fatal error status code * - * Output parameters: - * the_error - on stack - * status register - on stack - * - * NOTE: The the_error is not necessarily a directive status code. + * Output parameters: NONE */ void volatile rtems_fatal_error_occurred( unsigned32 the_error ) { - - _User_extensions_Fatal( the_error ); - - _System_state_Set( SYSTEM_STATE_FAILED ); - - _CPU_Fatal_halt( the_error ); + _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, FALSE, the_error ); /* will not return from this routine */ } diff --git a/c/src/exec/sapi/src/io.c b/c/src/exec/sapi/src/io.c index 4ab45b33f5..cca390ea71 100644 --- a/c/src/exec/sapi/src/io.c +++ b/c/src/exec/sapi/src/io.c @@ -14,11 +14,9 @@ */ #include <rtems/system.h> -#include <rtems/config.h> #include <rtems/io.h> -#include <rtems/isr.h> -#include <rtems/thread.h> -#include <rtems/intr.h> +#include <rtems/core/isr.h> +#include <rtems/core/thread.h> #include <string.h> @@ -38,7 +36,7 @@ void _IO_Initialize_all_drivers( void ) rtems_device_major_number major; for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) - (void) rtems_io_initialize( major, 0, _Configuration_Table); + (void) rtems_io_initialize( major, 0, NULL); } /*PAGE @@ -60,22 +58,26 @@ rtems_status_code rtems_io_register_name( { rtems_driver_name_t *np; unsigned32 level; + unsigned32 index; /* find an empty slot */ - for (np = rtems_driver_name_table; np < &rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; np++) + for( index=0, np = _IO_Driver_name_table ; + index < _IO_Number_of_devices ; + index++, np++ ) { - rtems_interrupt_disable(level); + + _ISR_Disable(level); if (np->device_name == 0) { np->device_name = device_name; np->device_name_length = strlen(device_name); np->major = major; np->minor = minor; - rtems_interrupt_enable(level); + _ISR_Enable(level); return RTEMS_SUCCESSFUL; } - rtems_interrupt_enable(level); + _ISR_Enable(level); } return RTEMS_TOO_MANY; @@ -93,13 +95,16 @@ rtems_status_code rtems_io_register_name( */ rtems_status_code rtems_io_lookup_name( - const char *pathname, + const char *pathname, rtems_driver_name_t **rnp - ) +) { rtems_driver_name_t *np; + unsigned32 index; - for (np = rtems_driver_name_table; np < &rtems_driver_name_table[RTEMS_MAX_DRIVER_NAMES]; np++) + for( index=0, np = _IO_Driver_name_table ; + index < _IO_Number_of_devices ; + index++, np++ ) if (np->device_name) if (strncmp(np->device_name, pathname, np->device_name_length) == 0) { diff --git a/c/src/exec/sapi/src/rtemsapi.c b/c/src/exec/sapi/src/rtemsapi.c new file mode 100644 index 0000000000..b6ecb6c37c --- /dev/null +++ b/c/src/exec/sapi/src/rtemsapi.c @@ -0,0 +1,89 @@ +/* + * RTEMS API Support + * + * NOTE: + * + * 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$ + */ + +#include <rtems/system.h> +#include <rtems/rtems/status.h> +#include <rtems/rtems/rtemsapi.h> + +#define INIT + +#include <rtems/rtems/intr.h> +#include <rtems/rtems/clock.h> +#include <rtems/rtems/tasks.h> +#include <rtems/rtems/dpmem.h> +#include <rtems/rtems/event.h> +#include <rtems/rtems/message.h> +#include <rtems/rtems/mp.h> +#include <rtems/rtems/part.h> +#include <rtems/rtems/ratemon.h> +#include <rtems/rtems/region.h> +#include <rtems/rtems/sem.h> +#include <rtems/rtems/signal.h> +#include <rtems/rtems/timer.h> + +/*PAGE + * + * _RTEMS_API_Initialize + * + * XXX + */ + +void _RTEMS_API_Initialize( + rtems_configuration_table *configuration_table +) +{ + _Attributes_Handler_initialization(); + + _Interrupt_Manager_initialization(); + + _Multiprocessing_Manager_initialization(); + + _RTEMS_tasks_Manager_initialization( + configuration_table->maximum_tasks, + configuration_table->number_of_initialization_tasks, + configuration_table->User_initialization_tasks_table + ); + + _Timer_Manager_initialization( configuration_table->maximum_timers ); + + _Signal_Manager_initialization(); + + _Event_Manager_initialization(); + + _Message_queue_Manager_initialization( + configuration_table->maximum_message_queues + ); + + _Semaphore_Manager_initialization( + configuration_table->maximum_semaphores + ); + + _Partition_Manager_initialization( + configuration_table->maximum_partitions + ); + + _Region_Manager_initialization( configuration_table->maximum_regions ); + + _Dual_ported_memory_Manager_initialization( + configuration_table->maximum_ports + ); + + _Rate_monotonic_Manager_initialization( + configuration_table->maximum_periods + ); +} + +/* end of file */ diff --git a/c/src/exec/score/cpu/hppa1.1/cpu.c b/c/src/exec/score/cpu/hppa1.1/cpu.c index 437996a78d..6cb6347151 100644 --- a/c/src/exec/score/cpu/hppa1.1/cpu.c +++ b/c/src/exec/score/cpu/hppa1.1/cpu.c @@ -19,11 +19,10 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> -#include <rtems/intr.h> -#include <rtems/wkspace.h> +#include <rtems/core/isr.h> +#include <rtems/core/wkspace.h> -rtems_status_code hppa_external_interrupt_initialize(void); +void hppa_external_interrupt_initialize(void); void hppa_external_interrupt_enable(unsigned32); void hppa_external_interrupt_disable(unsigned32); void hppa_external_interrupt(unsigned32, CPU_Interrupt_frame *); @@ -73,9 +72,6 @@ void _CPU_Initialize( extern void IVA_Table(void); - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - /* * XXX; need to setup fpsr smarter perhaps */ @@ -194,7 +190,7 @@ void _CPU_ISR_install_vector( * called by bsp_start() */ -rtems_status_code +void hppa_external_interrupt_initialize(void) { rtems_isr_entry ignore; @@ -207,8 +203,6 @@ hppa_external_interrupt_initialize(void) /* install the external interrupt handler */ rtems_interrupt_catch((rtems_isr_entry) hppa_external_interrupt, HPPA_INTERRUPT_EXTERNAL_INTERRUPT, &ignore) ; - - return RTEMS_SUCCESSFUL; } /* diff --git a/c/src/exec/score/cpu/hppa1.1/cpu.h b/c/src/exec/score/cpu/hppa1.1/cpu.h index 3d330e09e5..e1f6cbfa48 100644 --- a/c/src/exec/score/cpu/hppa1.1/cpu.h +++ b/c/src/exec/score/cpu/hppa1.1/cpu.h @@ -30,9 +30,9 @@ extern "C" { #endif -#include <rtems/hppa.h> /* pick up machine definitions */ +#include <rtems/core/hppa.h> /* pick up machine definitions */ #ifndef ASM -#include <rtems/hppatypes.h> +#include <rtems/core/hppatypes.h> #endif /* conditional compilation parameters */ diff --git a/c/src/exec/score/cpu/hppa1.1/cpu_asm.s b/c/src/exec/score/cpu/hppa1.1/cpu_asm.s index acb6e589fd..229efed42c 100644 --- a/c/src/exec/score/cpu/hppa1.1/cpu_asm.s +++ b/c/src/exec/score/cpu/hppa1.1/cpu_asm.s @@ -27,11 +27,11 @@ * $Id$ # -#include <rtems/hppa.h> -#include <rtems/cpu_asm.h> -#include <rtems/cpu.h> +#include <rtems/core/hppa.h> +#include <rtems/core/cpu_asm.h> +#include <rtems/core/cpu.h> -#include <offsets.h> +#include <rtems/core/offsets.h> .SPACE $PRIVATE$ .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 diff --git a/c/src/exec/score/cpu/hppa1.1/rtems.s b/c/src/exec/score/cpu/hppa1.1/rtems.s index 84ffadd856..0e9305644e 100644 --- a/c/src/exec/score/cpu/hppa1.1/rtems.s +++ b/c/src/exec/score/cpu/hppa1.1/rtems.s @@ -15,7 +15,7 @@ */ #include <rtems/hppa.h> -#include <rtems/cpu_asm.h> +#include <rtems/core/cpu_asm.h> .SPACE $PRIVATE$ .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 diff --git a/c/src/exec/score/cpu/i386/asm.h b/c/src/exec/score/cpu/i386/asm.h index adf92f935a..aac1ba9dbe 100644 --- a/c/src/exec/score/cpu/i386/asm.h +++ b/c/src/exec/score/cpu/i386/asm.h @@ -31,7 +31,7 @@ */ #define ASM -#include <rtems/i386.h> +#include <rtems/core/i386.h> /* * Recent versions of GNU cpp define variables which indicate the diff --git a/c/src/exec/score/cpu/i386/cpu.c b/c/src/exec/score/cpu/i386/cpu.c index d1ceaba88a..446515d6f9 100644 --- a/c/src/exec/score/cpu/i386/cpu.c +++ b/c/src/exec/score/cpu/i386/cpu.c @@ -15,8 +15,8 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> -#include <rtems/wkspace.h> +#include <rtems/core/isr.h> +#include <rtems/core/wkspace.h> /* _CPU_Initialize * @@ -36,9 +36,6 @@ void _CPU_Initialize( register unsigned16 fp_status asm ("ax"); register unsigned8 *fp_context; - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - _CPU_Table = *cpu_table; /* @@ -69,6 +66,20 @@ void _CPU_Initialize( /*PAGE * + * _CPU_ISR_Get_level + */ + +unsigned32 _CPU_ISR_Get_level( void ) +{ + unsigned32 level; + + i386_get_interrupt_level( level ); + + return level; +} + +/*PAGE + * * _CPU_ISR_install_raw_handler */ diff --git a/c/src/exec/score/cpu/i386/cpu.h b/c/src/exec/score/cpu/i386/cpu.h index 2af0096fc6..f3793cd443 100644 --- a/c/src/exec/score/cpu/i386/cpu.h +++ b/c/src/exec/score/cpu/i386/cpu.h @@ -22,9 +22,9 @@ extern "C" { #endif #ifndef ASM -#include <rtems/i386types.h> +#include <rtems/core/i386types.h> #endif -#include <rtems/i386.h> +#include <rtems/core/i386.h> /* conditional compilation parameters */ @@ -119,9 +119,9 @@ typedef struct { /* variables */ -EXTERN unsigned8 _CPU_Null_fp_context[ CPU_CONTEXT_FP_SIZE ]; -EXTERN void *_CPU_Interrupt_stack_low; -EXTERN void *_CPU_Interrupt_stack_high; +EXTERN Context_Control_fp _CPU_Null_fp_context; +EXTERN void *_CPU_Interrupt_stack_low; +EXTERN void *_CPU_Interrupt_stack_high; /* constants */ @@ -192,6 +192,8 @@ EXTERN void *_CPU_Interrupt_stack_high; else asm volatile ( "sti" ); \ } +unsigned32 _CPU_ISR_Get_level( void ); + /* end of ISR handler macros */ /* diff --git a/c/src/exec/score/cpu/i386/i386.h b/c/src/exec/score/cpu/i386/i386.h index 3ebde48ed3..d43669ba53 100644 --- a/c/src/exec/score/cpu/i386/i386.h +++ b/c/src/exec/score/cpu/i386/i386.h @@ -166,6 +166,18 @@ typedef struct { ); \ } +#define i386_get_interrupt_level( _level ) \ + do { \ + register unsigned32 _eflags = 0; \ + \ + asm volatile ( "push %0 ; \ + popf " \ + : "=r" ((_eflags)) : "0" ((_eflags)) \ + ); \ + \ + _level = (_eflags & 0x0200) ? 0 : 1; \ + } while (0) + /* * The following routine swaps the endian format of an unsigned int. * It must be static so it can be referenced indirectly. diff --git a/c/src/exec/score/cpu/i960/asm.h b/c/src/exec/score/cpu/i960/asm.h index e8fc986402..73a8b3a641 100644 --- a/c/src/exec/score/cpu/i960/asm.h +++ b/c/src/exec/score/cpu/i960/asm.h @@ -31,7 +31,7 @@ */ #define ASM -#include <rtems/i960.h> +#include <rtems/core/i960.h> /* * Recent versions of GNU cpp define variables which indicate the diff --git a/c/src/exec/score/cpu/i960/cpu.c b/c/src/exec/score/cpu/i960/cpu.c index d5acebd225..ec4613c4cf 100644 --- a/c/src/exec/score/cpu/i960/cpu.c +++ b/c/src/exec/score/cpu/i960/cpu.c @@ -21,7 +21,7 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* _CPU_Initialize * @@ -40,15 +40,26 @@ void _CPU_Initialize( ) { - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - _CPU_Table = *cpu_table; } /*PAGE * + * _CPU_ISR_Get_level + */ + +unsigned32 _CPU_ISR_Get_level( void ) +{ + unsigned32 level; + + i960_get_interrupt_level( level ); + + return level; +} + +/*PAGE + * * _CPU_ISR_install_raw_handler */ diff --git a/c/src/exec/score/cpu/i960/cpu.h b/c/src/exec/score/cpu/i960/cpu.h index 4e8e82e9de..3c4cb98ec8 100644 --- a/c/src/exec/score/cpu/i960/cpu.h +++ b/c/src/exec/score/cpu/i960/cpu.h @@ -23,9 +23,9 @@ extern "C" { #pragma align 4 /* for GNU C structure alignment */ -#include <rtems/i960.h> +#include <rtems/core/i960.h> #ifndef ASM -#include <rtems/i960types.h> +#include <rtems/core/i960types.h> #endif #define CPU_INLINE_ENABLE_DISPATCH FALSE @@ -237,6 +237,8 @@ EXTERN void *_CPU_Interrupt_stack_high; ); \ } +unsigned32 _CPU_ISR_Get_level( void ); + /* ISR handler section macros */ /* diff --git a/c/src/exec/score/cpu/i960/i960.h b/c/src/exec/score/cpu/i960/i960.h index 53b99f469a..5112fd58c8 100644 --- a/c/src/exec/score/cpu/i960/i960.h +++ b/c/src/exec/score/cpu/i960/i960.h @@ -169,6 +169,13 @@ typedef struct { : "0" (_mask), "1" ((oldlevel)) ); \ } +#define i960_get_interrupt_level( _level ) \ + { \ + i960_disable_interrupts( _level ); \ + i960_enable_interrupts( _level ); \ + (_level) = ((_level) & 0x1f0000) >> 16; \ + } while ( 0 ) + #define i960_atomic_modify( mask, addr, prev ) \ { register unsigned int _mask = (mask); \ register unsigned int *_addr = (unsigned int *)(addr); \ @@ -199,9 +206,8 @@ typedef struct { #define i960_clear_intr( xint ) \ { register unsigned int _xint=(xint); \ - asm volatile( "loop_til_cleared: - clrbit %0,sf0,sf0 ; \ - bbs %0,sf0,loop_til_cleared" \ +asm volatile( "loop_til_cleared: clrbit %0,sf0,sf0 ; \ + bbs %0,sf0, loop_til_cleared" \ : "=d" (_xint) : "0" (_xint) ); \ } diff --git a/c/src/exec/score/cpu/m68k/asm.h b/c/src/exec/score/cpu/m68k/asm.h index 58bb04bdf9..7a25b6c298 100644 --- a/c/src/exec/score/cpu/m68k/asm.h +++ b/c/src/exec/score/cpu/m68k/asm.h @@ -31,7 +31,7 @@ */ #define ASM -#include <rtems/m68k.h> +#include <rtems/core/m68k.h> /* * Recent versions of GNU cpp define variables which indicate the diff --git a/c/src/exec/score/cpu/m68k/cpu.c b/c/src/exec/score/cpu/m68k/cpu.c index a97698372a..fdba64bffe 100644 --- a/c/src/exec/score/cpu/m68k/cpu.c +++ b/c/src/exec/score/cpu/m68k/cpu.c @@ -14,7 +14,7 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> +#include <rtems/core/isr.h> /* _CPU_Initialize * @@ -33,15 +33,26 @@ void _CPU_Initialize( ) { - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - _CPU_Table = *cpu_table; } /*PAGE * + * _CPU_ISR_Get_level + */ + +unsigned32 _CPU_ISR_Get_level( void ) +{ + unsigned32 level; + + m68k_get_interrupt_level( level ); + + return level; +} + +/*PAGE + * * _CPU_ISR_install_raw_handler */ diff --git a/c/src/exec/score/cpu/m68k/cpu.h b/c/src/exec/score/cpu/m68k/cpu.h index 566e479f3a..8379d47a00 100644 --- a/c/src/exec/score/cpu/m68k/cpu.h +++ b/c/src/exec/score/cpu/m68k/cpu.h @@ -30,9 +30,9 @@ extern "C" { #define NO_UNINITIALIZED_WARNINGS -#include <rtems/m68k.h> +#include <rtems/core/m68k.h> #ifndef ASM -#include <rtems/m68ktypes.h> +#include <rtems/core/m68ktypes.h> #endif /* conditional compilation parameters */ @@ -222,6 +222,8 @@ EXTERN void *_CPU_Interrupt_stack_high; #define _CPU_ISR_Set_level( _newlevel ) \ m68k_set_interrupt_level( _newlevel ) +unsigned32 _CPU_ISR_Get_level( void ); + /* end of ISR handler macros */ /* diff --git a/c/src/exec/score/cpu/m68k/m68k.h b/c/src/exec/score/cpu/m68k/m68k.h index b86db286cb..a2e0df6a25 100644 --- a/c/src/exec/score/cpu/m68k/m68k.h +++ b/c/src/exec/score/cpu/m68k/m68k.h @@ -196,6 +196,17 @@ extern "C" { ); \ } +#define m68k_get_interrupt_level( _level ) \ + do { \ + register unsigned32 _tmpsr = 0; \ + \ + asm volatile( "movw %%sr,%0" \ + : "=d" (_tmpsr) : "0" (_tmpsr) \ + ); \ + \ + _level = (_tmpsr & 0x0700) >> 8; \ + } while (0) + #define m68k_set_interrupt_level( _newlevel ) \ { \ register unsigned32 _tmpsr = 0; \ diff --git a/c/src/exec/score/cpu/no_cpu/asm.h b/c/src/exec/score/cpu/no_cpu/asm.h index 97464d5b3a..ca0ff95e35 100644 --- a/c/src/exec/score/cpu/no_cpu/asm.h +++ b/c/src/exec/score/cpu/no_cpu/asm.h @@ -31,7 +31,7 @@ */ #define ASM -#include <rtems/no_cpu.h> +#include <rtems/core/no_cpu.h> /* * Recent versions of GNU cpp define variables which indicate the diff --git a/c/src/exec/score/cpu/no_cpu/cpu.c b/c/src/exec/score/cpu/no_cpu/cpu.c index f95c435eae..c7e7cbe693 100644 --- a/c/src/exec/score/cpu/no_cpu/cpu.c +++ b/c/src/exec/score/cpu/no_cpu/cpu.c @@ -15,8 +15,8 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> -#include <rtems/wkspace.h> +#include <rtems/core/isr.h> +#include <rtems/core/wkspace.h> /* _CPU_Initialize * @@ -33,9 +33,6 @@ void _CPU_Initialize( void (*thread_dispatch) /* ignored on this CPU */ ) { - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - /* * The thread_dispatch argument is the address of the entry point * for the routine called at the end of an ISR once it has been @@ -63,6 +60,18 @@ void _CPU_Initialize( /*PAGE * + * _CPU_ISR_Get_level + */ + +unsigned32 _CPU_ISR_Get_level( void ) +{ + /* + * This routine returns the current interrupt level. + */ +} + +/*PAGE + * * _CPU_ISR_install_raw_handler */ diff --git a/c/src/exec/score/cpu/no_cpu/cpu.h b/c/src/exec/score/cpu/no_cpu/cpu.h index 29a6960ea2..7242ebc041 100644 --- a/c/src/exec/score/cpu/no_cpu/cpu.h +++ b/c/src/exec/score/cpu/no_cpu/cpu.h @@ -21,9 +21,9 @@ extern "C" { #endif -#include <rtems/no_cpu.h> /* pick up machine definitions */ +#include <rtems/core/no_cpu.h> /* pick up machine definitions */ #ifndef ASM -#include <rtems/no_cputypes.h> +#include <rtems/core/no_cputypes.h> #endif /* conditional compilation parameters */ diff --git a/c/src/exec/score/cpu/no_cpu/cpu_asm.c b/c/src/exec/score/cpu/no_cpu/cpu_asm.c index c0cf3b5127..0d7622d15f 100644 --- a/c/src/exec/score/cpu/no_cpu/cpu_asm.c +++ b/c/src/exec/score/cpu/no_cpu/cpu_asm.c @@ -24,7 +24,7 @@ */ #include <rtems/system.h> -#include <rtems/cpu.h> +#include <rtems/core/cpu.h> /* #include "cpu_asm.h> */ /* diff --git a/c/src/exec/score/cpu/no_cpu/cpu_asm.h b/c/src/exec/score/cpu/no_cpu/cpu_asm.h index 0f4154a453..50bc256e06 100644 --- a/c/src/exec/score/cpu/no_cpu/cpu_asm.h +++ b/c/src/exec/score/cpu/no_cpu/cpu_asm.h @@ -21,7 +21,7 @@ /* pull in the generated offsets */ -#include <offsets.h> +#include <rtems/core/offsets.h> /* * Hardware General Registers diff --git a/c/src/exec/score/cpu/no_cpu/rtems.c b/c/src/exec/score/cpu/no_cpu/rtems.c index 5415ae9852..0d15381046 100644 --- a/c/src/exec/score/cpu/no_cpu/rtems.c +++ b/c/src/exec/score/cpu/no_cpu/rtems.c @@ -22,7 +22,7 @@ */ #include <rtems/system.h> -#include <rtems/cpu.h> +#include <rtems/core/cpu.h> /* #include "asm.h> */ /* diff --git a/c/src/exec/score/cpu/powerpc/cpu.c b/c/src/exec/score/cpu/powerpc/cpu.c index ab358a2490..336f1e1aef 100644 --- a/c/src/exec/score/cpu/powerpc/cpu.c +++ b/c/src/exec/score/cpu/powerpc/cpu.c @@ -30,15 +30,17 @@ #include <rtems/system.h> #include <rtems/fatal.h> -#include <rtems/isr.h> -#include <rtems/context.h> -#include <rtems/thread.h> -#include <rtems/wkspace.h> +#include <rtems/core/isr.h> +#include <rtems/core/context.h> +#include <rtems/core/thread.h> +#include <rtems/core/wkspace.h> /* * These are for testing purposes. */ +/* #define Testing +*/ #ifdef Testing static unsigned32 msr; @@ -119,9 +121,6 @@ void _CPU_Initialize( } #endif - if ( cpu_table == NULL ) - rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED ); - if ( cpu_table->spurious_handler ) handler = (proc_ptr)cpu_table->spurious_handler; @@ -164,9 +163,11 @@ void _CPU_ISR_install_vector( * be used by the _ISR_Handler so the user gets control. */ - _ISR_Vector_table[ vector ] = new_handler ? (rtems_isr_entry)new_handler : - _CPU_Table.spurious_handler ? (rtems_isr_entry)_CPU_Table.spurious_handler : - (rtems_isr_entry)ppc_spurious; + _ISR_Vector_table[ vector ] = + (new_handler) ? (ISR_Handler_entry) new_handler : + ((_CPU_Table.spurious_handler) ? + (ISR_Handler_entry) _CPU_Table.spurious_handler : + (ISR_Handler_entry) ppc_spurious); } /*PAGE diff --git a/c/src/exec/score/cpu/powerpc/cpu.h b/c/src/exec/score/cpu/powerpc/cpu.h index 82cad518e8..fd44f5ee8e 100644 --- a/c/src/exec/score/cpu/powerpc/cpu.h +++ b/c/src/exec/score/cpu/powerpc/cpu.h @@ -37,11 +37,11 @@ extern "C" { #endif -#include <rtems/ppc.h> /* pick up machine definitions */ +#include <rtems/core/ppc.h> /* pick up machine definitions */ #ifndef ASM struct CPU_Interrupt_frame; -#include <rtems/ppctypes.h> +#include <rtems/core/ppctypes.h> #endif /* conditional compilation parameters */ diff --git a/c/src/exec/score/cpu/unix/cpu.c b/c/src/exec/score/cpu/unix/cpu.c index 736b7c4c7f..339bb2a3ce 100644 --- a/c/src/exec/score/cpu/unix/cpu.c +++ b/c/src/exec/score/cpu/unix/cpu.c @@ -17,7 +17,7 @@ */ #include <rtems/system.h> -#include <rtems/isr.h> +#include <rtems/core/isr.h> #include <stdio.h> #include <stdlib.h> @@ -186,6 +186,28 @@ void _CPU_Context_From_CPU_Init() } +/*PAGE + * + * _CPU_ISR_Get_level + */ + +unsigned32 _CPU_ISR_Get_level( void ) +{ + sigset_t sigset; + + sigprocmask( 0, 0, &sigset ); + + /* + * This is an educated guess based on ONLY ONE of the signals we + * disable/enable to mask ISRs. + */ + + if ( sigismember( &sigset, SIGUSR1 ) ) + return 1; + else + return 0; +} + /* _CPU_Initialize * * This routine performs processor dependent initialization. @@ -198,12 +220,9 @@ void _CPU_Context_From_CPU_Init() void _CPU_Initialize( rtems_cpu_table *cpu_table, - void (*thread_dispatch) /* ignored on this CPU */ + void (*thread_dispatch) /* ignored on this CPU */ ) { - if ( cpu_table == NULL ) - _CPU_Fatal_halt( RTEMS_NOT_CONFIGURED ); - /* * The thread_dispatch argument is the address of the entry point * for the routine called at the end of an ISR once it has been diff --git a/c/src/exec/score/cpu/unix/cpu.h b/c/src/exec/score/cpu/unix/cpu.h index ee7239bc89..f0d583651e 100644 --- a/c/src/exec/score/cpu/unix/cpu.h +++ b/c/src/exec/score/cpu/unix/cpu.h @@ -26,9 +26,9 @@ extern "C" { #endif -#include <rtems/unix.h> +#include <rtems/core/unix.h> #ifndef ASM -#include <rtems/unixtypes.h> +#include <rtems/core/unixtypes.h> #endif #if defined(solaris2) @@ -667,6 +667,8 @@ void _CPU_ISR_Enable(unsigned32 level); else _CPU_ISR_Enable( 1 ); \ } +unsigned32 _CPU_ISR_Get_level( void ); + /* end of ISR handler macros */ /* Context handler macros */ diff --git a/c/src/exec/score/headers/address.h b/c/src/exec/score/headers/address.h index 0abd113f63..4877206801 100644 --- a/c/src/exec/score/headers/address.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/chain.h b/c/src/exec/score/headers/chain.h index 06cc47cc65..35ac4dfa80 100644 --- a/c/src/exec/score/headers/chain.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/context.h b/c/src/exec/score/headers/context.h index 9b8ee92b04..58e497ae88 100644 --- a/c/src/exec/score/headers/context.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/coremutex.h b/c/src/exec/score/headers/coremutex.h new file mode 100644 index 0000000000..0682bbc1ea --- /dev/null +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/coresem.h b/c/src/exec/score/headers/coresem.h new file mode 100644 index 0000000000..0fcd8cd0b9 --- /dev/null +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/heap.h b/c/src/exec/score/headers/heap.h index 9eb348a760..bf4a8dde6e 100644 --- a/c/src/exec/score/headers/heap.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/interr.h b/c/src/exec/score/headers/interr.h new file mode 100644 index 0000000000..c1088a9dff --- /dev/null +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/isr.h b/c/src/exec/score/headers/isr.h index 77c3f8663e..4bbc3c7aff 100644 --- a/c/src/exec/score/headers/isr.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/mpci.h b/c/src/exec/score/headers/mpci.h index ca06dd243b..06dc0015d4 100644 --- a/c/src/exec/score/headers/mpci.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/mppkt.h b/c/src/exec/score/headers/mppkt.h index d63d587fca..32cbc7e0e9 100644 --- a/c/src/exec/score/headers/mppkt.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/object.h b/c/src/exec/score/headers/object.h index b1d422d3d4..3da299e95f 100644 --- a/c/src/exec/score/headers/object.h +++ b/c/src/exec/score/headers/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/c/src/exec/score/headers/objectmp.h b/c/src/exec/score/headers/objectmp.h index b15d5cbb43..cef5c6879d 100644 --- a/c/src/exec/score/headers/objectmp.h +++ b/c/src/exec/score/headers/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 |