summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-14 09:31:44 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-25 07:15:18 +0100
commit9520ec3a2aab575e264410d1ce95c468897c3bc9 (patch)
tree9bf686e89d8a2d23e69f110674a1141a3e7f985c /cpukit/rtems
parentconfig: Remove CONFIGURE_HAS_OWN_INIT_TASK_TABLE (diff)
downloadrtems-9520ec3a2aab575e264410d1ce95c468897c3bc9.tar.bz2
config: Simplify initialization task config
With the removal of the CONFIGURE_HAS_OWN_INIT_TASK_TABLE configuration option at most one Classic API user initialization task can be configured. Provide an RTEMS API configuration table for backward compatibility. Update #3873.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r--cpukit/rtems/src/getapiconfig.c46
-rw-r--r--cpukit/rtems/src/taskinitdefault.c34
-rw-r--r--cpukit/rtems/src/taskinitusers.c102
3 files changed, 114 insertions, 68 deletions
diff --git a/cpukit/rtems/src/getapiconfig.c b/cpukit/rtems/src/getapiconfig.c
new file mode 100644
index 0000000000..77c60cfe1c
--- /dev/null
+++ b/cpukit/rtems/src/getapiconfig.c
@@ -0,0 +1,46 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/rtems/config.h>
+#include <rtems/rtems/tasksdata.h>
+
+static rtems_api_configuration_table config;
+
+const rtems_api_configuration_table *
+rtems_configuration_get_rtems_api_configuration( void )
+{
+ if ( _RTEMS_tasks_User_task_table.entry_point != NULL ) {
+ config.number_of_initialization_tasks = 1;
+ config.User_initialization_tasks_table = &_RTEMS_tasks_User_task_table;
+ }
+
+ return &config;
+}
diff --git a/cpukit/rtems/src/taskinitdefault.c b/cpukit/rtems/src/taskinitdefault.c
new file mode 100644
index 0000000000..b0ac3360ab
--- /dev/null
+++ b/cpukit/rtems/src/taskinitdefault.c
@@ -0,0 +1,34 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/rtems/tasks.h>
+
+const rtems_initialization_tasks_table _RTEMS_tasks_User_task_table;
diff --git a/cpukit/rtems/src/taskinitusers.c b/cpukit/rtems/src/taskinitusers.c
index f72428d77c..0645de324a 100644
--- a/cpukit/rtems/src/taskinitusers.c
+++ b/cpukit/rtems/src/taskinitusers.c
@@ -18,79 +18,45 @@
#include "config.h"
#endif
-#include <rtems/config.h>
-#include <rtems/rtems/status.h>
-#include <rtems/rtems/support.h>
-#include <rtems/rtems/modes.h>
-#include <rtems/score/assert.h>
-#include <rtems/score/stack.h>
#include <rtems/rtems/tasksimpl.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/wkspace.h>
-
-/*
- * _RTEMS_tasks_Initialize_user_tasks_body
- *
- * This routine creates and starts all configured user
- * initialization threads.
- *
- * Input parameters: NONE
- *
- * Output parameters: NONE
- */
+#include <rtems/score/assert.h>
+#include <rtems/score/threadimpl.h>
+#include <rtems/score/interr.h>
-void _RTEMS_tasks_Initialize_user_tasks_body( void )
+void _RTEMS_tasks_Initialize_user_task( void )
{
- uint32_t index;
- uint32_t maximum;
- rtems_id id;
- rtems_status_code return_value;
- rtems_initialization_tasks_table *user_tasks;
- rtems_task_entry entry_point;
-
- /*
- * Move information into local variables
- */
- user_tasks = Configuration_RTEMS_API.User_initialization_tasks_table;
- maximum = Configuration_RTEMS_API.number_of_initialization_tasks;
-
- /*
- * Verify that we have a set of user tasks to iterate
- */
- if ( !user_tasks )
- return;
-
- /*
- * Now iterate over the initialization tasks and create/start them.
- */
- 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( INTERNAL_ERROR_RTEMS_INIT_TASK_CREATE_FAILED );
- }
+ rtems_id id;
+ rtems_status_code return_value;
+ const rtems_initialization_tasks_table *user_task;
+ rtems_task_entry entry_point;
+
+ user_task = &_RTEMS_tasks_User_task_table;
+ return_value = rtems_task_create(
+ user_task->name,
+ user_task->initial_priority,
+ user_task->stack_size,
+ user_task->mode_set,
+ user_task->attribute_set,
+ &id
+ );
+ if ( !rtems_is_status_successful( return_value ) ) {
+ _Internal_error( INTERNAL_ERROR_RTEMS_INIT_TASK_CREATE_FAILED );
+ }
- entry_point = user_tasks[ index ].entry_point;
- if ( entry_point == NULL ) {
- _Internal_error( INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL );
- }
+ entry_point = user_task->entry_point;
+ if ( entry_point == NULL ) {
+ _Internal_error( INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL );
+ }
- return_value = rtems_task_start(
- id,
- entry_point,
- user_tasks[ index ].argument
- );
- _Assert( rtems_is_status_successful( return_value ) );
- (void) return_value;
+ return_value = rtems_task_start(
+ id,
+ entry_point,
+ user_task->argument
+ );
+ _Assert( rtems_is_status_successful( return_value ) );
+ (void) return_value;
- if ( _Thread_Global_constructor == 0 ) {
- _Thread_Global_constructor = id;
- }
+ if ( _Thread_Global_constructor == 0 ) {
+ _Thread_Global_constructor = id;
}
}