diff options
Diffstat (limited to 'cpukit/include/rtems/confdefs.h')
-rw-r--r-- | cpukit/include/rtems/confdefs.h | 462 |
1 files changed, 153 insertions, 309 deletions
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index d66e23e0ab..f147d67dae 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -44,9 +44,11 @@ #include <rtems/rtems/timerdata.h> #include <rtems/posix/key.h> #include <rtems/posix/mqueue.h> +#include <rtems/posix/psignal.h> #include <rtems/posix/pthread.h> #include <rtems/posix/semaphore.h> #include <rtems/posix/shm.h> +#include <rtems/posix/timer.h> #include <limits.h> @@ -1354,24 +1356,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; */ #define _Configure_Max_Objects(_max) \ (_Configure_Zero_or_One(_max) * rtems_resource_maximum_per_allocation(_max)) - -/** - * This macro accounts for how memory for a set of configured objects is - * allocated from the Executive Workspace. - * - * NOTE: It does NOT attempt to address the more complex case of unlimited - * objects. - */ -#define _Configure_Object_RAM(_number, _size) ( \ - _Configure_From_workspace(_Configure_Max_Objects(_number) * (_size)) + \ - _Configure_From_workspace( \ - _Configure_Zero_or_One(_number) * ( \ - (_Configure_Max_Objects(_number) + 1) * sizeof(Objects_Control *) + \ - _Configure_Align_up(sizeof(void *), CPU_ALIGNMENT) + \ - _Configure_Align_up(sizeof(uint32_t), CPU_ALIGNMENT) \ - ) \ - ) \ - ) /**@}*/ /** @@ -1853,7 +1837,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #define _CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \ _Configure_From_workspace((_proxies) \ * (sizeof(Thread_Proxy_control) \ - + THREAD_QUEUE_HEADS_SIZE(_CONFIGURE_SCHEDULER_COUNT))) + + sizeof(Thread_queue_Configured_heads))) #ifndef CONFIGURE_MP_MPCI_TABLE_POINTER #include <mpci.h> @@ -1971,12 +1955,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #define CONFIGURE_MAXIMUM_POSIX_TIMERS \ rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE) #endif -/* - #if !defined(CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS) - #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS \ - rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE) - #endif -*/ #endif /* RTEMS_POSIX_API */ #endif /* CONFIGURE_UNLIMITED_OBJECTS */ @@ -2006,16 +1984,11 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #ifndef CONFIGURE_MAXIMUM_TIMERS /** This specifies the maximum number of Classic API timers. */ #define CONFIGURE_MAXIMUM_TIMERS 0 - /* - * This macro is calculated to specify the memory required for - * Classic API timers. - */ - #define _CONFIGURE_MEMORY_FOR_TIMERS(_timers) 0 -#else - #define _CONFIGURE_MEMORY_FOR_TIMERS(_timers) \ - _Configure_Object_RAM(_timers, sizeof(Timer_Control) ) #endif +#define _CONFIGURE_TIMERS \ + (CONFIGURE_MAXIMUM_TIMERS + _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER) + #ifndef CONFIGURE_MAXIMUM_SEMAPHORES /** This specifies the maximum number of Classic API semaphores. */ #define CONFIGURE_MAXIMUM_SEMAPHORES 0 @@ -2037,35 +2010,12 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; ) #endif -/* - * This macro is calculated to specify the memory required for - * Classic API Semaphores. - * - * If there are no user or support semaphores defined, then we can assume - * that no memory need be allocated at all for semaphores. - */ -#if CONFIGURE_MAXIMUM_SEMAPHORES == 0 - #define _CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) 0 -#else - #define _CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \ - _Configure_Object_RAM(_semaphores, sizeof(Semaphore_Control) ) + \ - _CONFIGURE_MEMORY_FOR_MRSP_SEMAPHORES -#endif - #ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES /** * This configuration parameter specifies the maximum number of * Classic API Message Queues. */ #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 0 - /* - * This macro is calculated to specify the RTEMS Workspace required for - * the Classic API Message Queues. - */ - #define _CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) 0 -#else - #define _CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \ - _Configure_Object_RAM(_queues, sizeof(Message_queue_Control) ) #endif #ifndef CONFIGURE_MAXIMUM_PARTITIONS @@ -2074,14 +2024,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Classic API Partitions. */ #define CONFIGURE_MAXIMUM_PARTITIONS 0 - /* - * This macro is calculated to specify the memory required for - * Classic API - */ - #define _CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) 0 -#else - #define _CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \ - _Configure_Object_RAM(_partitions, sizeof(Partition_Control) ) #endif #ifndef CONFIGURE_MAXIMUM_REGIONS @@ -2090,14 +2032,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Classic API Regions. */ #define CONFIGURE_MAXIMUM_REGIONS 0 - /* - * This macro is calculated to specify the memory required for - * Classic API Regions. - */ - #define _CONFIGURE_MEMORY_FOR_REGIONS(_regions) 0 -#else - #define _CONFIGURE_MEMORY_FOR_REGIONS(_regions) \ - _Configure_Object_RAM(_regions, sizeof(Region_Control) ) #endif #ifndef CONFIGURE_MAXIMUM_PORTS @@ -2106,14 +2040,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Classic API Dual-Ported Memory Ports. */ #define CONFIGURE_MAXIMUM_PORTS 0 - /** - * This macro is calculated to specify the memory required for - * Classic API Dual-Ported Memory Ports. - */ - #define _CONFIGURE_MEMORY_FOR_PORTS(_ports) 0 -#else - #define _CONFIGURE_MEMORY_FOR_PORTS(_ports) \ - _Configure_Object_RAM(_ports, sizeof(Dual_ported_memory_Control) ) #endif #ifndef CONFIGURE_MAXIMUM_PERIODS @@ -2122,14 +2048,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Classic API Rate Monotonic Periods. */ #define CONFIGURE_MAXIMUM_PERIODS 0 - /* - * This macro is calculated to specify the memory required for - * Classic API Rate Monotonic Periods. - */ - #define _CONFIGURE_MEMORY_FOR_PERIODS(_periods) 0 -#else - #define _CONFIGURE_MEMORY_FOR_PERIODS(_periods) \ - _Configure_Object_RAM(_periods, sizeof(Rate_monotonic_Control) ) #endif /** @@ -2145,18 +2063,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Barriers required by the application and configured capabilities. */ #define _CONFIGURE_BARRIERS \ - (CONFIGURE_MAXIMUM_BARRIERS + _CONFIGURE_BARRIERS_FOR_FIFOS) - -/* - * This macro is calculated to specify the memory required for - * Classic API Barriers. - */ -#if _CONFIGURE_BARRIERS == 0 - #define _CONFIGURE_MEMORY_FOR_BARRIERS(_barriers) 0 -#else - #define _CONFIGURE_MEMORY_FOR_BARRIERS(_barriers) \ - _Configure_Object_RAM(_barriers, sizeof(Barrier_Control) ) -#endif + (CONFIGURE_MAXIMUM_BARRIERS + _CONFIGURE_BARRIERS_FOR_FIFOS) #ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS /** @@ -2164,14 +2071,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; * Classic API User Extensions. */ #define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0 - /* - * This macro is calculated to specify the memory required for - * Classic API User Extensions. - */ - #define _CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) 0 -#else - #define _CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \ - _Configure_Object_RAM(_extensions, sizeof(Extension_Control) ) #endif /**@}*/ /* end of Classic API Configuration */ @@ -2297,16 +2196,6 @@ struct _reent *__getreent(void) #define _CONFIGURE_POSIX_KEYS \ (CONFIGURE_MAXIMUM_POSIX_KEYS + _CONFIGURE_LIBIO_POSIX_KEYS) -/* - * This macro is calculated to specify the memory required for - * POSIX API keys. - */ -#define _CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys, _key_value_pairs) \ - (_Configure_Object_RAM(_keys, sizeof(POSIX_Keys_Control) ) \ - + _Configure_From_workspace( \ - _Configure_Max_Objects(_key_value_pairs) \ - * sizeof(POSIX_Keys_Key_value_pair))) - /** * This configuration parameter specifies the maximum number of * POSIX API threads. @@ -2320,9 +2209,8 @@ struct _reent *__getreent(void) * of the object to be duplicated. */ #define _Configure_POSIX_Named_Object_RAM(_number, _size) \ - (_Configure_Object_RAM(_number, _size) \ - + _Configure_Max_Objects(_number) \ - * _Configure_From_workspace(_POSIX_PATH_MAX + 1)) + (_Configure_Max_Objects(_number) \ + * _Configure_From_workspace(_POSIX_PATH_MAX + 1)) /** * This configuration parameter specifies the maximum number of @@ -2370,48 +2258,37 @@ struct _reent *__getreent(void) #define _CONFIGURE_MEMORY_FOR_POSIX_SHMS(_shms) \ _Configure_POSIX_Named_Object_RAM(_shms, sizeof(POSIX_Shm_Control) ) -/* - * The rest of the POSIX threads API features are only available when - * POSIX is enabled. +/** + * This configuration parameter specifies the maximum number of + * POSIX API timers. */ -#ifdef RTEMS_POSIX_API - #include <sys/types.h> - #include <signal.h> - #include <rtems/posix/psignal.h> - #include <rtems/posix/threadsup.h> - #include <rtems/posix/timer.h> +#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS + #define CONFIGURE_MAXIMUM_POSIX_TIMERS 0 +#endif - /** - * This configuration parameter specifies the maximum number of - * POSIX API timers. - */ - #ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS - #define CONFIGURE_MAXIMUM_POSIX_TIMERS 0 - #endif +#if !defined(RTEMS_POSIX_API) && CONFIGURE_MAXIMUM_POSIX_TIMERS != 0 + #error "CONFIGURE_MAXIMUM_POSIX_TIMERS must be zero if POSIX API is disabled" +#endif - /* - * This macro is calculated to specify the memory required for - * POSIX API timers. - */ - #define _CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \ - _Configure_Object_RAM(_timers, sizeof(POSIX_Timer_Control) ) +/** + * This configuration parameter specifies the maximum number of + * POSIX API queued signals. + */ +#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS + #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0 +#endif - /** - * This configuration parameter specifies the maximum number of - * POSIX API queued signals. - */ - #ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS - #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0 - #endif +#if !defined(RTEMS_POSIX_API) && CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS != 0 + #error "CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS must be zero if POSIX API is disabled" +#endif - /* - * This macro is calculated to specify the memory required for - * POSIX API queued signals. - */ - #define _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \ - _Configure_From_workspace( \ - (_queued_signals) * (sizeof(POSIX_signals_Siginfo_node)) ) -#endif /* RTEMS_POSIX_API */ +#if CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS > 0 + #define _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS \ + _Configure_From_workspace( (CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS) * \ + sizeof( POSIX_signals_Siginfo_node ) ) +#else + #define _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS 0 +#endif #ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE #ifndef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE @@ -2536,23 +2413,6 @@ struct _reent *__getreent(void) CONFIGURE_MAXIMUM_ADA_TASKS + \ CONFIGURE_MAXIMUM_GOROUTINES) -#ifdef RTEMS_POSIX_API - /* - * This macro is calculated to specify the memory required for - * the POSIX API in its entirety. - */ - #define _CONFIGURE_MEMORY_FOR_POSIX \ - (_CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \ - CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS) + \ - _CONFIGURE_MEMORY_FOR_POSIX_TIMERS(CONFIGURE_MAXIMUM_POSIX_TIMERS)) -#else - /* - * This macro is calculated to specify the memory required for - * the POSIX API in its entirety. - */ - #define _CONFIGURE_MEMORY_FOR_POSIX 0 -#endif - /* * We must be able to split the free block used for the second last allocation * into two parts so that we have a free block for the last allocation. See @@ -2561,6 +2421,12 @@ struct _reent *__getreent(void) #define _CONFIGURE_HEAP_HANDLER_OVERHEAD \ _Configure_Align_up( HEAP_BLOCK_HEADER_SIZE, CPU_HEAP_ALIGNMENT ) +/** + * This calculates the amount of memory reserved for the IDLE tasks. + * In an SMP system, each CPU core has its own idle task. + */ +#define _CONFIGURE_IDLE_TASKS_COUNT _CONFIGURE_MAXIMUM_PROCESSORS + /* * Calculate the RAM size based on the maximum number of objects configured. */ @@ -2573,13 +2439,8 @@ struct _reent *__getreent(void) * entry in the local pointer table. */ #define _CONFIGURE_MEMORY_FOR_TASKS(_tasks, _number_FP_tasks) \ - ( \ - _Configure_Object_RAM(_tasks, sizeof(Configuration_Thread_control)) \ - + _Configure_From_workspace(_Configure_Max_Objects(_tasks) \ - * THREAD_QUEUE_HEADS_SIZE(_CONFIGURE_SCHEDULER_COUNT)) \ - + _Configure_Max_Objects(_number_FP_tasks) \ - * _Configure_From_workspace(CONTEXT_FP_SIZE) \ - ) + (_Configure_Max_Objects(_number_FP_tasks) \ + * _Configure_From_workspace(CONTEXT_FP_SIZE)) /* * This defines the amount of memory configured for the multiprocessing @@ -2629,12 +2490,6 @@ struct _reent *__getreent(void) #endif /** - * This calculates the amount of memory reserved for the IDLE tasks. - * In an SMP system, each CPU core has its own idle task. - */ -#define _CONFIGURE_IDLE_TASKS_COUNT _CONFIGURE_MAXIMUM_PROCESSORS - -/** * This defines the formula used to compute the amount of memory * reserved for internal task control structures. */ @@ -2670,23 +2525,6 @@ struct _reent *__getreent(void) )) /** - * This macro provides a summation of the memory required by the - * Classic API as configured. - */ -#define _CONFIGURE_MEMORY_FOR_CLASSIC \ - (_CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS + \ - _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER ) + \ - _CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES) + \ - _CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \ - _CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \ - _CONFIGURE_MEMORY_FOR_REGIONS( CONFIGURE_MAXIMUM_REGIONS ) + \ - _CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \ - _CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \ - _CONFIGURE_MEMORY_FOR_BARRIERS(_CONFIGURE_BARRIERS) + \ - _CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(CONFIGURE_MAXIMUM_USER_EXTENSIONS) \ - ) - -/** * This calculates the memory required for the executive workspace. * * This is an internal parameter. @@ -2698,17 +2536,14 @@ struct _reent *__getreent(void) _CONFIGURE_TASKS, _CONFIGURE_TASKS) + \ _CONFIGURE_MEMORY_FOR_TASKS( \ _CONFIGURE_POSIX_THREADS, _CONFIGURE_POSIX_THREADS) + \ - _CONFIGURE_MEMORY_FOR_CLASSIC + \ - _CONFIGURE_MEMORY_FOR_POSIX_KEYS( \ - _CONFIGURE_POSIX_KEYS, \ - CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS ) + \ + _CONFIGURE_MEMORY_FOR_MRSP_SEMAPHORES + \ _CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \ CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES) + \ _CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \ CONFIGURE_MAXIMUM_POSIX_SEMAPHORES) + \ _CONFIGURE_MEMORY_FOR_POSIX_SHMS( \ CONFIGURE_MAXIMUM_POSIX_SHMS) + \ - _CONFIGURE_MEMORY_FOR_POSIX + \ + _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS + \ _CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS + \ _CONFIGURE_MEMORY_FOR_MP + \ CONFIGURE_MESSAGE_BUFFER_MEMORY + \ @@ -2882,7 +2717,7 @@ struct _reent *__getreent(void) const size_t _Thread_Maximum_name_size = CONFIGURE_MAXIMUM_THREAD_NAME_SIZE; - typedef struct { + struct Thread_Configured_control { Thread_Control Control; #if CONFIGURE_MAXIMUM_USER_EXTENSIONS > 0 void *extensions[ CONFIGURE_MAXIMUM_USER_EXTENSIONS + 1 ]; @@ -2902,43 +2737,41 @@ struct _reent *__getreent(void) #else struct { /* Empty */ } Newlib; #endif - } Configuration_Thread_control; - - const size_t _Thread_Control_size = sizeof( Configuration_Thread_control ); + }; const Thread_Control_add_on _Thread_Control_add_ons[] = { { - offsetof( Configuration_Thread_control, Control.Scheduler.nodes ), - offsetof( Configuration_Thread_control, Scheduler_nodes ) + offsetof( Thread_Configured_control, Control.Scheduler.nodes ), + offsetof( Thread_Configured_control, Scheduler_nodes ) }, { offsetof( - Configuration_Thread_control, + Thread_Configured_control, Control.API_Extensions[ THREAD_API_RTEMS ] ), - offsetof( Configuration_Thread_control, API_RTEMS ) + offsetof( Thread_Configured_control, API_RTEMS ) }, { offsetof( - Configuration_Thread_control, + Thread_Configured_control, Control.libc_reent ), - offsetof( Configuration_Thread_control, Newlib ) + offsetof( Thread_Configured_control, Newlib ) } #if CONFIGURE_MAXIMUM_THREAD_NAME_SIZE > 1 , { offsetof( - Configuration_Thread_control, + Thread_Configured_control, Control.Join_queue.Queue.name ), - offsetof( Configuration_Thread_control, name ) + offsetof( Thread_Configured_control, name ) } #endif #ifdef RTEMS_POSIX_API , { offsetof( - Configuration_Thread_control, + Thread_Configured_control, Control.API_Extensions[ THREAD_API_POSIX ] ), - offsetof( Configuration_Thread_control, API_POSIX ) + offsetof( Thread_Configured_control, API_POSIX ) } #endif }; @@ -2946,46 +2779,122 @@ struct _reent *__getreent(void) const size_t _Thread_Control_add_on_count = RTEMS_ARRAY_SIZE( _Thread_Control_add_ons ); + #if defined(RTEMS_SMP) + struct Thread_queue_Configured_heads { + Thread_queue_Heads Heads; + Thread_queue_Priority_queue Priority[ _CONFIGURE_SCHEDULER_COUNT ]; + }; + + const size_t _Thread_queue_Heads_size = + sizeof( Thread_queue_Configured_heads ); + #endif + const uint32_t _Watchdog_Nanoseconds_per_tick = - 1000 * CONFIGURE_MICROSECONDS_PER_TICK; + (uint32_t) 1000 * CONFIGURE_MICROSECONDS_PER_TICK; const uint32_t _Watchdog_Ticks_per_second = _CONFIGURE_TICKS_PER_SECOND; + const size_t _Thread_Initial_thread_count = _CONFIGURE_IDLE_TASKS_COUNT + + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT + + rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) + + rtems_resource_maximum_per_allocation( _CONFIGURE_POSIX_THREADS ); + + THREAD_INFORMATION_DEFINE( + _Thread, + OBJECTS_INTERNAL_API, + OBJECTS_INTERNAL_THREADS, + _CONFIGURE_IDLE_TASKS_COUNT + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT + ); + + #if _CONFIGURE_BARRIERS > 0 + BARRIER_INFORMATION_DEFINE( _CONFIGURE_BARRIERS ); + #endif + + #if CONFIGURE_MAXIMUM_MESSAGE_QUEUES > 0 + MESSAGE_QUEUE_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_MESSAGE_QUEUES ); + #endif + + #if CONFIGURE_MAXIMUM_PARTITIONS > 0 + PARTITION_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_PARTITIONS ); + #endif + + #if CONFIGURE_MAXIMUM_PERIODS > 0 + RATE_MONOTONIC_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_PERIODS ); + #endif + + #if CONFIGURE_MAXIMUM_PORTS > 0 + DUAL_PORTED_MEMORY_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_PORTS ); + #endif + + #if CONFIGURE_MAXIMUM_REGIONS > 0 + REGION_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_REGIONS ); + #endif + + #if CONFIGURE_MAXIMUM_SEMAPHORES > 0 + SEMAPHORE_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_SEMAPHORES ); + #endif + + #if _CONFIGURE_TIMERS > 0 + TIMER_INFORMATION_DEFINE( _CONFIGURE_TIMERS ); + #endif + + #if _CONFIGURE_TASKS > 0 + THREAD_INFORMATION_DEFINE( + _RTEMS_tasks, + OBJECTS_CLASSIC_API, + OBJECTS_RTEMS_TASKS, + _CONFIGURE_TASKS + ); + #endif + + #if CONFIGURE_MAXIMUM_USER_EXTENSIONS > 0 + EXTENSION_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_USER_EXTENSIONS ); + #endif + /** * This is the Classic API Configuration Table. */ rtems_api_configuration_table Configuration_RTEMS_API = { - _CONFIGURE_TASKS, - CONFIGURE_MAXIMUM_TIMERS + _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER, - CONFIGURE_MAXIMUM_SEMAPHORES, - CONFIGURE_MAXIMUM_MESSAGE_QUEUES, - CONFIGURE_MAXIMUM_PARTITIONS, - CONFIGURE_MAXIMUM_REGIONS, - CONFIGURE_MAXIMUM_PORTS, - CONFIGURE_MAXIMUM_PERIODS, - _CONFIGURE_BARRIERS, CONFIGURE_INIT_TASK_TABLE_SIZE, CONFIGURE_INIT_TASK_TABLE }; + #if CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS > 0 + POSIX_Keys_Key_value_pair _POSIX_Keys_Key_value_pairs[ + rtems_resource_maximum_per_allocation( + CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS + ) + ]; + + const uint32_t _POSIX_Keys_Key_value_pair_maximum = + CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS; + #endif + + #if _CONFIGURE_POSIX_KEYS > 0 + POSIX_KEYS_INFORMATION_DEFINE( _CONFIGURE_POSIX_KEYS ); + #endif + #if CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES > 0 - const uint32_t _Configuration_POSIX_Maximum_message_queues = - CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES; + POSIX_MESSAGE_QUEUE_INFORMATION_DEFINE( + CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES + ); #endif #if CONFIGURE_MAXIMUM_POSIX_SEMAPHORES > 0 - const uint32_t _Configuration_POSIX_Maximum_named_semaphores = - CONFIGURE_MAXIMUM_POSIX_SEMAPHORES; + POSIX_SEMAPHORE_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ); #endif #if CONFIGURE_MAXIMUM_POSIX_SHMS > 0 - const uint32_t _Configuration_POSIX_Maximum_shms = - CONFIGURE_MAXIMUM_POSIX_SHMS; + POSIX_SHM_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_POSIX_SHMS ); #endif #if _CONFIGURE_POSIX_THREADS > 0 - const uint32_t _Configuration_POSIX_Maximum_threads = - _CONFIGURE_POSIX_THREADS; + THREAD_INFORMATION_DEFINE( + _POSIX_Threads, + OBJECTS_POSIX_API, + OBJECTS_POSIX_THREADS, + CONFIGURE_MAXIMUM_POSIX_THREADS + ); #endif #ifdef RTEMS_POSIX_API @@ -2995,8 +2904,7 @@ struct _reent *__getreent(void) #endif #if CONFIGURE_MAXIMUM_POSIX_TIMERS > 0 - const uint32_t _Configuration_POSIX_Maximum_timers = - CONFIGURE_MAXIMUM_POSIX_TIMERS; + POSIX_TIMER_INFORMATION_DEFINE( CONFIGURE_MAXIMUM_POSIX_TIMERS ); #endif #endif @@ -3021,8 +2929,6 @@ struct _reent *__getreent(void) CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */ _CONFIGURE_STACK_SPACE_SIZE, /* required stack space */ CONFIGURE_MAXIMUM_USER_EXTENSIONS, /* maximum dynamic extensions */ - _CONFIGURE_POSIX_KEYS, /* POSIX keys are always */ - CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS, /* enabled */ CONFIGURE_MICROSECONDS_PER_TICK, /* microseconds per clock tick */ CONFIGURE_TICKS_PER_TIMESLICE, /* ticks per timeslice quantum */ CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */ @@ -3182,35 +3088,12 @@ struct _reent *__getreent(void) uint32_t PER_INTEGER_TASK; uint32_t FP_OVERHEAD; - uint32_t CLASSIC; - uint32_t POSIX; /* System overhead pieces */ uint32_t MEMORY_FOR_IDLE_TASK; - /* Classic API Pieces */ - uint32_t CLASSIC_TASKS; - uint32_t TIMERS; - uint32_t SEMAPHORES; - uint32_t MESSAGE_QUEUES; - uint32_t PARTITIONS; - uint32_t REGIONS; - uint32_t PORTS; - uint32_t PERIODS; - uint32_t BARRIERS; - uint32_t USER_EXTENSIONS; - - /* POSIX API managers that are always enabled */ - uint32_t POSIX_KEYS; - /* POSIX API Pieces */ -#ifdef RTEMS_POSIX_API - uint32_t POSIX_TIMERS; uint32_t POSIX_QUEUED_SIGNALS; -#endif - uint32_t POSIX_MESSAGE_QUEUES; - uint32_t POSIX_SEMAPHORES; - uint32_t POSIX_SHMS; /* Stack space sizes */ uint32_t IDLE_TASKS_STACK; @@ -3230,36 +3113,12 @@ struct _reent *__getreent(void) _CONFIGURE_INITIALIZATION_THREADS_EXTRA_STACKS, _CONFIGURE_MEMORY_FOR_TASKS(1, 0), _CONFIGURE_MEMORY_FOR_TASKS(0, 1), - _CONFIGURE_MEMORY_FOR_CLASSIC, - _CONFIGURE_MEMORY_FOR_POSIX, /* System overhead pieces */ _CONFIGURE_MEMORY_FOR_INTERNAL_TASKS, - /* Classic API Pieces */ - _CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS, 0), - _CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS), - _CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES), - _CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES), - _CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS), - _CONFIGURE_MEMORY_FOR_REGIONS( CONFIGURE_MAXIMUM_REGIONS ), - _CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS), - _CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS), - _CONFIGURE_MEMORY_FOR_BARRIERS(_CONFIGURE_BARRIERS), - _CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(CONFIGURE_MAXIMUM_USER_EXTENSIONS), - _CONFIGURE_MEMORY_FOR_POSIX_KEYS( _CONFIGURE_POSIX_KEYS, \ - CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS ), - /* POSIX API Pieces */ -#ifdef RTEMS_POSIX_API - _CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ), - _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( - CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ), -#endif - _CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( - CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ), - _CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ), - _CONFIGURE_MEMORY_FOR_POSIX_SHMS( CONFIGURE_MAXIMUM_POSIX_SHMS ), + _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS, /* Stack space sizes */ _CONFIGURE_IDLE_TASKS_STACK, @@ -3311,21 +3170,6 @@ struct _reent *__getreent(void) #error "CONFIGURATION ERROR: RTEMS not configured for multiprocessing!!" #endif -/* - * If an attempt was made to configure POSIX objects and - * the POSIX API was not configured into RTEMS, error out. - * - * @note POSIX Keys are always available so the parameters - * CONFIGURE_MAXIMUM_POSIX_KEYS and - * CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS are not in this list. - */ -#if !defined(RTEMS_POSIX_API) - #if ((CONFIGURE_MAXIMUM_POSIX_TIMERS != 0) || \ - (CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS != 0)) - #error "CONFIGURATION ERROR: POSIX API support not configured!!" - #endif -#endif - #if !defined(RTEMS_SCHEDSIM) #if !defined(CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE) /* |