[PATCH 07/18] config: Bring back RTEMS 4.11 configuration table

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Feb 14 16:02:32 UTC 2020


This improves API backward compatibility of RTEMS 5.1 to previous
versions.
---
 cpukit/include/rtems/rtems/config.h   | 61 +++++++++++++++++++++++++++++++++++
 cpukit/rtems/src/getapiconfig.c       | 18 +++++++++++
 testsuites/sptests/spsysinit01/init.c | 21 ++++++++++++
 3 files changed, 100 insertions(+)

diff --git a/cpukit/include/rtems/rtems/config.h b/cpukit/include/rtems/rtems/config.h
index a5078f6bb6..bd6b38a532 100644
--- a/cpukit/include/rtems/rtems/config.h
+++ b/cpukit/include/rtems/rtems/config.h
@@ -44,6 +44,67 @@ extern "C" {
  *     + required number of each object type
  */
 typedef struct {
+  /**
+   * This field contains the maximum number of Classic API
+   * Tasks which are configured for this application.
+   */
+  uint32_t                    maximum_tasks;
+
+  /**
+   * This field indicates whether Classic API notepads are
+   * enabled or disabled.
+   */
+  bool                        notepads_enabled;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Timers which are configured for this application.
+   */
+  uint32_t                    maximum_timers;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Semaphores which are configured for this application.
+   */
+  uint32_t                    maximum_semaphores;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Message Queues which are configured for this application.
+   */
+  uint32_t                    maximum_message_queues;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Partitions which are configured for this application.
+   */
+  uint32_t                    maximum_partitions;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Regions which are configured for this application.
+   */
+  uint32_t                    maximum_regions;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Dual Ported Memory Areas which are configured for this
+   * application.
+   */
+  uint32_t                    maximum_ports;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Rate Monotonic Periods which are configured for this
+   * application.
+   */
+  uint32_t                    maximum_periods;
+
+  /**
+   * This field contains the maximum number of Classic API
+   * Barriers which are configured for this application.
+   */
+  uint32_t                    maximum_barriers;
 
   /**
    * This field contains the number of Classic API Initialization
diff --git a/cpukit/rtems/src/getapiconfig.c b/cpukit/rtems/src/getapiconfig.c
index b69629504b..13b035a10d 100644
--- a/cpukit/rtems/src/getapiconfig.c
+++ b/cpukit/rtems/src/getapiconfig.c
@@ -37,6 +37,24 @@ static rtems_api_configuration_table config;
 const rtems_api_configuration_table *
 rtems_configuration_get_rtems_api_configuration( void )
 {
+  /*
+   * Always initialize the configuration table and do not bother with
+   * synchronization issues.  This function is not performance critical.  The
+   * configuration values are all constants.
+   */
+
+  config.notepads_enabled = false;
+  config.maximum_tasks = rtems_configuration_get_maximum_tasks();
+  config.maximum_timers = rtems_configuration_get_maximum_timers();
+  config.maximum_semaphores = rtems_configuration_get_maximum_semaphores();
+  config.maximum_message_queues =
+    rtems_configuration_get_maximum_message_queues();
+  config.maximum_partitions = rtems_configuration_get_maximum_partitions();
+  config.maximum_regions = rtems_configuration_get_maximum_regions();
+  config.maximum_ports = rtems_configuration_get_maximum_ports();
+  config.maximum_periods = rtems_configuration_get_maximum_periods();
+  config.maximum_barriers = rtems_configuration_get_maximum_barriers();
+
   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;
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 49b5a69a60..224eac468f 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -905,6 +905,26 @@ static void do_posix_timer_create(void)
 #endif /* RTEMS_POSIX_API */
 }
 
+static void check_config(void)
+{
+  const rtems_api_configuration_table *config;
+
+  config = rtems_configuration_get_rtems_api_configuration();
+
+  rtems_test_assert(!config->notepads_enabled);
+  rtems_test_assert(config->maximum_tasks == 2);
+  rtems_test_assert(config->maximum_timers == 1);
+  rtems_test_assert(config->maximum_semaphores == 1);
+  rtems_test_assert(config->maximum_message_queues == 1);
+  rtems_test_assert(config->maximum_partitions == 1);
+  rtems_test_assert(config->maximum_regions == 1);
+  rtems_test_assert(config->maximum_ports == 1);
+  rtems_test_assert(config->maximum_periods == 1);
+  rtems_test_assert(config->maximum_barriers == 1);
+  rtems_test_assert(config->number_of_initialization_tasks == 1);
+  rtems_test_assert(config->User_initialization_tasks_table != NULL);
+}
+
 static void Init(rtems_task_argument arg)
 {
   next_step(INIT_TASK);
@@ -923,6 +943,7 @@ static void Init(rtems_task_argument arg)
   do_posix_sem_open();
   do_posix_shm_open();
   do_posix_timer_create();
+  check_config();
   TEST_END();
   exit(0);
 }
-- 
2.16.4



More information about the devel mailing list