summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/include/confdefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/sapi/include/confdefs.h')
-rw-r--r--cpukit/sapi/include/confdefs.h129
1 files changed, 71 insertions, 58 deletions
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 53a8699aa1..959514f850 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -639,15 +639,10 @@ const rtems_libio_helper rtems_fs_init_helper =
*
* An application can define its own scheduling policy by defining
* CONFIGURE_SCHEDULER_USER and the following:
- * - CONFIGURE_SCHEDULER_ENTRY_POINTS
- * - CONFIGURE_MEMORY_FOR_SCHEDULER - base memory
+ * - CONFIGURE_SCHEDULER_CONTEXT
+ * - CONFIGURE_SCHEDULER_CONTROLS
* - CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER - per task memory
*/
-#include <rtems/score/scheduler.h>
-
-#if !defined(RTEMS_SMP)
- #undef CONFIGURE_SCHEDULER_SIMPLE_SMP
-#endif
/* If no scheduler is specified, the priority scheduler is default. */
#if !defined(CONFIGURE_SCHEDULER_USER) && \
@@ -665,21 +660,26 @@ const rtems_libio_helper rtems_fs_init_helper =
#endif
#endif
+#include <rtems/scheduler.h>
+
/*
* If the Priority Scheduler is selected, then configure for it.
*/
#if defined(CONFIGURE_SCHEDULER_PRIORITY)
- #include <rtems/score/schedulerpriority.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_PRIORITY_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT \
+ RTEMS_SCHEDULER_CONTEXT_PRIORITY( \
+ dflt, \
+ CONFIGURE_MAXIMUM_PRIORITY + 1 \
+ )
+
+ #define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY(dflt)
+ #endif
/**
* This defines the memory used by the priority scheduler.
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace( \
- sizeof(Scheduler_priority_Control) + \
- ((CONFIGURE_MAXIMUM_PRIORITY) * sizeof(Chain_Control)) ) \
- )
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \
_Configure_From_workspace(sizeof(Scheduler_priority_Per_thread)) )
#endif
@@ -689,17 +689,20 @@ const rtems_libio_helper rtems_fs_init_helper =
* it.
*/
#if defined(CONFIGURE_SCHEDULER_PRIORITY_SMP)
- #include <rtems/score/schedulerprioritysmp.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_PRIORITY_SMP_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT \
+ RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP( \
+ dflt, \
+ CONFIGURE_MAXIMUM_PRIORITY + 1 \
+ )
+
+ #define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(dflt)
+ #endif
/**
* This defines the memory used by the priority scheduler.
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace( \
- sizeof(Scheduler_priority_SMP_Control) + \
- ((CONFIGURE_MAXIMUM_PRIORITY) * sizeof(Chain_Control)) ) \
- )
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \
_Configure_From_workspace(sizeof(Scheduler_priority_Per_thread)) )
#endif
@@ -709,17 +712,20 @@ const rtems_libio_helper rtems_fs_init_helper =
* it.
*/
#if defined(CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP)
- #include <rtems/score/schedulerpriorityaffinitysmp.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT \
+ RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP( \
+ dflt, \
+ CONFIGURE_MAXIMUM_PRIORITY + 1 \
+ )
+
+ #define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(dflt)
+ #endif
/**
* This defines the memory used by the priority scheduler.
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace( \
- sizeof(Scheduler_SMP_Control) + \
- ((CONFIGURE_MAXIMUM_PRIORITY) * sizeof(Chain_Control)) ) \
- )
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \
_Configure_From_workspace(sizeof(Scheduler_priority_Per_thread)) )
#endif
@@ -728,15 +734,15 @@ const rtems_libio_helper rtems_fs_init_helper =
* If the Simple Priority Scheduler is selected, then configure for it.
*/
#if defined(CONFIGURE_SCHEDULER_SIMPLE)
- #include <rtems/score/schedulersimple.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_SIMPLE_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT RTEMS_SCHEDULER_CONTEXT_SIMPLE(dflt)
+
+ #define CONFIGURE_SCHEDULER_CONTROLS RTEMS_SCHEDULER_CONTROL_SIMPLE(dflt)
+ #endif
/**
* define the memory used by the simple scheduler
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace( sizeof( Scheduler_simple_Control ) ) \
- )
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER (0)
#endif
@@ -744,17 +750,19 @@ const rtems_libio_helper rtems_fs_init_helper =
* If the Simple SMP Priority Scheduler is selected, then configure for it.
*/
#if defined(CONFIGURE_SCHEDULER_SIMPLE_SMP)
- #include <rtems/score/schedulersimplesmp.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_SIMPLE_SMP_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT \
+ RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(dflt)
+
+ #define CONFIGURE_SCHEDULER_CONTROLS \
+ RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(dflt)
+ #endif
/**
* Define the memory used by the Simple SMP Scheduler
*
* NOTE: This is the same as the Simple Scheduler
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace( sizeof( Scheduler_simple_SMP_Control ) ) \
- )
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER (0)
#endif
@@ -762,14 +770,15 @@ const rtems_libio_helper rtems_fs_init_helper =
* If the EDF Scheduler is selected, then configure for it.
*/
#if defined(CONFIGURE_SCHEDULER_EDF)
- #include <rtems/score/scheduleredf.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_EDF_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT RTEMS_SCHEDULER_CONTEXT_EDF(dflt)
+
+ #define CONFIGURE_SCHEDULER_CONTROLS RTEMS_SCHEDULER_CONTROL_EDF(dflt)
+ #endif
/**
* define the memory used by the EDF scheduler
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace(sizeof(Scheduler_EDF_Control)))
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \
_Configure_From_workspace(sizeof(Scheduler_EDF_Per_thread)))
#endif
@@ -778,26 +787,27 @@ const rtems_libio_helper rtems_fs_init_helper =
* If the CBS Scheduler is selected, then configure for it.
*/
#if defined(CONFIGURE_SCHEDULER_CBS)
- #include <rtems/score/schedulercbs.h>
- #define CONFIGURE_SCHEDULER_ENTRY_POINTS SCHEDULER_CBS_ENTRY_POINTS
+ #if !defined(CONFIGURE_SCHEDULER_CONTROLS)
+ #define CONFIGURE_SCHEDULER_CONTEXT RTEMS_SCHEDULER_CONTEXT_CBS(dflt)
+
+ #define CONFIGURE_SCHEDULER_CONTROLS RTEMS_SCHEDULER_CONTROL_CBS(dflt)
+ #endif
#ifndef CONFIGURE_CBS_MAXIMUM_SERVERS
#define CONFIGURE_CBS_MAXIMUM_SERVERS CONFIGURE_MAXIMUM_TASKS
#endif
#ifdef CONFIGURE_INIT
- uint32_t _Scheduler_CBS_Maximum_servers = CONFIGURE_CBS_MAXIMUM_SERVERS;
+ const uint32_t _Scheduler_CBS_Maximum_servers =
+ CONFIGURE_CBS_MAXIMUM_SERVERS;
+
+ Scheduler_CBS_Server
+ _Scheduler_CBS_Server_list[ CONFIGURE_CBS_MAXIMUM_SERVERS ];
#endif
/**
* define the memory used by the CBS scheduler
*/
- #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \
- _Configure_From_workspace(sizeof(Scheduler_EDF_Control)) + \
- _Configure_From_workspace(CONFIGURE_CBS_MAXIMUM_SERVERS * \
- sizeof(Scheduler_CBS_Server *)) + \
- CONFIGURE_CBS_MAXIMUM_SERVERS * \
- _Configure_From_workspace(sizeof(Scheduler_CBS_Server)))
#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \
_Configure_From_workspace(sizeof(Scheduler_CBS_Per_thread)))
#endif
@@ -807,11 +817,17 @@ const rtems_libio_helper rtems_fs_init_helper =
* this code to know which scheduler is configured by the user.
*/
#ifdef CONFIGURE_INIT
- Scheduler_Control _Scheduler = {
- NULL, /* Scheduler Specific Data Pointer */
- CONFIGURE_SCHEDULER_ENTRY_POINTS /* Scheduler Operations */
+ CONFIGURE_SCHEDULER_CONTEXT;
+
+ const Scheduler_Control _Scheduler_Table[] = {
+ CONFIGURE_SCHEDULER_CONTROLS
};
+ #if defined(RTEMS_SMP)
+ const size_t _Scheduler_Count =
+ RTEMS_ARRAY_SIZE( _Scheduler_Table );
+ #endif
+
#if defined(CONFIGURE_SCHEDULER_EDF)
const bool _Scheduler_FIXME_thread_priority_queues_are_broken = true;
#else
@@ -2207,7 +2223,6 @@ const rtems_libio_helper rtems_fs_init_helper =
*/
#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
( CONFIGURE_MEMORY_FOR_IDLE_TASK + /* IDLE and stack */ \
- CONFIGURE_MEMORY_FOR_SCHEDULER + /* Scheduler */ \
CONFIGURE_INTERRUPT_VECTOR_TABLE + /* interrupt vectors */ \
CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
CONFIGURE_API_MUTEX_MEMORY /* allocation mutex */ \
@@ -2475,7 +2490,7 @@ const rtems_libio_helper rtems_fs_init_helper =
CONFIGURE_MULTIPROCESSING_TABLE, /* pointer to MP config table */
#endif
#ifdef RTEMS_SMP
- CONFIGURE_SMP_MAXIMUM_PROCESSORS
+ CONFIGURE_SMP_MAXIMUM_PROCESSORS,
#endif
};
#endif
@@ -2557,7 +2572,6 @@ const rtems_libio_helper rtems_fs_init_helper =
uint32_t INTERRUPT_VECTOR_TABLE;
uint32_t INTERRUPT_STACK_MEMORY;
uint32_t MEMORY_FOR_IDLE_TASK;
- uint32_t MEMORY_FOR_SCHEDULER;
uint32_t MEMORY_PER_TASK_FOR_SCHEDULER;
/* Classic API Pieces */
@@ -2614,7 +2628,6 @@ const rtems_libio_helper rtems_fs_init_helper =
CONFIGURE_INTERRUPT_VECTOR_TABLE,
CONFIGURE_INTERRUPT_STACK_MEMORY,
CONFIGURE_MEMORY_FOR_IDLE_TASK,
- CONFIGURE_MEMORY_FOR_SCHEDULER,
CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER,
/* Classic API Pieces */