From 9de8d61a9a4a7eda2bef620c8dde1b659850dce9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 17 Jul 2020 13:36:49 +0200 Subject: libtest: to Rename this header file to later move to . The main feature provided by is the output of standard test information which is consumed by the RTEMS Tester. Update #3199. --- cpukit/headers.am | 3 +- cpukit/include/rtems/doxygen-appl-config.h | 3736 ++++++++++++++++++++ cpukit/include/rtems/test-info.h | 329 ++ cpukit/include/rtems/test.h | 329 -- cpukit/libtest/testbeginend.c | 2 +- cpukit/libtest/testbusy.c | 2 +- cpukit/libtest/testextension.c | 2 +- cpukit/libtest/testparallel.c | 2 +- cpukit/libtest/testwrappers.c | 2 +- testsuites/ada/support/initimpl.h | 2 +- testsuites/libtests/block08/system.h | 2 +- testsuites/libtests/block09/init.c | 2 +- testsuites/libtests/block10/init.c | 2 +- testsuites/libtests/capture01/system.h | 2 +- testsuites/libtests/dl01/dl01-o1.c | 2 +- testsuites/libtests/dl02/dl02-o1.c | 2 +- testsuites/libtests/dl02/dl02-o2.c | 2 +- testsuites/libtests/dl05/dl05-o5.cc | 2 +- testsuites/libtests/dl06/dl06-o1.c | 2 +- testsuites/libtests/dl06/dl06-o2.c | 2 +- testsuites/libtests/dl07/dl07-o1.c | 2 +- testsuites/libtests/dl07/dl07-o2.c | 2 +- testsuites/libtests/dl07/dl07-o3.c | 2 +- testsuites/libtests/dl07/dl07-o4.c | 2 +- testsuites/libtests/dl07/dl07-o5.c | 2 +- testsuites/libtests/dl08/dl08-o1.c | 2 +- testsuites/libtests/dl08/dl08-o2.c | 2 +- testsuites/libtests/dl08/dl08-o3.c | 2 +- testsuites/libtests/dl08/dl08-o4.c | 2 +- testsuites/libtests/dl08/dl08-o5.c | 2 +- .../libtests/dl08/dl08-o6-123456789-123456789.c | 2 +- testsuites/libtests/dl09/dl09-o1.c | 2 +- testsuites/libtests/dl09/dl09-o2.c | 2 +- testsuites/libtests/dl09/dl09-o3.c | 2 +- testsuites/libtests/dl09/dl09-o4.c | 2 +- testsuites/libtests/dl09/dl09-o5.c | 2 +- testsuites/libtests/dl10/dl10-o1.c | 2 +- testsuites/libtests/dl10/dl10-o2.c | 2 +- testsuites/libtests/dl10/dl10-o3.c | 2 +- testsuites/libtests/dl10/dl10-o4.c | 2 +- testsuites/libtests/dl10/dl10-o5.c | 2 +- testsuites/libtests/dl10/dl10-o6.c | 2 +- testsuites/libtests/mathl/init.c | 2 +- testsuites/psxtests/psxbarrier01/main.c | 2 +- testsuites/psxtests/psxconfig01/init.c | 2 +- testsuites/psxtests/psxfenv01/init.c | 2 +- testsuites/psxtests/psxinttypes01/init.c | 2 +- testsuites/psxtests/psxndbm01/init.c | 2 +- testsuites/psxtests/psxrwlock01/main.c | 2 +- testsuites/samples/base_mp/system.h | 2 +- testsuites/samples/base_sp/system.h | 2 +- testsuites/samples/capture/system.h | 2 +- testsuites/samples/cdtest/main.cc | 2 +- testsuites/samples/cdtest/system.h | 2 +- testsuites/samples/fileio/system.h | 2 +- testsuites/samples/iostream/system.h | 2 +- testsuites/samples/nsecs/system.h | 2 +- testsuites/samples/paranoia/system.h | 2 +- testsuites/samples/pppd/system.h | 2 +- testsuites/samples/ticker/system.h | 2 +- testsuites/smptests/smpatomic01/init.c | 2 +- testsuites/smptests/smplock01/init.c | 2 +- testsuites/smptests/smpscheduler03/init.c | 2 +- testsuites/smptests/smpscheduler05/init.c | 2 +- testsuites/smptests/smpscheduler06/init.c | 2 +- testsuites/smptests/smpscheduler07/init.c | 2 +- testsuites/sptests/spheapprot/init.c | 2 +- testsuites/sptests/sptimecounter02/init.c | 2 +- testsuites/sptests/sptimecounter03/init.c | 2 +- testsuites/sptests/sptimecounter04/init.c | 2 +- testsuites/support/include/buffer_test_io.h | 2 +- testsuites/support/include/tmacros.h | 2 +- testsuites/tmtests/tmfine01/init.c | 2 +- testsuites/tmtests/tmonetoone/init.c | 2 +- 74 files changed, 4137 insertions(+), 400 deletions(-) create mode 100644 cpukit/include/rtems/doxygen-appl-config.h create mode 100644 cpukit/include/rtems/test-info.h delete mode 100644 cpukit/include/rtems/test.h diff --git a/cpukit/headers.am b/cpukit/headers.am index dd38c69242..b91d8dcf8a 100644 --- a/cpukit/headers.am +++ b/cpukit/headers.am @@ -87,6 +87,7 @@ include_rtems_HEADERS += include/rtems/devnull.h include_rtems_HEADERS += include/rtems/devzero.h include_rtems_HEADERS += include/rtems/diskdevs.h include_rtems_HEADERS += include/rtems/dosfs.h +include_rtems_HEADERS += include/rtems/doxygen-appl-config.h include_rtems_HEADERS += include/rtems/dumpbuf.h include_rtems_HEADERS += include/rtems/endian.h include_rtems_HEADERS += include/rtems/error.h @@ -170,7 +171,7 @@ include_rtems_HEADERS += include/rtems/telnetd.h include_rtems_HEADERS += include/rtems/termios_printk.h include_rtems_HEADERS += include/rtems/termios_printk_cnf.h include_rtems_HEADERS += include/rtems/termiostypes.h -include_rtems_HEADERS += include/rtems/test.h +include_rtems_HEADERS += include/rtems/test-info.h include_rtems_HEADERS += include/rtems/tftp.h include_rtems_HEADERS += include/rtems/thread.h include_rtems_HEADERS += include/rtems/timecounter.h diff --git a/cpukit/include/rtems/doxygen-appl-config.h b/cpukit/include/rtems/doxygen-appl-config.h new file mode 100644 index 0000000000..a68118692d --- /dev/null +++ b/cpukit/include/rtems/doxygen-appl-config.h @@ -0,0 +1,3736 @@ +/** + * @defgroup Block Device Cache Configuration Block Device Cache Configuration + * + * This section describes configuration options related to the Block Device + * Cache (bdbuf). + * + * @{ + */ + +/** + * @brief In case this configuration option is defined, then the Block Device + * Cache is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Each option of the Block Device Cache (bdbuf) configuration can be + * explicitly set by the user with the configuration options below. The Block + * Device Cache is used for example by the RFS and DOSFS filesystems. + */ +#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK + +/** + * @brief The value of this configuration option defines the maximum size of a + * buffer in bytes. + * + * This configuration option is an integer define. + * + * The default value is 4096. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be an integral multiple of :ref:`CONFIGURE_BDBUF_BUFFER_MIN_SIZE`. + */ +#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE + +/** + * @brief The value of this configuration option defines the minimum size of a + * buffer in bytes. + * + * This configuration option is an integer define. + * + * The default value is 512. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + */ +#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE + +/** + * @brief The value of this configuration option defines the size of the cache + * memory in bytes. + * + * This configuration option is an integer define. + * + * The default value is 32768. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``SIZE_MAX``. + */ +#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE + +/** + * @brief The value of this configuration option defines the maximum blocks per + * read-ahead request. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * A value of 0 disables the read-ahead task (default). The read-ahead task + * will issue speculative read transfers if a sequential access pattern is + * detected. This can improve the performance on some systems. + */ +#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS + +/** + * @brief The value of this configuration option defines the maximum blocks per + * write request. + * + * This configuration option is an integer define. + * + * The default value is 16. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + */ +#define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS + +/** + * @brief The value of this configuration option defines the read-ahead task + * priority. + * + * This configuration option is an integer define. + * + * The default value is 15. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + */ +#define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY + +/** + * @brief The value of this configuration option defines the task stack size of + * the Block Device Cache tasks in bytes. + * + * This configuration option is an integer define. + * + * The default value is ``RTEMS_MINIMUM_STACK_SIZE``. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + */ +#define CONFIGURE_BDBUF_TASK_STACK_SIZE + +/** + * @brief The value of this configuration option defines the swapout task + * maximum block hold time in milliseconds. + * + * This configuration option is an integer define. + * + * The default value is 1000. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + */ +#define CONFIGURE_SWAPOUT_BLOCK_HOLD + +/** + * @brief The value of this configuration option defines the swapout task swap + * period in milliseconds. + * + * This configuration option is an integer define. + * + * The default value is 250. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + */ +#define CONFIGURE_SWAPOUT_SWAP_PERIOD + +/** + * @brief The value of this configuration option defines the swapout task + * priority. + * + * This configuration option is an integer define. + * + * The default value is 15. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + */ +#define CONFIGURE_SWAPOUT_TASK_PRIORITY + +/** + * @brief The value of this configuration option defines the swapout worker + * task priority. + * + * This configuration option is an integer define. + * + * The default value is 15. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + */ +#define CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY + +/** + * @brief The value of this configuration option defines the swapout worker + * task count. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + */ +#define CONFIGURE_SWAPOUT_WORKER_TASKS + +/** @} */ + +/** + * @defgroup BSP Related Configuration Options BSP Related Configuration Options + * + * This section describes configuration options related to the BSP. Some + * configuration options may have a BSP-specific setting which is defined by + * ````. The BSP-specific settings can be disabled by the + * :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` configuration option. + * + * @{ + */ + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then the value of this configuration option defines the default value + * of :ref:`CONFIGURE_IDLE_TASK_BODY`. + * + * This configuration option is an initializer define. + * + * The default value is BSP-specific. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void *( *idle_body )( uintptr_t )``. + * + * As it has knowledge of the specific CPU model, system controller logic, and + * peripheral buses, a BSP-specific IDLE task may be capable of turning + * components off to save power during extended periods of no task activity. + */ +#define BSP_IDLE_TASK_BODY + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then the value of this configuration option defines the default value + * of :ref:`CONFIGURE_IDLE_TASK_SIZE`. + * + * This configuration option is an integer define. + * + * The default value is BSP-specific. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the IDLE task stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the IDLE task stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + */ +#define BSP_IDLE_TASK_STACK_SIZE + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then the value of this configuration option is used to initialize the + * table of initial user extensions. + * + * This configuration option is an initializer define. + * + * The default value is BSP-specific. + * + * The value of this configuration option shall be a list of initializers for + * structures of type :c:type:`rtems_extensions_table`. + * + * The value of this configuration option is placed after the entries of all + * other initial user extensions. + */ +#define BSP_INITIAL_EXTENSION + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then the value of this configuration option defines the default value + * of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`. + * + * This configuration option is an integer define. + * + * The default value is BSP-specific. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the interrupt stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be aligned according to ``CPU_INTERRUPT_STACK_ALIGNMENT``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the interrupt stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be aligned according to ``CPU_INTERRUPT_STACK_ALIGNMENT``. + */ +#define BSP_INTERRUPT_STACK_SIZE + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then the value of this configuration option is used to initialize the + * table of initial user extensions. + * + * This configuration option is an initializer define. + * + * The default value is BSP-specific. + * + * The value of this configuration option shall be a list of initializers for + * structures of type :c:type:`rtems_extensions_table`. + * + * The value of this configuration option is placed before the entries of all + * other initial user extensions (including + * :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`). + */ +#define CONFIGURE_BSP_PREREQUISITE_DRIVERS + +/** + * @brief In case this configuration option is defined, then the following BSP + * related configuration options are undefined: + * + * @brief * :ref:`BSP_IDLE_TASK_BODY` + * + * @brief * :ref:`BSP_IDLE_TASK_STACK_SIZE` + * + * @brief * :ref:`BSP_INITIAL_EXTENSION` + * + * @brief * :ref:`BSP_INTERRUPT_STACK_SIZE` + * + * @brief * :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS` + * + * @brief * :ref:`CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK` + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_DISABLE_BSP_SETTINGS + +/** + * @brief If + * + * @brief * this configuration option is defined by the BSP + * + * @brief * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined, + * + * @brief then not all memory is made available to the C Program Heap + * immediately at system initialization time. When :c:func:`malloc()` or + * other standard memory allocation functions are unable to allocate memory, + * they will call the BSP supplied :c:func:`sbrk()` function to obtain more + * memory. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This option should not be defined by the application. Only the BSP knows how + * it allocates memory to the C Program Heap. + */ +#define CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK + +/** @} */ + +/** + * @defgroup Classic API Configuration Classic API Configuration + * + * This section describes configuration options related to the Classic API. + * + * @{ + */ + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Barriers that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_BARRIERS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Message Queues that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to + * store the messages of each message queue, see + * :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`. + */ +#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Partitions that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_PARTITIONS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Periods that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_PERIODS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Ports that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_PORTS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Regions that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_REGIONS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Semaphore that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * In SMP configurations, the size of a Semaphore Control Block depends on the + * scheduler count (see :ref:`ConfigurationSchedulerTable`). The semaphores + * using the :ref:`MrsP` need a ceiling priority per scheduler. + */ +#define CONFIGURE_MAXIMUM_SEMAPHORES + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Tasks that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * The calculations for the required memory in the RTEMS Workspace for tasks + * assume that each task has a minimum stack size and has floating point + * support enabled. The configuration parameter + * ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements + * *ABOVE* the minimum size required. See :ref:`Reserve Task/Thread Stack + * Memory Above Minimum` for more information about + * ``CONFIGURE_EXTRA_TASK_STACKS``. + * + * The maximum number of POSIX threads is specified by + * :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`. + * + * A future enhancement to ```` could be to eliminate the + * assumption that all tasks have floating point enabled. This would require + * the addition of a new configuration parameter to specify the number of tasks + * which enable floating point support. + */ +#define CONFIGURE_MAXIMUM_TASKS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API Timers that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_TIMERS + +/** + * @brief The value of this configuration option defines the maximum number of + * Classic API User Extensions that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * This object class cannot be configured in unlimited allocation mode. + */ +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS + +/** @} */ + +/** + * @defgroup Classic API Initialization Task Configuration Classic API Initialization Task Configuration + * + * This section describes configuration options related to the Classic API + * initialization task. + * + * @{ + */ + +/** + * @brief The value of this configuration option defines task argument of the + * Classic API initialization task. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall be a valid integer of type + * ``rtems_task_argument``. + */ +#define CONFIGURE_INIT_TASK_ARGUMENTS + +/** + * @brief The value of this configuration option defines the task attributes of + * the Classic API initialization task. + * + * This configuration option is an integer define. + * + * The default value is ``RTEMS_DEFAULT_ATTRIBUTES``. + * + * The value of this configuration option shall be a valid task attribute set. + */ +#define CONFIGURE_INIT_TASK_ATTRIBUTES + +/** + * @brief The value of this configuration option initializes the entry point of + * the Classic API initialization task. + * + * This configuration option is an initializer define. + * + * The default value is ``Init``. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void ( *entry_point )( rtems_task_argument )``. + * + * The application shall provide the function referenced by this configuration + * option. + */ +#define CONFIGURE_INIT_TASK_ENTRY_POINT + +/** + * @brief The value of this configuration option defines the initial execution + * mode of the Classic API initialization task. + * + * This configuration option is an integer define. + * + * In SMP configurations, the default value is ``RTEMS_DEFAULT_MODES``, otherwise + * the default value is ``RTEMS_NO_PREEMPT``. + * + * The value of this configuration option shall be a valid task mode set. + */ +#define CONFIGURE_INIT_TASK_INITIAL_MODES + +/** + * @brief The value of this configuration option defines the name of the + * Classic API initialization task. + * + * This configuration option is an integer define. + * + * The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``. + * + * The value of this configuration option shall be a valid integer of type + * ``rtems_name``. + * + * Use :c:func:`rtems_build_name` to define the task name. + */ +#define CONFIGURE_INIT_TASK_NAME + +/** + * @brief The value of this configuration option defines the initial priority + * of the Classic API initialization task. + * + * This configuration option is an integer define. + * + * The default value is 1. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + */ +#define CONFIGURE_INIT_TASK_PRIORITY + +/** + * @brief The value of this configuration option defines the task stack size of + * the Classic API initialization task. + * + * This configuration option is an integer define. + * + * The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + */ +#define CONFIGURE_INIT_TASK_STACK_SIZE + +/** + * @brief In case this configuration option is defined, then exactly one + * Classic API initialization task is configured. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The application shall define exactly one of the following configuration + * options + * + * * `CONFIGURE_RTEMS_INIT_TASKS_TABLE`, + * + * * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or + * + * * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION` + * + * otherwise a compile time error in the configuration file will occur. + */ +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +/** @} */ + +/** + * @defgroup Device Driver Configuration Device Driver Configuration + * + * This section describes configuration options related to the device drivers. + * Note that network device drivers are not covered by the following options. + * + * @{ + */ + +/** + * @brief In case this configuration option is defined, then **no** Clock + * Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then a Clock Driver may be + * initialized during system initialization. + * + * This configuration parameter is intended to prevent the common user error of + * using the Hello World example as the baseline for an application and leaving + * out a clock tick source. + * + * The application shall define exactly one of the following configuration + * options + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`, + * + * * `CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`, + * + * otherwise a compile time error in the configuration file will occur. + */ +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +/** + * @brief The value of this configuration option is used to initialize the + * Device Driver Table. + * + * This configuration option is an initializer define. + * + * The default value is the empty list. + * + * The value of this configuration option shall be a list of initializers for + * structures of type :c:type:`rtems_driver_address_table`. + * + * The value of this configuration option is placed after the entries of other + * device driver configuration options. + * + * See :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS` for an alternative + * placement of application device driver initializers. + */ +#define CONFIGURE_APPLICATION_EXTRA_DRIVERS + +/** + * @brief In case this configuration option is defined, then the ATA Driver is + * initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Most BSPs do not include support for an ATA Driver. + * + * If this option is defined and the BSP does not have this device driver, then + * the user will get a link time error for an undefined symbol. + */ +#define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER + +/** + * @brief In case this configuration option is defined, then the Clock Driver + * is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The Clock Driver is responsible for providing a regular interrupt which + * invokes a clock tick directive. + * + * The application shall define exactly one of the following configuration + * options + * + * * `CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`, + * + * * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`, + * + * otherwise a compile time error in the configuration file will occur. + */ +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +/** + * @brief In case this configuration option is defined, then the Console Driver + * is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The Console Driver is responsible for providing the :file:`/dev/console` + * device file. This device is used to initialize the standard input, output, + * and error file descriptors. + * + * BSPs should be constructed in a manner that allows :c:func:`printk` to work + * properly without the need for the Console Driver to be configured. + * + * The + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`, + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER` + * + * configuration options are mutually exclusive. + */ +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +/** + * @brief In case this configuration option is defined, then the Frame Buffer + * Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Most BSPs do not include support for a Frame Buffer Driver. This is because + * many boards do not include the required hardware. + * + * If this option is defined and the BSP does not have this device driver, then + * the user will get a link time error for an undefined symbol. + */ +#define CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER + +/** + * @brief In case this configuration option is defined, then the IDE Driver is + * initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Most BSPs do not include support for an IDE Driver. + * + * If this option is defined and the BSP does not have this device driver, then + * the user will get a link time error for an undefined symbol. + */ +#define CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER + +/** + * @brief In case this configuration option is defined, then the + * :file:`/dev/null` Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This device driver is supported by all BSPs. + */ +#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER + +/** + * @brief In case this configuration option is defined, then the Real-Time + * Clock Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Most BSPs do not include support for a real-time clock (RTC). This is + * because many boards do not include the required hardware. + * + * If this is defined and the BSP does not have this device driver, then the + * user will get a link time error for an undefined symbol. + */ +#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER + +/** + * @brief In case this configuration option is defined, then the Simple Console + * Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This device driver is responsible for providing the :file:`/dev/console` + * device file. This device is used to initialize the standard input, output, + * and error file descriptors. + * + * This device driver reads via :c:func:`getchark`. + * + * This device driver writes via :c:func:`rtems_putc`. + * + * The Termios framework is not used. There is no support to change device + * settings, e.g. baud, stop bits, parity, etc. + * + * The + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`, + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER` + * + * configuration options are mutually exclusive. + */ +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +/** + * @brief In case this configuration option is defined, then the Simple Task + * Console Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This device driver is responsible for providing the :file:`/dev/console` + * device file. This device is used to initialize the standard input, output, + * and error file descriptors. + * + * This device driver reads via :c:func:`getchark`. + * + * This device driver writes into a write buffer. The count of characters + * written into the write buffer is returned. It might be less than the + * requested count, in case the write buffer is full. The write is + * non-blocking and may be called from interrupt context. A dedicated task + * reads from the write buffer and outputs the characters via + * :c:func:`rtems_putc`. This task runs with the least important priority. The + * write buffer size is 2047 characters and it is not configurable. + * + * Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the + * write buffer. + * + * The Termios framework is not used. There is no support to change device + * settings, e.g. baud, stop bits, parity, etc. + * + * The + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`, + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER` + * + * configuration options are mutually exclusive. + */ +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER + +/** + * @brief In case this configuration option is defined, then the Stub Driver is + * initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This device driver simply provides entry points that return successful and + * is primarily a test fixture. It is supported by all BSPs. + */ +#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER + +/** + * @brief In case this configuration option is defined, then the Benchmark + * Timer Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS + * Testsuite. Applications should not use this driver. + * + * The application shall define exactly one of the following configuration + * options + * + * * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`, + * + * * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or + * + * * `CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`, + * + * otherwise a compile time error will occur. + */ +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER + +/** + * @brief In case this configuration option is defined, then the Watchdog + * Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Most BSPs do not include support for a watchdog device driver. This is + * because many boards do not include the required hardware. + * + * If this is defined and the BSP does not have this device driver, then the + * user will get a link time error for an undefined symbol. + */ +#define CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER + +/** + * @brief In case this configuration option is defined, then the + * :file:`/dev/zero` Driver is initialized during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This device driver is supported by all BSPs. + */ +#define CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER + +/** + * @brief The value of this configuration option is used to initialize the + * Device Driver Table. + * + * This configuration option is an initializer define. + * + * The default value is the empty list. + * + * The value of this configuration option shall be a list of initializers for + * structures of type :c:type:`rtems_driver_address_table`. + * + * The value of this configuration option is placed after the entries defined + * by :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS` and before all other device + * driver configuration options. + * + * See :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS` for an alternative placement + * of application device driver initializers. + */ +#define CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS + +/** + * @brief The value of this configuration option defines the ATA task priority. + * + * This configuration option is an integer define. + * + * The default value is 140. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * * It shall be a valid Classic API task priority. The set of valid task + * priorities is scheduler-specific. + * + * This configuration option is only evaluated if the configuration option + * :ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER` is defined. + */ +#define CONFIGURE_ATA_DRIVER_TASK_PRIORITY + +/** + * @brief The value of this configuration option defines the number of device + * drivers. + * + * This configuration option is an integer define. + * + * This is computed by default, and is set to the number of device drivers + * configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration + * options. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be less than or equal to ``SIZE_MAX``. + * + * * It shall be greater than or equal than the number of statically configured + * device drivers. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * If the application will dynamically install device drivers, then this + * configuration parameter shall be larger than the number of statically + * configured device drivers. Drivers configured using the + * ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration options are + * statically installed. + */ +#define CONFIGURE_MAXIMUM_DRIVERS + +/** @} */ + +/** + * @defgroup Event Recording Configuration Event Recording Configuration + * + * This section describes configuration options related to the event recording. + * + * @{ + */ + +/** + * @brief In case + * + * @brief * this configuration option is defined + * + * @brief * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly + * defined, + * + * @brief then the event record extensions are enabled. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The record extensions capture thread create, start, restart, delete, switch, + * begin, exitted and terminate events. + */ +#define CONFIGURE_RECORD_EXTENSIONS_ENABLED + +/** + * @brief In case + * + * @brief * this configuration option is defined + * + * @brief * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly + * defined, + * + * @brief * and :ref:`CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB` is undefined, + * + * @brief then the event records are dumped in Base64 encoding in a fatal error + * extension (see :ref:`Terminate`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This extension can be used to produce crash dumps. + */ +#define CONFIGURE_RECORD_FATAL_DUMP_BASE64 + +/** + * @brief In case + * + * @brief * this configuration option is defined + * + * @brief * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly + * defined, + * + * @brief then the event records are compressed by zlib and dumped in Base64 + * encoding in a fatal error extension (see :ref:`Terminate`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The zlib compression needs about 512KiB of RAM. This extension can be used + * to produce crash dumps. + */ +#define CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB + +/** + * @brief The value of this configuration option defines the event record item + * count per processor. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 16. + * + * * It shall be less than or equal to ``SIZE_MAX``. + * + * * It shall be a power of two. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * The event record buffers are statically allocated for each configured + * processor (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). If the value of this + * configuration option is zero, then nothing is allocated. + */ +#define CONFIGURE_RECORD_PER_PROCESSOR_ITEMS + +/** @} */ + +/** + * @defgroup Filesystem Configuration Filesystem Configuration + * + * This section describes configuration options related to filesytems. By + * default, the In-Memory Filesystem (IMFS) is used as the base filesystem + * (also known as root filesystem). In order to save some memory for your + * application, you can disable the filesystem support with the + * :ref:`CONFIGURE_APPLICATION_DISABLE_FILESYSTEM` configuration option. + * Alternatively, you can strip down the features of the base filesystem with + * the :ref:`CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM` and + * :ref:`CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM` configuration options. These + * three configuration options are mutually exclusive. They are intended for + * an advanced application configuration. + * + * Features of the IMFS can be disabled and enabled with the following + * configuration options: + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHMOD` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHOWN` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_LINK` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_MKNOD` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_MOUNT` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_READDIR` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_READLINK` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_RENAME` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_RMNOD` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT` + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UTIME` + * + * * :ref:`CONFIGURE_IMFS_ENABLE_MKFIFO` + * + * @{ + */ + +/** + * @brief In case this configuration option is defined, then **no** base + * filesystem is initialized during system initialization and **no** + * filesystems are configured. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then a base filesystem and the + * configured filesystems are initialized during system initialization. + * + * Filesystems shall be initialized to support file descriptor based device + * drivers and basic input/output functions such as :c:func:`printf`. + * Filesystems can be disabled to reduce the memory footprint of an + * application. + */ +#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + +/** + * @brief In case this configuration option is defined, then the following + * configuration options will be defined as well + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_DOSFS`, + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_FTPFS`, + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_IMFS`, + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_JFFS2`, + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_NFS`, + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_RFS`, and + * + * @brief * :ref:`CONFIGURE_FILESYSTEM_TFTPFS`. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_FILESYSTEM_ALL + +/** + * @brief In case this configuration option is defined, then the DOS (FAT) + * filesystem is registered, so that instances of this filesystem can be + * mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This filesystem requires a Block Device Cache configuration, see + * :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`. + */ +#define CONFIGURE_FILESYSTEM_DOSFS + +/** + * @brief In case this configuration option is defined, then the FTP filesystem + * (FTP client) is registered, so that instances of this filesystem can be + * mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_FILESYSTEM_FTPFS + +/** + * @brief In case this configuration option is defined, then the In-Memory + * Filesystem (IMFS) is registered, so that instances of this filesystem can + * be mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Applications will rarely need this configuration option. This configuration + * option is intended for test programs. You do not need to define this + * configuration option for the base filesystem (also known as root + * filesystem). + */ +#define CONFIGURE_FILESYSTEM_IMFS + +/** + * @brief In case this configuration option is defined, then the JFFS2 + * filesystem is registered, so that instances of this filesystem can be + * mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_FILESYSTEM_JFFS2 + +/** + * @brief In case this configuration option is defined, then the Network + * Filesystem (NFS) client is registered, so that instances of this + * filesystem can be mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_FILESYSTEM_NFS + +/** + * @brief In case this configuration option is defined, then the RTEMS + * Filesystem (RFS) is registered, so that instances of this filesystem can + * be mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This filesystem requires a Block Device Cache configuration, see + * :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`. + */ +#define CONFIGURE_FILESYSTEM_RFS + +/** + * @brief In case this configuration option is defined, then the TFTP + * filesystem (TFTP client) is registered, so that instances of this + * filesystem can be mounted by the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + */ +#define CONFIGURE_FILESYSTEM_TFTPFS + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support changing the mode of files (no support for :c:func:`chmod`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports changing + * the mode of files. + */ +#define CONFIGURE_IMFS_DISABLE_CHMOD + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support changing the ownership of files (no support for + * :c:func:`chown`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports changing + * the ownership of files. + */ +#define CONFIGURE_IMFS_DISABLE_CHOWN + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support hard links (no support for :c:func:`link`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports hard + * links. + */ +#define CONFIGURE_IMFS_DISABLE_LINK + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support making files (no support for :c:func:`mknod`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports making + * files. + */ +#define CONFIGURE_IMFS_DISABLE_MKNOD + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support making device files. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports making + * device files. + */ +#define CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support making regular files. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports making + * regular files. + */ +#define CONFIGURE_IMFS_DISABLE_MKNOD_FILE + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support mounting other filesystems (no support for :c:func:`mount`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports mounting + * other filesystems. + */ +#define CONFIGURE_IMFS_DISABLE_MOUNT + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support reading directories (no support for :c:func:`readdir`). It is + * still possible to open files in a directory. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports reading + * directories. + */ +#define CONFIGURE_IMFS_DISABLE_READDIR + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support reading symbolic links (no support for :c:func:`readlink`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports reading + * symbolic links. + */ +#define CONFIGURE_IMFS_DISABLE_READLINK + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support renaming files (no support for :c:func:`rename`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports renaming + * files. + */ +#define CONFIGURE_IMFS_DISABLE_RENAME + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support removing files (no support for :c:func:`rmnod`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports removing + * files. + */ +#define CONFIGURE_IMFS_DISABLE_RMNOD + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support creating symbolic links (no support for :c:func:`symlink`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports creating + * symbolic links. + */ +#define CONFIGURE_IMFS_DISABLE_SYMLINK + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support unmounting other filesystems (no support for + * :c:func:`unmount`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports + * unmounting other filesystems. + */ +#define CONFIGURE_IMFS_DISABLE_UNMOUNT + +/** + * @brief In case this configuration option is defined, then the root IMFS does + * not support changing file times (no support for :c:func:`utime`). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS supports changing + * file times. + */ +#define CONFIGURE_IMFS_DISABLE_UTIME + +/** + * @brief In case this configuration option is defined, then the root IMFS + * supports making FIFOs. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the root IMFS does not support + * making FIFOs (no support for :c:func:`mkfifo`). + */ +#define CONFIGURE_IMFS_ENABLE_MKFIFO + +/** + * @brief The value of this configuration option defines the block size for + * in-memory files managed by the IMFS. + * + * This configuration option is an integer define. + * + * The default value is 128. + * + * The value of this configuration option shall be an element of {16, 32, 64, 128, + * 256, 512}. + * + * The configured block size has two impacts. The first is the average amount + * of unused memory in the last block of each file. For example, when the + * block size is 512, on average one-half of the last block of each file will + * remain unused and the memory is wasted. In contrast, when the block size is + * 16, the average unused memory per file is only 8 bytes. However, it requires + * more allocations for the same size file and thus more overhead per block for + * the dynamic memory management. + * + * Second, the block size has an impact on the maximum size file that can be + * stored in the IMFS. With smaller block size, the maximum file size is + * correspondingly smaller. The following shows the maximum file size possible + * based on the configured block size: + * + * * when the block size is 16 bytes, the maximum file size is 1,328 bytes. + * + * * when the block size is 32 bytes, the maximum file size is 18,656 bytes. + * + * * when the block size is 64 bytes, the maximum file size is 279,488 bytes. + * + * * when the block size is 128 bytes, the maximum file size is 4,329,344 + * bytes. + * + * * when the block size is 256 bytes, the maximum file size is 68,173,568 + * bytes. + * + * * when the block size is 512 bytes, the maximum file size is 1,082,195,456 + * bytes. + */ +#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK + +/** + * @brief In case this configuration option is defined, then an IMFS with a + * reduced feature set will be the base filesystem (also known as root + * filesystem). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * In case this configuration option is defined, then the following + * configuration options will be defined as well + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_LINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_READDIR`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_READLINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_RENAME`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`. + * + * In addition, a simplified path evaluation is enabled. It allows only a look + * up of absolute paths. + * + * This configuration of the IMFS is basically a device-only filesystem. It is + * comparable in functionality to the pseudo-filesystem name space provided + * before RTEMS release 4.5.0. + */ +#define CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM + +/** + * @brief In case this configuration option is defined, then an IMFS with a + * reduced feature set will be the base filesystem (also known as root + * filesystem). + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * In case this configuration option is defined, then the following + * configuration options will be defined as well + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_LINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_READLINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_RENAME`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`, + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and + * + * * :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`. + */ +#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM + +/** @} */ + +/** + * @defgroup General System Configuration General System Configuration + * + * This section describes general system configuration options. + * + * @{ + */ + +/** + * @brief In case this configuration option is defined, then the memory areas + * used for the RTEMS Workspace and the C Program Heap are dirtied with a + * ``0xCF`` byte pattern during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Dirtying memory can add significantly to system initialization time. It may + * assist in finding code that incorrectly assumes the contents of free memory + * areas is cleared to zero during system initialization. In case + * :ref:`CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY` is also defined, then the + * memory is first dirtied and then zeroed. + * + * See also :ref:`CONFIGURE_MALLOC_DIRTY`. + */ +#define CONFIGURE_DIRTY_MEMORY + +/** + * @brief In case this configuration option is defined, then the Newlib + * reentrancy support per thread is disabled and a global reentrancy + * structure is used. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * You can enable this option to reduce the size of the :term:`TCB`. Use this + * option with care, since it can lead to race conditions and undefined system + * behaviour. For example, :c:data:`errno` is no longer a thread-local + * variable if this option is enabled. + */ +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + +/** + * @brief The value of this configuration option defines the RTEMS Workspace + * size in bytes. + * + * This configuration option is an integer define. + * + * If this configuration option is undefined, then the RTEMS Workspace and task + * stack space size is calculated by ```` based on the values + * configuration options. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to ``UINTPTR_MAX``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * This is an advanced configuration option. Use it only if you know exactly + * what you are doing. + */ +#define CONFIGURE_EXECUTIVE_RAM_SIZE + +/** + * @brief The value of this configuration option defines the number of bytes + * the applications wishes to add to the task stack requirements calculated + * by ````. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * This parameter is very important. If the application creates tasks with + * stacks larger then the minimum, then that memory is **not** accounted for by + * ````. + */ +#define CONFIGURE_EXTRA_TASK_STACKS + +/** + * @brief The value of this configuration option is used to initialize the + * table of initial user extensions. + * + * This configuration option is an initializer define. + * + * The default value is the empty list. + * + * The value of this configuration option shall be a list of initializers for + * structures of type :c:type:`rtems_extensions_table`. + * + * The value of this configuration option is placed before the entries of + * :ref:`BSP_INITIAL_EXTENSION` and after the entries of all other initial user + * extensions. + */ +#define CONFIGURE_INITIAL_EXTENSIONS + +/** + * @brief The value of this configuration option defines the size of an + * interrupt stack in bytes. + * + * This configuration option is an integer define. + * + * The default value is :ref:`BSP_INTERRUPT_STACK_SIZE` in case it is defined, + * otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the interrupt stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be aligned according to ``CPU_INTERRUPT_STACK_ALIGNMENT``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the interrupt stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be aligned according to ``CPU_INTERRUPT_STACK_ALIGNMENT``. + * + * There is one interrupt stack available for each configured processor + * (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). The interrupt stack areas are + * statically allocated in a special linker section + * (``.rtemsstack.interrupt``). The placement of this linker section is + * BSP-specific. + * + * Some BSPs use the interrupt stack as the initialization stack which is used + * to perform the sequential system initialization before the multithreading is + * started. + * + * The interrupt stacks are covered by the :ref:`stack checker + * `. However, using a too small interrupt + * stack size may still result in undefined behaviour. + * + * In releases before RTEMS 5.1 the default value was + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE` instead of + * ``CPU_STACK_MINIMUM_SIZE``. + */ +#define CONFIGURE_INTERRUPT_STACK_SIZE + +/** + * @brief In case this configuration option is defined, then each memory area + * returned by C Program Heap allocator functions such as :c:func:`malloc` is + * dirtied with a ``0xCF`` byte pattern before it is handed over to the + * application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The dirtying performed by this option is carried out for each successful + * memory allocation from the C Program Heap in contrast to + * :ref:`CONFIGURE_DIRTY_MEMORY` which dirties the memory only once during the + * system initialization. + */ +#define CONFIGURE_MALLOC_DIRTY + +/** + * @brief The value of this configuration option defines the maximum number of + * file like objects that can be concurrently open. + * + * This configuration option is an integer define. + * + * The default value is 3. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to ``SIZE_MAX``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * The default value of three file descriptors allows RTEMS to support standard + * input, output, and error I/O streams on ``/dev/console``. + */ +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS + +/** + * @brief The value of this configuration option defines the maximum number of + * processors an application intends to use. The number of actually + * available processors depends on the hardware and may be less. It is + * recommended to use the smallest value suitable for the application in + * order to save memory. Each processor needs an IDLE task stack and + * interrupt stack for example. + * + * This configuration option is an integer define. + * + * The default value is 1. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``CPU_MAXIMUM_PROCESSORS``. + * + * If there are more processors available than configured, the rest will be + * ignored. + * + * This configuration option is only evaluated in SMP configurations (e.g. + * RTEMS was built with the ``--enable-smp`` build configuration option). In + * all other configurations it has no effect. + */ +#define CONFIGURE_MAXIMUM_PROCESSORS + +/** + * @brief The value of this configuration option defines the maximum thread + * name size including the terminating ``NUL`` character. + * + * This configuration option is an integer define. + * + * The default value is 16. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to ``SIZE_MAX``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * The default value was chosen for Linux compatibility, see + * `PTHREAD_SETNAME_NP(3) + * `_. + * + * The size of the thread control block is increased by the maximum thread name + * size. + * + * This configuration option is available since RTEMS 5.1. + */ +#define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE + +/** + * @brief The value of this configuration option defines the number of + * kilobytes the application wishes to add to the RTEMS Workspace size + * calculated by ````. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * This configuration option should only be used when it is suspected that a + * bug in ```` has resulted in an underestimation. Typically + * the memory allocation will be too low when an application does not account + * for all message queue buffers or task stacks, see + * :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`. + */ +#define CONFIGURE_MEMORY_OVERHEAD + +/** + * @brief The value of this configuration option defines the number of bytes + * reserved for message queue buffers in the RTEMS Workspace. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * The configuration options :ref:`CONFIGURE_MAXIMUM_MESSAGE_QUEUES` and + * :ref:`CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES` define only how many message + * queues can be created by the application. The memory for the message + * buffers is configured by this option. For each message queue you have to + * reserve some memory for the message buffers. The size dependes on the + * maximum number of pending messages and the maximum size of the messages of a + * message queue. Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro to + * specify the message buffer memory for each message queue and sum them up to + * define the value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``. + * + * The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro + * is as follows: + * + * .. code-block:: c + * + * CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size ) + * + * Where ``max_messages`` is the maximum number of pending messages and + * ``max_msg_size`` is the maximum size in bytes of the messages of the + * corresponding message queue. Both parameters shall be compile time + * constants. Not using this help macro (e.g. just using ``max_messages * + * max_msg_size``) may result in an underestimate of the RTEMS Workspace size. + * + * The following example illustrates how the + * `CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()` help macro can be used to assist in + * calculating the message buffer memory required. In this example, there are + * two message queues used in this application. The first message queue has a + * maximum of 24 pending messages with the message structure defined by the + * type ``one_message_type``. The other message queue has a maximum of 500 + * pending messages with the message structure defined by the type + * ``other_message_type``. + * + * .. code-block:: c + * + * #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \ + * CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \ 24, \ sizeof( + * one_message_type ) \ ) \ + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( + * \ 500, \ sizeof( other_message_type ) \ ) \ ) + */ +#define CONFIGURE_MESSAGE_BUFFER_MEMORY + +/** + * @brief The value of this configuration option defines the length of time in + * microseconds between clock ticks (clock tick quantum). + * + * @brief When the clock tick quantum value is too low, the system will spend + * so much time processing clock ticks that it does not have processing time + * available to perform application work. In this case, the system will + * become unresponsive. + * + * @brief The lowest practical time quantum varies widely based upon the speed + * of the target hardware and the architectural overhead associated with + * interrupts. In general terms, you do not want to configure it lower than + * is needed for the application. + * + * @brief The clock tick quantum should be selected such that it all blocking + * and delay times in the application are evenly divisible by it. Otherwise, + * rounding errors will be introduced which may negatively impact the + * application. + * + * This configuration option is an integer define. + * + * The default value is 10000. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to a Clock Driver specific value. + * + * * It shall be less than or equal to a Clock Driver specific value. + * + * * The resulting clock ticks per second should be an integer. + * + * This configuration option has no impact if the Clock Driver is not + * configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`. + * + * There may be Clock Driver specific limits on the resolution or maximum value + * of a clock tick quantum. + */ +#define CONFIGURE_MICROSECONDS_PER_TICK + +/** + * @brief The value of this configuration option defines the minimum stack size + * in bytes for every user task or thread in the system. + * + * This configuration option is an integer define. + * + * The default value is ``CPU_STACK_MINIMUM_SIZE``. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * Adjusting this parameter should be done with caution. Examining the actual + * stack usage using the stack checker usage reporting facility is recommended + * (see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED`). + * + * This parameter can be used to lower the minimum from that recommended. This + * can be used in low memory systems to reduce memory consumption for stacks. + * However, this shall be done with caution as it could increase the + * possibility of a blown task stack. + * + * This parameter can be used to increase the minimum from that recommended. + * This can be used in higher memory systems to reduce the risk of stack + * overflow without performing analysis on actual consumption. + * + * By default, this configuration parameter defines also the minimum stack size + * of POSIX threads. This can be changed with the + * :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE` configuration option. + * + * In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was + * used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`. + */ +#define CONFIGURE_MINIMUM_TASK_STACK_SIZE + +/** + * @brief In case this configuration option is defined, then the stack checker + * is enabled. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The stack checker performs run-time stack bounds checking. This increases + * the time required to create tasks as well as adding overhead to each context + * switch. + * + * In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``. + */ +#define CONFIGURE_STACK_CHECKER_ENABLED + +/** + * @brief The value of this configuration option defines the length of the + * timeslice quantum in ticks for each task. + * + * This configuration option is an integer define. + * + * The default value is 50. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * This configuration option has no impact if the Clock Driver is not + * configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`. + */ +#define CONFIGURE_TICKS_PER_TIMESLICE + +/** + * @brief In case this configuration option is defined, then the RTEMS + * Workspace and the C Program Heap will be one pool of memory. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then there will be separate memory + * pools for the RTEMS Workspace and C Program Heap. + * + * Having separate pools does have some advantages in the event a task blows a + * stack or writes outside its memory area. However, in low memory systems the + * overhead of the two pools plus the potential for unused memory in either + * pool is very undesirable. + * + * In high memory environments, this is desirable when you want to use the + * :ref:`ConfigUnlimitedObjects` option. You will be able to create objects + * until you run out of all available memory rather then just until you run out + * of RTEMS Workspace. + */ +#define CONFIGURE_UNIFIED_WORK_AREAS + +/** + * @brief If :ref:`CONFIGURE_UNLIMITED_OBJECTS` is defined, then the value of + * this configuration option defines the default objects maximum of all + * object classes supporting :ref:`ConfigUnlimitedObjects` to + * ``rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)``. + * + * This configuration option is an integer define. + * + * The default value is 8. + * + * The value of this configuration option shall meet the constraints of all object + * classes to which it is applied. + * + * By allowing users to declare all resources as being unlimited the user can + * avoid identifying and limiting the resources used. + * + * The object maximum of each class can be configured also individually using + * the :c:func:`rtems_resource_unlimited` macro. + */ +#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE + +/** + * @brief In case this configuration option is defined, then unlimited objects + * are used by default. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * When using unlimited objects, it is common practice to also specify + * :ref:`CONFIGURE_UNIFIED_WORK_AREAS` so the system operates with a single + * pool of memory for both RTEMS Workspace and C Program Heap. + * + * This option does not override an explicit configuration for a particular + * object class by the user. + * + * See also :ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`. + */ +#define CONFIGURE_UNLIMITED_OBJECTS + +/** + * @brief In case this configuration option is defined, then the system + * initialization is verbose. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * You may use this feature to debug system initialization issues. The + * :c:func:`printk` function is used to print the information. + */ +#define CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION + +/** + * @brief In case this configuration option is defined, then the memory areas + * used for the RTEMS Workspace and the C Program Heap are zeroed with a + * ``0x00`` byte pattern during system initialization. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * Zeroing memory can add significantly to the system initialization time. It + * is not necessary for RTEMS but is often assumed by support libraries. In + * case :ref:`CONFIGURE_DIRTY_MEMORY` is also defined, then the memory is first + * dirtied and then zeroed. + */ +#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY + +/** @} */ + +/** + * @defgroup Idle Task Configuration Idle Task Configuration + * + * This section describes configuration options related to the idle tasks. + * + * @{ + */ + +/** + * @brief The value of this configuration option initializes the IDLE thread + * body. + * + * This configuration option is an initializer define. + * + * If :ref:`BSP_IDLE_TASK_BODY` is defined, then this will be the default value, + * otherwise the default value is ``_CPU_Thread_Idle_body``. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void *( *idle_body )( uintptr_t )``. + * + * IDLE threads shall not block. A blocking IDLE thread results in undefined + * system behaviour because the scheduler assume that at least one ready thread + * exists. + * + * IDLE threads can be used to initialize the application, see configuration + * option :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`. + */ +#define CONFIGURE_IDLE_TASK_BODY + +/** + * @brief This configuration option is defined to indicate that the user has + * configured **no** user initialization tasks or threads and that the user + * provided IDLE task will perform application initialization and then + * transform itself into an IDLE task. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the user is assumed to provide + * one or more initialization tasks. + * + * If you use this option be careful, the user IDLE task **cannot** block at + * all during the initialization sequence. Further, once application + * initialization is complete, it shall make itself preemptible and enter an + * idle body loop. + * + * The IDLE task shall run at the lowest priority of all tasks in the system. + * + * If this configuration option is defined, then it is mandatory to configure a + * user IDLE task with the :ref:`CONFIGURE_IDLE_TASK_BODY` configuration + * option, otherwise a compile time error in the configuration file will occur. + * + * The application shall define exactly one of the following configuration + * options + * + * * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`, + * + * * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or + * + * * `CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION` + * + * otherwise a compile time error in the configuration file will occur. + */ +#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION + +/** + * @brief The value of this configuration option defines the task stack size + * for an IDLE task. + * + * This configuration option is an integer define. + * + * The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the IDLE task stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the IDLE task stack area calculation carried + * out by ```` does not overflow an integer of type + * ``size_t``. + * + * In SMP configurations, there is one IDLE task per configured processor, see + * :ref:`CONFIGURE_MAXIMUM_PROCESSORS`. + */ +#define CONFIGURE_IDLE_TASK_STACK_SIZE + +/** @} */ + +/** + * @defgroup Multiprocessing Configuration Multiprocessing Configuration + * + * This section describes multiprocessing related configuration options. The + * options are only used if RTEMS was built with the + * ``--enable-multiprocessing`` build configuration option. Additionally, this + * class of configuration options are only applicable if the configuration + * option :ref:`CONFIGURE_MP_APPLICATION` is defined. The multiprocessing + * (MPCI) support must not be confused with the SMP support. + * + * @{ + */ + +/** + * @brief This configuration option is defined to indicate that the application + * intends to be part of a multiprocessing configuration. Additional + * configuration options are assumed to be provided. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the multiprocessing services + * are not initialized. + * + * This configuration option shall be undefined if the multiprocessing support + * is not enabled (e.g. RTEMS was built without the + * ``--enable-multiprocessing`` build configuration option). Otherwise a + * compile time error in the configuration file will occur. + */ +#define CONFIGURE_MP_APPLICATION + +/** + * @brief The value of this configuration option defines the number of bytes + * the applications wishes to add to the MPCI task stack on top of + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to ``UINT32_MAX``. + * + * * It shall be small enough so that the MPCI receive server stack area + * calculation carried out by ```` does not overflow an + * integer of type ``size_t``. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK + +/** + * @brief The value of this configuration option defines the maximum number of + * concurrently active global objects in a multiprocessor system. + * + * This configuration option is an integer define. + * + * The default value is 32. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * This value corresponds to the total number of objects which can be created + * with the ``RTEMS_GLOBAL`` attribute. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS + +/** + * @brief The value of this configuration option defines the maximum number of + * nodes in a multiprocessor system. + * + * This configuration option is an integer define. + * + * The default value is 2. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_MP_MAXIMUM_NODES + +/** + * @brief The value of this configuration option defines the maximum number of + * concurrently active thread/task proxies on this node in a multiprocessor + * system. + * + * This configuration option is an integer define. + * + * The default value is 32. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * Since a proxy is used to represent a remote task/thread which is blocking on + * this node. This configuration parameter reflects the maximum number of + * remote tasks/threads which can be blocked on objects on this node, see + * :ref:`MPCIProxies`. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_MP_MAXIMUM_PROXIES + +/** + * @brief The value of this configuration option initializes the MPCI + * Configuration Table. + * + * This configuration option is an initializer define. + * + * The default value is ``&MPCI_table``. + * + * The value of this configuration option shall be a pointer to + * :c:type:`rtems_mpci_table`. + * + * RTEMS provides a Shared Memory MPCI Device Driver which can be used on any + * Multiprocessor System assuming the BSP provides the proper set of supporting + * methods. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_MP_MPCI_TABLE_POINTER + +/** + * @brief The value of this configuration option defines the node number of + * this node in a multiprocessor system. + * + * This configuration option is an integer define. + * + * The default value is ``NODE_NUMBER``. + * + * The value of this configuration option shall be greater than or equal to 0 and + * less than or equal to ``UINT32_MAX``. + * + * In the RTEMS Multiprocessing Test Suite, the node number is derived from the + * Makefile variable ``NODE_NUMBER``. The same code is compiled with the + * ``NODE_NUMBER`` set to different values. The test programs behave + * differently based upon their node number. + * + * This configuration option is only evaluated if + * :ref:`CONFIGURE_MP_APPLICATION` is defined. + */ +#define CONFIGURE_MP_NODE_NUMBER + +/** @} */ + +/** + * @defgroup POSIX API Configuration POSIX API Configuration + * + * This section describes configuration options related to the POSIX API. Most + * POSIX API objects are available by default since RTEMS 5.1. The queued + * signals and timers are only available if RTEMS was built with the + * ``--enable-posix`` build configuration option. + * + * @{ + */ + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Keys that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_POSIX_KEYS + +/** + * @brief The value of this configuration option defines the maximum number of + * key value pairs used by POSIX API Keys that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS` * + * :ref:`CONFIGURE_MAXIMUM_TASKS` + :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * A key value pair is created by :c:func:`pthread_setspecific` if the value is + * not :c:macro:`NULL`, otherwise it is deleted. + */ +#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Message Queues that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to + * store the messages of each message queue, see + * :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`. + */ +#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Queued Signals that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built + * without the ``--enable-posix`` build configuration option). Otherwise a + * compile time error in the configuration file will occur. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built + * without the ``--enable-posix`` build configuration option). Otherwise a + * compile time error in the configuration file will occur. + * + * Unlimited objects are not available for queued signals. + * + * Queued signals are only available if RTEMS was built with the + * ``--enable-posix`` build configuration option. + */ +#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Named Semaphores that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * Named semaphores are created with :c:func:`sem_open()`. Semaphores + * initialized with :c:func:`sem_init()` are not affected by this configuration + * option since the storage space for these semaphores is user-provided. + */ +#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Shared Memory objects that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the RTEMS Workspace size calculation carried + * out by ```` does not overflow an integer of type + * ``uintptr_t``. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + */ +#define CONFIGURE_MAXIMUM_POSIX_SHMS + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Threads that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * This calculations for the required memory in the RTEMS Workspace for threads + * assume that each thread has a minimum stack size and has floating point + * support enabled. The configuration option + * :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used to specify thread stack + * requirements **above** the minimum size required. See :ref:`Reserve + * Task/Thread Stack Memory Above Minimum` for more information about + * ``CONFIGURE_EXTRA_TASK_STACKS``. + * + * The maximum number of Classic API Tasks is specified by + * :ref:`CONFIGURE_MAXIMUM_TASKS`. + * + * All POSIX threads have floating point enabled. + */ +#define CONFIGURE_MAXIMUM_POSIX_THREADS + +/** + * @brief The value of this configuration option defines the maximum number of + * POSIX API Timers that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is 0. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to 65535. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built + * without the ``--enable-posix`` build configuration option). Otherwise a + * compile time error in the configuration file will occur. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It may be defined through :c:func:`rtems_resource_unlimited` the enable + * unlimited objects for this object class, if the value passed to + * :c:func:`rtems_resource_unlimited` satisfies all other constraints of this + * configuration option. + * + * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built + * without the ``--enable-posix`` build configuration option). Otherwise a + * compile time error in the configuration file will occur. + * + * This object class can be configured in unlimited allocation mode, see + * :ref:`ConfigUnlimitedObjects`. + * + * Timers are only available if RTEMS was built with the ``--enable-posix`` + * build configuration option. + */ +#define CONFIGURE_MAXIMUM_POSIX_TIMERS + +/** + * @brief The value of this configuration option defines the minimum stack size + * in bytes for every POSIX thread in the system. + * + * This configuration option is an integer define. + * + * The default value is two times the value of + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be greater than or equal to a BSP-specific and application-specific + * minimum value. + */ +#define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE + +/** @} */ + +/** + * @defgroup POSIX Initialization Thread Configuration POSIX Initialization Thread Configuration + * + * This section describes configuration options related to the POSIX + * initialization thread. + * + * @{ + */ + +/** + * @brief The value of this configuration option initializes the entry point of + * the POSIX API initialization thread. + * + * This configuration option is an initializer define. + * + * The default value is ``POSIX_Init``. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void *( *entry_point )( void * )``. + * + * The application shall provide the function referenced by this configuration + * option. + */ +#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT + +/** + * @brief The value of this configuration option defines the thread stack size + * of the POSIX API initialization thread. + * + * This configuration option is an integer define. + * + * The default value is :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to + * :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + * + * * It shall be small enough so that the task stack space calculation carried out + * by ```` does not overflow an integer of type ``uintptr_t``. + */ +#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE + +/** + * @brief In case this configuration option is defined, then exactly one POSIX + * initialization thread is configured. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * The application shall define exactly one of the following configuration + * options + * + * * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`, + * + * * `CONFIGURE_POSIX_INIT_THREAD_TABLE`, or + * + * * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION` + * + * otherwise a compile time error in the configuration file will occur. + */ +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +/** @} */ + +/** + * @defgroup General Scheduler Configuration General Scheduler Configuration + * + * This section describes configuration options related to selecting a + * scheduling algorithm for an application. A scheduler configuration is + * optional and only necessary in very specific circumstances. A normal + * application configuration does not need any of the configuration options + * described in this section. + * + * By default, the :ref:`Deterministic Priority Scheduler ` + * algorithm is used in uniprocessor configurations. In case SMP is enabled + * and the configured maximum processors (:ref:`CONFIGURE_MAXIMUM_PROCESSORS + * `) is greater than one, then the + * :ref:`Earliest Deadline First (EDF) SMP Scheduler ` is + * selected as the default scheduler algorithm. + * + * For the :ref:`schedulers built into RTEMS `, the + * configuration is straightforward. All that is required is to define the + * configuration option which specifies which scheduler you want for in your + * application. + * + * The pluggable scheduler interface also enables the user to provide their own + * scheduling algorithm. If you choose to do this, you must define multiple + * configuration option. + * + * @{ + */ + +/** + * @brief The value of this configuration option defines the maximum number + * Constant Bandwidth Servers that can be concurrently active. + * + * This configuration option is an integer define. + * + * The default value is :ref:`CONFIGURE_MAXIMUM_TASKS`. + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be greater than or equal to 0. + * + * * It shall be less than or equal to ``SIZE_MAX``. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * * It shall be less than or equal to a BSP-specific and application-specific + * value which depends on the size of the memory available to the application. + * + * This configuration option is only evaluated if the configuration option + * :ref:`CONFIGURE_SCHEDULER_CBS` is defined. + */ +#define CONFIGURE_CBS_MAXIMUM_SERVERS + +/** + * @brief For the following schedulers + * + * @brief * :ref:`SchedulerPriority`, which is the default in uniprocessor + * configurations and can be configured through the + * :ref:`CONFIGURE_SCHEDULER_PRIORITY` configuration option, + * + * @brief * :ref:`SchedulerSMPPriority` which can be configured through the + * :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP` configuration option, and + * + * @brief * :ref:`SchedulerSMPPriorityAffinity` which can be configured through + * the :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP` configuration + * option + * + * @brief this configuration option specifies the maximum numeric priority of + * any task for these schedulers and one less that the number of priority + * levels for these schedulers. For all other schedulers provided by RTEMS, + * this configuration option has no effect. + * + * This configuration option is an integer define. + * + * The default value is 255. + * + * The value of this configuration option shall be an element of {3, 7, 31, 63, + * 127, 255}. + * + * The numerically greatest priority is the logically lowest priority in the + * system and will thus be used by the IDLE task. + * + * Priority zero is reserved for internal use by RTEMS and is not available to + * applications. + * + * Reducing the number of priorities through this configuration option reduces + * the amount of memory allocated by the schedulers listed above. These + * schedulers use a chain control structure per priority and this structure + * consists of three pointers. On a 32-bit architecture, the allocated memory + * is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256 + * priority levels (default), 48 bytes for 4 priority levels + * (``CONFIGURE_MAXIMUM_PRIORITY == 3``). + * + * The default value is 255, because RTEMS shall support 256 priority levels to + * be compliant with various standards. These priorities range from 0 to 255. + */ +#define CONFIGURE_MAXIMUM_PRIORITY + +/** + * @brief The value of this configuration option is used to initialize the + * initial scheduler to processor assignments. + * + * This configuration option is an initializer define. + * + * The default value of this configuration option is computed so that the default + * scheduler is assigned to each configured processor (up to 32). + * + * The value of this configuration option shall satisfy all of the following + * constraints: + * + * * It shall be a list of the following macros: + * + * * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )`` + * + * * :c:macro:`RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER` + * + * * It shall be a list of exactly :ref:`CONFIGURE_MAXIMUM_PROCESSORS` elements. + * + * This configuration option is only evaluated in SMP configurations. + * + * This is an advanced configuration option, see + * :ref:`ConfigurationSchedulersClustered`. + */ +#define CONFIGURE_SCHEDULER_ASSIGNMENTS + +/** + * @brief In case this configuration option is defined, then :ref:`Constant + * Bandwidth Server (CBS) Scheduler ` algorithm is made + * available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for exactly one processor. + */ +#define CONFIGURE_SCHEDULER_CBS + +/** + * @brief In case this configuration option is defined, then :ref:`Earliest + * Deadline First (EDF) Scheduler ` algorithm is made available + * to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for exactly one processor. + */ +#define CONFIGURE_SCHEDULER_EDF + +/** + * @brief In case this configuration option is defined, then :ref:`Earliest + * Deadline First (EDF) SMP Scheduler ` algorithm is made + * available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * This scheduler algorithm is only available when RTEMS is built with SMP + * support enabled. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for up to 32 processors. + * + * This scheduler algorithm is the default in SMP configurations if + * :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is greater than one. + */ +#define CONFIGURE_SCHEDULER_EDF_SMP + +/** + * @brief The value of this configuration option defines the name of the + * default scheduler. + * + * This configuration option is an integer define. + * + * The default value is + * + * * ``"MEDF"`` for the :ref:`EDF SMP Scheduler `, + * + * * ``"MPA "`` for the :ref:`Arbitrary Processor Affinity Priority SMP Scheduler + * `, + * + * * ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler + * `, + * + * * ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler + * `, + * + * * ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler `, + * + * * ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler `, + * + * * ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler + * `, and + * + * * ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler + * `. + * + * The value of this configuration option shall be a valid integer of type + * ``rtems_name``. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * Schedulers can be identified via c:func:`rtems_scheduler_ident`. + * + * Use :c:func:`rtems_build_name` to define the scheduler name. + */ +#define CONFIGURE_SCHEDULER_NAME + +/** + * @brief In case this configuration option is defined, then + * :ref:`Deterministic Priority Scheduler ` algorithm is + * made available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for exactly one processor. + * + * This scheduler algorithm is the default when + * :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is exactly one. + * + * The memory allocated for this scheduler depends on the + * :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option. + */ +#define CONFIGURE_SCHEDULER_PRIORITY + +/** + * @brief In case this configuration option is defined, then :ref:`Arbitrary + * Processor Affinity SMP Scheduler ` algorithm + * is made available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * This scheduler algorithm is only available when RTEMS is built with SMP + * support enabled. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for up to 32 processors. + * + * The memory allocated for this scheduler depends on the + * :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option. + */ +#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP + +/** + * @brief In case this configuration option is defined, then + * :ref:`Deterministic Priority SMP Scheduler ` + * algorithm is made available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * This scheduler algorithm is only available when RTEMS is built with SMP + * support enabled. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for up to 32 processors. + * + * The memory allocated for this scheduler depends on the + * :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option. + */ +#define CONFIGURE_SCHEDULER_PRIORITY_SMP + +/** + * @brief In case this configuration option is defined, then :ref:`Simple + * Priority Scheduler ` algorithm is made available + * to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for exactly one processor. + */ +#define CONFIGURE_SCHEDULER_SIMPLE + +/** + * @brief In case this configuration option is defined, then :ref:`Simple + * Priority SMP Scheduler ` algorithm is made + * available to the application. application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * This scheduler algorithm is only available when RTEMS is built with SMP + * support enabled. + * + * In case no explicit :ref:`clustered scheduler configuration + * ` is present, then it is used as the + * scheduler for up to 32 processors. + */ +#define CONFIGURE_SCHEDULER_SIMPLE_SMP + +/** + * @brief In case this configuration option is defined, then Strong APA + * algorithm is made available to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * This scheduler algorithm is only available when RTEMS is built with SMP + * support enabled. + * + * This scheduler algorithm is not correctly implemented. Do not use it. + */ +#define CONFIGURE_SCHEDULER_STRONG_APA + +/** + * @brief In case this configuration option is defined, then the user shall + * provide a scheduler algorithm to the application. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This scheduler configuration option is an advanced configuration option. + * Think twice before you use it. + * + * RTEMS allows the application to provide its own task/thread scheduling + * algorithm. In order to do this, one shall define + * ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own + * scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the + * following additional macros shall be defined: + * + * * ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of the + * scheduler data structures of the user scheduler. + * + * * ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler + * table entry initializer for the user scheduler. + * + * * ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of + * the per-thread information of the user scheduler. + * + * At this time, the mechanics and requirements for writing a new scheduler are + * evolving and not fully documented. It is recommended that you look at the + * existing Deterministic Priority Scheduler in + * ``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on the + * configuration macros, please examine ``cpukit/sapi/include/confdefs.h`` for + * how these are defined for the Deterministic Priority Scheduler. + */ +#define CONFIGURE_SCHEDULER_USER + +/** @} */ + +/** + * @defgroup Task Stack Allocator Configuration Task Stack Allocator Configuration + * + * This section describes configuration options related to the task stack + * allocator. RTEMS allows the application or BSP to define its own allocation + * and deallocation methods for task stacks. This can be used to place task + * stacks in special areas of memory or to utilize a Memory Management Unit so + * that stack overflows are detected in hardware. + * + * @{ + */ + +/** + * @brief The value of this configuration option initializes the stack + * allocator allocate handler. + * + * This configuration option is an initializer define. + * + * The default value is ``_Workspace_Allocate``, which indicates that task stacks + * will be allocated from the RTEMS Workspace. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void *( *allocate )( size_t )``. + * + * A correctly configured system shall configure the following to be + * consistent: + * + * * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT` + * + * * `CONFIGURE_TASK_STACK_ALLOCATOR` + * + * * :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR` + */ +#define CONFIGURE_TASK_STACK_ALLOCATOR + +/** + * @brief The value of this configuration option initializes the stack + * allocator initialization handler. + * + * This configuration option is an initializer define. + * + * The default value is ``NULL``. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void ( *initialize )( size_t )`` or to ``NULL``. + * + * A correctly configured system shall configure the following to be + * consistent: + * + * * `CONFIGURE_TASK_STACK_ALLOCATOR_INIT` + * + * * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR` + * + * * :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR` + */ +#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT + +/** + * @brief The value of this configuration option initializes the stack + * allocator deallocate handler. + * + * This configuration option is an initializer define. + * + * The default value is ``_Workspace_Free``, which indicates that task stacks will + * be allocated from the RTEMS Workspace. + * + * The value of this configuration option shall be defined to a valid function + * pointer of the type ``void ( *deallocate )( void * )``. + * + * A correctly configured system shall configure the following to be + * consistent: + * + * * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT` + * + * * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR` + * + * * `CONFIGURE_TASK_STACK_DEALLOCATOR` + */ +#define CONFIGURE_TASK_STACK_DEALLOCATOR + +/** + * @brief The value of this configuration option is used to calculate the task + * stack space size. + * + * This configuration option is an initializer define. + * + * The default value is a macro which supports the system heap allocator. + * + * The value of this configuration option shall be defined to a macro which + * accepts exactly one parameter and returns an unsigned integer. The parameter + * will be an allocation size and the macro shall return this size plus the + * overhead of the allocator to manage an allocation request for this size. + * + * This configuration option may be used if a custom task stack allocator is + * configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`. + */ +#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR + +/** + * @brief In case this configuration option is defined, then the system is + * informed that the task stack allocator does not use the RTEMS Workspace. + * + * This configuration option is a boolean feature define. + * + * If this configuration option is undefined, then the described feature is not + * enabled. + * + * This configuration option may be used if a custom task stack allocator is + * configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`. + */ +#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE + +/** @} */ diff --git a/cpukit/include/rtems/test-info.h b/cpukit/include/rtems/test-info.h new file mode 100644 index 0000000000..873b8482af --- /dev/null +++ b/cpukit/include/rtems/test-info.h @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef _RTEMS_TEST_H +#define _RTEMS_TEST_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @defgroup RTEMSTest Test Support + * + * @ingroup RTEMSAPI + * + * @brief Test support functions. + * + * @{ + */ + +/** + * @brief Each test must define a test name string. + */ +extern const char rtems_test_name[]; + +/** + * @brief Each test must define a printer. + */ +extern rtems_printer rtems_test_printer; + +/** + * @brief Fatal extension for tests. + */ +void rtems_test_fatal_extension( + rtems_fatal_source source, + bool always_set_to_false, + rtems_fatal_code code +); + +/** + * @brief Initial extension for tests. + */ +#define RTEMS_TEST_INITIAL_EXTENSION \ + { NULL, NULL, NULL, NULL, NULL, NULL, NULL, rtems_test_fatal_extension } + +/** + * @brief Test states. + */ +typedef enum +{ + RTEMS_TEST_STATE_PASS, + RTEMS_TEST_STATE_FAIL, + RTEMS_TEST_STATE_USER_INPUT, + RTEMS_TEST_STATE_INDETERMINATE, + RTEMS_TEST_STATE_BENCHMARK +} RTEMS_TEST_STATE; + +#if (TEST_STATE_EXPECTED_FAIL && TEST_STATE_USER_INPUT) || \ + (TEST_STATE_EXPECTED_FAIL && TEST_STATE_INDETERMINATE) || \ + (TEST_STATE_EXPECTED_FAIL && TEST_STATE_BENCHMARK) || \ + (TEST_STATE_USER_INPUT && TEST_STATE_INDETERMINATE) || \ + (TEST_STATE_USER_INPUT && TEST_STATE_BENCHMARK) || \ + (TEST_STATE_INDETERMINATE && TEST_STATE_BENCHMARK) + #error Test states must be unique +#endif + +#if TEST_STATE_EXPECTED_FAIL + #define TEST_STATE RTEMS_TEST_STATE_FAIL +#elif TEST_STATE_USER_INPUT + #define TEST_STATE RTEMS_TEST_STATE_USER_INPUT +#elif TEST_STATE_INDETERMINATE + #define TEST_STATE RTEMS_TEST_STATE_INDETERMINATE +#elif TEST_STATE_BENCHMARK + #define TEST_STATE RTEMS_TEST_STATE_BENCHMARK +#else + #define TEST_STATE RTEMS_TEST_STATE_PASS +#endif + +/** + * @brief Prints a begin of test message using printf(). + * + * @returns As specified by printf(). + */ +int rtems_test_begin(const char* name, const RTEMS_TEST_STATE state); + +/** + * @brief Prints an end of test message using printf(). + * + * @returns As specified by printf(). + */ +int rtems_test_end(const char* name); + +/** + * @brief Exit the test without calling exit() since it closes stdin, etc and + * pulls in stdio code + */ +void rtems_test_exit(int status) RTEMS_NO_RETURN; + +/** + * @brief Prints via the RTEMS printer. + * + * @returns As specified by printf(). + */ +int rtems_test_printf(const char* format, ...) RTEMS_PRINTFLIKE(1, 2); + +#define RTEMS_TEST_PARALLEL_PROCESSOR_MAX 32 + +typedef struct rtems_test_parallel_job rtems_test_parallel_job; + +/** + * @brief Internal context for parallel job execution. + */ +typedef struct { + Atomic_Ulong stop; + SMP_barrier_Control barrier; + size_t worker_count; + rtems_id worker_ids[RTEMS_TEST_PARALLEL_PROCESSOR_MAX]; + rtems_id stop_worker_timer_id; + const struct rtems_test_parallel_job *jobs; + size_t job_count; +} rtems_test_parallel_context; + +/** + * @brief Worker task setup handler. + * + * Called during rtems_test_parallel() to optionally setup a worker task before + * it is started. + * + * @param[in] ctx The parallel context. + * @param[in] worker_index The worker index. + * @param[in] worker_id The worker task identifier. + */ +typedef void (*rtems_test_parallel_worker_setup)( + rtems_test_parallel_context *ctx, + size_t worker_index, + rtems_id worker_id +); + +/** + * @brief Basic parallel job description. + */ +struct rtems_test_parallel_job { + /** + * @brief Job initialization handler. + * + * This handler executes only in the context of the master worker before the + * job body handler. + * + * @param[in] ctx The parallel context. + * @param[in] arg The user specified argument. + * @param[in] active_workers Count of active workers. Depends on the cascade + * option. + * + * @return The desired job body execution time in clock ticks. See + * rtems_test_parallel_stop_job(). + */ + rtems_interval (*init)( + rtems_test_parallel_context *ctx, + void *arg, + size_t active_workers + ); + + /** + * @brief Job body handler. + * + * @param[in] ctx The parallel context. + * @param[in] arg The user specified argument. + * @param[in] active_workers Count of active workers. Depends on the cascade + * option. + * @param[in] worker_index The worker index. It ranges from 0 to the + * processor count minus one. + */ + void (*body)( + rtems_test_parallel_context *ctx, + void *arg, + size_t active_workers, + size_t worker_index + ); + + /** + * @brief Job finalization handler. + * + * This handler executes only in the context of the master worker after the + * job body handler. + * + * @param[in] ctx The parallel context. + * @param[in] arg The user specified argument. + * @param[in] active_workers Count of active workers. Depends on the cascade + * option. + */ + void (*fini)( + rtems_test_parallel_context *ctx, + void *arg, + size_t active_workers + ); + + /** + * @brief Job specific argument. + */ + void *arg; + + /** + * @brief Job cascading flag. + * + * This flag indicates whether the job should be executed in a cascaded + * manner (the job is executed on one processor first, two processors + * afterwards and incremented step by step until all processors are used). + */ + bool cascade; +}; + +/** + * @brief Indicates if a job body should stop its work loop. + * + * @param[in] ctx The parallel context. + * + * @retval true The job body should stop its work loop and return to the caller. + * @retval false Otherwise. + */ +static inline bool rtems_test_parallel_stop_job( + const rtems_test_parallel_context *ctx +) +{ + return _Atomic_Load_ulong(&ctx->stop, ATOMIC_ORDER_RELAXED) != 0; +} + +/** + * @brief Indicates if a worker is the master worker. + * + * The master worker is the thread that called rtems_test_parallel(). + * + * @param[in] worker_index The worker index. + * + * @retval true This is the master worker. + * @retval false Otherwise. + */ +static inline bool rtems_test_parallel_is_master_worker(size_t worker_index) +{ + return worker_index == 0; +} + +/** + * @brief Returns the task identifier for a worker. + * + * @param[in] ctx The parallel context. + * @param[in] worker_index The worker index. + * + * @return The task identifier of the worker. + */ +static inline rtems_id rtems_test_parallel_get_task_id( + const rtems_test_parallel_context *ctx, + size_t worker_index +) +{ + return ctx->worker_ids[worker_index]; +} + +/** + * @brief Runs a bunch of jobs in parallel on all processors of the system. + * + * The worker tasks inherit the priority of the executing task. + * + * There are SMP barriers before and after the job body. + * + * @param[in] ctx The parallel context. + * @param[in] worker_setup Optional handler to setup a worker task before it is + * started. + * @param[in] jobs The table of jobs. + * @param[in] job_count The count of jobs in the job table. + */ +void rtems_test_parallel( + rtems_test_parallel_context *ctx, + rtems_test_parallel_worker_setup worker_setup, + const rtems_test_parallel_job *jobs, + size_t job_count +); + +/** + * @brief Performs a busy loop for the specified seconds and nanoseconds based + * on the CPU usage of the executing thread. + * + * This function continuously reads the CPU usage of the executing thread. + * This operation may lead to a scheduler instance lock contention in SMP + * configurations. + * + * @param[in] seconds The busy seconds. + * @param[in] nanoseconds The busy nanoseconds. + */ +void rtems_test_busy_cpu_usage(time_t seconds, long nanoseconds); + +/** + * @brief Performs a busy loop with the specified iteration count. + * + * This function is optimized to not perform memory accesses and should have a + * small jitter. + * + * @param[in] count The iteration count. + */ +void rtems_test_busy(uint_fast32_t count); + +/** + * @brief Returns a count value for rtems_test_busy() which yields roughly a + * duration of one clock tick. + */ +uint_fast32_t rtems_test_get_one_tick_busy_count(void); + +/** @} */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _RTEMS_TEST_H */ diff --git a/cpukit/include/rtems/test.h b/cpukit/include/rtems/test.h deleted file mode 100644 index 873b8482af..0000000000 --- a/cpukit/include/rtems/test.h +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifndef _RTEMS_TEST_H -#define _RTEMS_TEST_H - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * @defgroup RTEMSTest Test Support - * - * @ingroup RTEMSAPI - * - * @brief Test support functions. - * - * @{ - */ - -/** - * @brief Each test must define a test name string. - */ -extern const char rtems_test_name[]; - -/** - * @brief Each test must define a printer. - */ -extern rtems_printer rtems_test_printer; - -/** - * @brief Fatal extension for tests. - */ -void rtems_test_fatal_extension( - rtems_fatal_source source, - bool always_set_to_false, - rtems_fatal_code code -); - -/** - * @brief Initial extension for tests. - */ -#define RTEMS_TEST_INITIAL_EXTENSION \ - { NULL, NULL, NULL, NULL, NULL, NULL, NULL, rtems_test_fatal_extension } - -/** - * @brief Test states. - */ -typedef enum -{ - RTEMS_TEST_STATE_PASS, - RTEMS_TEST_STATE_FAIL, - RTEMS_TEST_STATE_USER_INPUT, - RTEMS_TEST_STATE_INDETERMINATE, - RTEMS_TEST_STATE_BENCHMARK -} RTEMS_TEST_STATE; - -#if (TEST_STATE_EXPECTED_FAIL && TEST_STATE_USER_INPUT) || \ - (TEST_STATE_EXPECTED_FAIL && TEST_STATE_INDETERMINATE) || \ - (TEST_STATE_EXPECTED_FAIL && TEST_STATE_BENCHMARK) || \ - (TEST_STATE_USER_INPUT && TEST_STATE_INDETERMINATE) || \ - (TEST_STATE_USER_INPUT && TEST_STATE_BENCHMARK) || \ - (TEST_STATE_INDETERMINATE && TEST_STATE_BENCHMARK) - #error Test states must be unique -#endif - -#if TEST_STATE_EXPECTED_FAIL - #define TEST_STATE RTEMS_TEST_STATE_FAIL -#elif TEST_STATE_USER_INPUT - #define TEST_STATE RTEMS_TEST_STATE_USER_INPUT -#elif TEST_STATE_INDETERMINATE - #define TEST_STATE RTEMS_TEST_STATE_INDETERMINATE -#elif TEST_STATE_BENCHMARK - #define TEST_STATE RTEMS_TEST_STATE_BENCHMARK -#else - #define TEST_STATE RTEMS_TEST_STATE_PASS -#endif - -/** - * @brief Prints a begin of test message using printf(). - * - * @returns As specified by printf(). - */ -int rtems_test_begin(const char* name, const RTEMS_TEST_STATE state); - -/** - * @brief Prints an end of test message using printf(). - * - * @returns As specified by printf(). - */ -int rtems_test_end(const char* name); - -/** - * @brief Exit the test without calling exit() since it closes stdin, etc and - * pulls in stdio code - */ -void rtems_test_exit(int status) RTEMS_NO_RETURN; - -/** - * @brief Prints via the RTEMS printer. - * - * @returns As specified by printf(). - */ -int rtems_test_printf(const char* format, ...) RTEMS_PRINTFLIKE(1, 2); - -#define RTEMS_TEST_PARALLEL_PROCESSOR_MAX 32 - -typedef struct rtems_test_parallel_job rtems_test_parallel_job; - -/** - * @brief Internal context for parallel job execution. - */ -typedef struct { - Atomic_Ulong stop; - SMP_barrier_Control barrier; - size_t worker_count; - rtems_id worker_ids[RTEMS_TEST_PARALLEL_PROCESSOR_MAX]; - rtems_id stop_worker_timer_id; - const struct rtems_test_parallel_job *jobs; - size_t job_count; -} rtems_test_parallel_context; - -/** - * @brief Worker task setup handler. - * - * Called during rtems_test_parallel() to optionally setup a worker task before - * it is started. - * - * @param[in] ctx The parallel context. - * @param[in] worker_index The worker index. - * @param[in] worker_id The worker task identifier. - */ -typedef void (*rtems_test_parallel_worker_setup)( - rtems_test_parallel_context *ctx, - size_t worker_index, - rtems_id worker_id -); - -/** - * @brief Basic parallel job description. - */ -struct rtems_test_parallel_job { - /** - * @brief Job initialization handler. - * - * This handler executes only in the context of the master worker before the - * job body handler. - * - * @param[in] ctx The parallel context. - * @param[in] arg The user specified argument. - * @param[in] active_workers Count of active workers. Depends on the cascade - * option. - * - * @return The desired job body execution time in clock ticks. See - * rtems_test_parallel_stop_job(). - */ - rtems_interval (*init)( - rtems_test_parallel_context *ctx, - void *arg, - size_t active_workers - ); - - /** - * @brief Job body handler. - * - * @param[in] ctx The parallel context. - * @param[in] arg The user specified argument. - * @param[in] active_workers Count of active workers. Depends on the cascade - * option. - * @param[in] worker_index The worker index. It ranges from 0 to the - * processor count minus one. - */ - void (*body)( - rtems_test_parallel_context *ctx, - void *arg, - size_t active_workers, - size_t worker_index - ); - - /** - * @brief Job finalization handler. - * - * This handler executes only in the context of the master worker after the - * job body handler. - * - * @param[in] ctx The parallel context. - * @param[in] arg The user specified argument. - * @param[in] active_workers Count of active workers. Depends on the cascade - * option. - */ - void (*fini)( - rtems_test_parallel_context *ctx, - void *arg, - size_t active_workers - ); - - /** - * @brief Job specific argument. - */ - void *arg; - - /** - * @brief Job cascading flag. - * - * This flag indicates whether the job should be executed in a cascaded - * manner (the job is executed on one processor first, two processors - * afterwards and incremented step by step until all processors are used). - */ - bool cascade; -}; - -/** - * @brief Indicates if a job body should stop its work loop. - * - * @param[in] ctx The parallel context. - * - * @retval true The job body should stop its work loop and return to the caller. - * @retval false Otherwise. - */ -static inline bool rtems_test_parallel_stop_job( - const rtems_test_parallel_context *ctx -) -{ - return _Atomic_Load_ulong(&ctx->stop, ATOMIC_ORDER_RELAXED) != 0; -} - -/** - * @brief Indicates if a worker is the master worker. - * - * The master worker is the thread that called rtems_test_parallel(). - * - * @param[in] worker_index The worker index. - * - * @retval true This is the master worker. - * @retval false Otherwise. - */ -static inline bool rtems_test_parallel_is_master_worker(size_t worker_index) -{ - return worker_index == 0; -} - -/** - * @brief Returns the task identifier for a worker. - * - * @param[in] ctx The parallel context. - * @param[in] worker_index The worker index. - * - * @return The task identifier of the worker. - */ -static inline rtems_id rtems_test_parallel_get_task_id( - const rtems_test_parallel_context *ctx, - size_t worker_index -) -{ - return ctx->worker_ids[worker_index]; -} - -/** - * @brief Runs a bunch of jobs in parallel on all processors of the system. - * - * The worker tasks inherit the priority of the executing task. - * - * There are SMP barriers before and after the job body. - * - * @param[in] ctx The parallel context. - * @param[in] worker_setup Optional handler to setup a worker task before it is - * started. - * @param[in] jobs The table of jobs. - * @param[in] job_count The count of jobs in the job table. - */ -void rtems_test_parallel( - rtems_test_parallel_context *ctx, - rtems_test_parallel_worker_setup worker_setup, - const rtems_test_parallel_job *jobs, - size_t job_count -); - -/** - * @brief Performs a busy loop for the specified seconds and nanoseconds based - * on the CPU usage of the executing thread. - * - * This function continuously reads the CPU usage of the executing thread. - * This operation may lead to a scheduler instance lock contention in SMP - * configurations. - * - * @param[in] seconds The busy seconds. - * @param[in] nanoseconds The busy nanoseconds. - */ -void rtems_test_busy_cpu_usage(time_t seconds, long nanoseconds); - -/** - * @brief Performs a busy loop with the specified iteration count. - * - * This function is optimized to not perform memory accesses and should have a - * small jitter. - * - * @param[in] count The iteration count. - */ -void rtems_test_busy(uint_fast32_t count); - -/** - * @brief Returns a count value for rtems_test_busy() which yields roughly a - * duration of one clock tick. - */ -uint_fast32_t rtems_test_get_one_tick_busy_count(void); - -/** @} */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _RTEMS_TEST_H */ diff --git a/cpukit/libtest/testbeginend.c b/cpukit/libtest/testbeginend.c index 4a85673a91..89b2468070 100644 --- a/cpukit/libtest/testbeginend.c +++ b/cpukit/libtest/testbeginend.c @@ -18,7 +18,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/cpukit/libtest/testbusy.c b/cpukit/libtest/testbusy.c index 4cc8aa01fe..e5218b0112 100644 --- a/cpukit/libtest/testbusy.c +++ b/cpukit/libtest/testbusy.c @@ -17,7 +17,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/cpukit/libtest/testextension.c b/cpukit/libtest/testextension.c index 56d97da3fb..ee9681a847 100644 --- a/cpukit/libtest/testextension.c +++ b/cpukit/libtest/testextension.c @@ -16,7 +16,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/cpukit/libtest/testparallel.c b/cpukit/libtest/testparallel.c index 3982dce034..f9845e0af1 100644 --- a/cpukit/libtest/testparallel.c +++ b/cpukit/libtest/testparallel.c @@ -17,7 +17,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/cpukit/libtest/testwrappers.c b/cpukit/libtest/testwrappers.c index 782beb9863..9679f75b6c 100644 --- a/cpukit/libtest/testwrappers.c +++ b/cpukit/libtest/testwrappers.c @@ -10,7 +10,7 @@ #include "config.h" #endif -#include +#include int __wrap_printf(const char* format, ...); int __wrap_puts(const char *str); diff --git a/testsuites/ada/support/initimpl.h b/testsuites/ada/support/initimpl.h index 8076194ff1..7fccfddcf7 100644 --- a/testsuites/ada/support/initimpl.h +++ b/testsuites/ada/support/initimpl.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include /* diff --git a/testsuites/libtests/block08/system.h b/testsuites/libtests/block08/system.h index 646de6da48..91227539dd 100644 --- a/testsuites/libtests/block08/system.h +++ b/testsuites/libtests/block08/system.h @@ -13,7 +13,7 @@ #include #include -#include +#include #include diff --git a/testsuites/libtests/block09/init.c b/testsuites/libtests/block09/init.c index 73bec67c3f..1dfce2c251 100644 --- a/testsuites/libtests/block09/init.c +++ b/testsuites/libtests/block09/init.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include diff --git a/testsuites/libtests/block10/init.c b/testsuites/libtests/block10/init.c index 8e67c055d1..1e57a65eb1 100644 --- a/testsuites/libtests/block10/init.c +++ b/testsuites/libtests/block10/init.c @@ -35,7 +35,7 @@ #include #include -#include +#include const char rtems_test_name[] = "BLOCK 10"; diff --git a/testsuites/libtests/capture01/system.h b/testsuites/libtests/capture01/system.h index dc4a37a527..620b7b477f 100644 --- a/testsuites/libtests/capture01/system.h +++ b/testsuites/libtests/capture01/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/libtests/dl01/dl01-o1.c b/testsuites/libtests/dl01/dl01-o1.c index a47beb1d51..70fa2d3be8 100644 --- a/testsuites/libtests/dl01/dl01-o1.c +++ b/testsuites/libtests/dl01/dl01-o1.c @@ -10,7 +10,7 @@ * Hello World as a loadable module. */ -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl02/dl02-o1.c b/testsuites/libtests/dl02/dl02-o1.c index 2afb618800..a7ab2d586c 100644 --- a/testsuites/libtests/dl02/dl02-o1.c +++ b/testsuites/libtests/dl02/dl02-o1.c @@ -10,7 +10,7 @@ #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl02/dl02-o2.c b/testsuites/libtests/dl02/dl02-o2.c index 507333535b..331fd3bf25 100644 --- a/testsuites/libtests/dl02/dl02-o2.c +++ b/testsuites/libtests/dl02/dl02-o2.c @@ -8,7 +8,7 @@ #include "dl-o2.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__) diff --git a/testsuites/libtests/dl05/dl05-o5.cc b/testsuites/libtests/dl05/dl05-o5.cc index b70790ea7b..c861916ff0 100644 --- a/testsuites/libtests/dl05/dl05-o5.cc +++ b/testsuites/libtests/dl05/dl05-o5.cc @@ -2,7 +2,7 @@ #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl06/dl06-o1.c b/testsuites/libtests/dl06/dl06-o1.c index 32e9a4acd9..57124ccff5 100644 --- a/testsuites/libtests/dl06/dl06-o1.c +++ b/testsuites/libtests/dl06/dl06-o1.c @@ -11,7 +11,7 @@ #include #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl06/dl06-o2.c b/testsuites/libtests/dl06/dl06-o2.c index 7d6f6c8d57..3c374b2371 100644 --- a/testsuites/libtests/dl06/dl06-o2.c +++ b/testsuites/libtests/dl06/dl06-o2.c @@ -11,7 +11,7 @@ #include #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o1.c b/testsuites/libtests/dl07/dl07-o1.c index e3a9cec6cf..adb452b96e 100644 --- a/testsuites/libtests/dl07/dl07-o1.c +++ b/testsuites/libtests/dl07/dl07-o1.c @@ -9,7 +9,7 @@ #include "dl-o1.h" -#include +#include #include "dl-load.h" #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o2.c b/testsuites/libtests/dl07/dl07-o2.c index bbb493ef21..d31d0e5f4e 100644 --- a/testsuites/libtests/dl07/dl07-o2.c +++ b/testsuites/libtests/dl07/dl07-o2.c @@ -10,7 +10,7 @@ #include "dl-o1.h" #include "dl-o2.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o3.c b/testsuites/libtests/dl07/dl07-o3.c index c499f6cab7..ecdd72f8a9 100644 --- a/testsuites/libtests/dl07/dl07-o3.c +++ b/testsuites/libtests/dl07/dl07-o3.c @@ -13,7 +13,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o4.c b/testsuites/libtests/dl07/dl07-o4.c index c9028ae808..ad9fe9da32 100644 --- a/testsuites/libtests/dl07/dl07-o4.c +++ b/testsuites/libtests/dl07/dl07-o4.c @@ -10,7 +10,7 @@ #include "dl-o1.h" #include "dl-o4.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o5.c b/testsuites/libtests/dl07/dl07-o5.c index fc56fd31a2..cb04a3e5be 100644 --- a/testsuites/libtests/dl07/dl07-o5.c +++ b/testsuites/libtests/dl07/dl07-o5.c @@ -11,7 +11,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o1.c b/testsuites/libtests/dl08/dl08-o1.c index e6173f3a78..422d25bb09 100644 --- a/testsuites/libtests/dl08/dl08-o1.c +++ b/testsuites/libtests/dl08/dl08-o1.c @@ -9,7 +9,7 @@ #include "dl-o1.h" -#include +#include #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl08/dl08-o2.c b/testsuites/libtests/dl08/dl08-o2.c index e58c8750e9..f4a459f451 100644 --- a/testsuites/libtests/dl08/dl08-o2.c +++ b/testsuites/libtests/dl08/dl08-o2.c @@ -10,7 +10,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o3.c b/testsuites/libtests/dl08/dl08-o3.c index c84b3d72ad..af5976c6de 100644 --- a/testsuites/libtests/dl08/dl08-o3.c +++ b/testsuites/libtests/dl08/dl08-o3.c @@ -12,7 +12,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o4.c b/testsuites/libtests/dl08/dl08-o4.c index 72dfbc6850..7cbd4aadd6 100644 --- a/testsuites/libtests/dl08/dl08-o4.c +++ b/testsuites/libtests/dl08/dl08-o4.c @@ -10,7 +10,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o5.c b/testsuites/libtests/dl08/dl08-o5.c index 9257a684d7..c4fa9ecdf1 100644 --- a/testsuites/libtests/dl08/dl08-o5.c +++ b/testsuites/libtests/dl08/dl08-o5.c @@ -11,7 +11,7 @@ #include "dl-o6.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c index 4aee277a3d..b8c4b2aac6 100644 --- a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c +++ b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c @@ -10,7 +10,7 @@ #include "dl-o6.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o1.c b/testsuites/libtests/dl09/dl09-o1.c index 9404a45732..45cc6edcfa 100644 --- a/testsuites/libtests/dl09/dl09-o1.c +++ b/testsuites/libtests/dl09/dl09-o1.c @@ -9,7 +9,7 @@ #include "dl-o1.h" -#include +#include #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl09/dl09-o2.c b/testsuites/libtests/dl09/dl09-o2.c index 4b9f15cd28..48a0786b9c 100644 --- a/testsuites/libtests/dl09/dl09-o2.c +++ b/testsuites/libtests/dl09/dl09-o2.c @@ -10,7 +10,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o3.c b/testsuites/libtests/dl09/dl09-o3.c index 7f8f419bb1..9fb0591d37 100644 --- a/testsuites/libtests/dl09/dl09-o3.c +++ b/testsuites/libtests/dl09/dl09-o3.c @@ -12,7 +12,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o4.c b/testsuites/libtests/dl09/dl09-o4.c index 9fea2e5d5c..2ae0ef5ea8 100644 --- a/testsuites/libtests/dl09/dl09-o4.c +++ b/testsuites/libtests/dl09/dl09-o4.c @@ -10,7 +10,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o5.c b/testsuites/libtests/dl09/dl09-o5.c index fb1169256c..badeaed53f 100644 --- a/testsuites/libtests/dl09/dl09-o5.c +++ b/testsuites/libtests/dl09/dl09-o5.c @@ -11,7 +11,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o1.c b/testsuites/libtests/dl10/dl10-o1.c index e6173f3a78..422d25bb09 100644 --- a/testsuites/libtests/dl10/dl10-o1.c +++ b/testsuites/libtests/dl10/dl10-o1.c @@ -9,7 +9,7 @@ #include "dl-o1.h" -#include +#include #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl10/dl10-o2.c b/testsuites/libtests/dl10/dl10-o2.c index e58c8750e9..f4a459f451 100644 --- a/testsuites/libtests/dl10/dl10-o2.c +++ b/testsuites/libtests/dl10/dl10-o2.c @@ -10,7 +10,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o3.c b/testsuites/libtests/dl10/dl10-o3.c index c84b3d72ad..af5976c6de 100644 --- a/testsuites/libtests/dl10/dl10-o3.c +++ b/testsuites/libtests/dl10/dl10-o3.c @@ -12,7 +12,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o4.c b/testsuites/libtests/dl10/dl10-o4.c index 72dfbc6850..7cbd4aadd6 100644 --- a/testsuites/libtests/dl10/dl10-o4.c +++ b/testsuites/libtests/dl10/dl10-o4.c @@ -10,7 +10,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o5.c b/testsuites/libtests/dl10/dl10-o5.c index be496392c9..832c029ec8 100644 --- a/testsuites/libtests/dl10/dl10-o5.c +++ b/testsuites/libtests/dl10/dl10-o5.c @@ -10,7 +10,7 @@ #include "dl-o5.h" #include -#include +#include #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o6.c b/testsuites/libtests/dl10/dl10-o6.c index 5e03a30773..ab6deb189d 100644 --- a/testsuites/libtests/dl10/dl10-o6.c +++ b/testsuites/libtests/dl10/dl10-o6.c @@ -9,7 +9,7 @@ #include "dl-load.h" #include -#include +#include int rtems_main_o5 (void) { diff --git a/testsuites/libtests/mathl/init.c b/testsuites/libtests/mathl/init.c index af5eb9b4a5..fb390bb2c2 100644 --- a/testsuites/libtests/mathl/init.c +++ b/testsuites/libtests/mathl/init.c @@ -24,7 +24,7 @@ #if __rtems__ #include /* for device driver prototypes */ -#include +#include const char rtems_test_name[] = "MATHL"; #endif diff --git a/testsuites/psxtests/psxbarrier01/main.c b/testsuites/psxtests/psxbarrier01/main.c index 93aa9f788b..45d56d025b 100644 --- a/testsuites/psxtests/psxbarrier01/main.c +++ b/testsuites/psxtests/psxbarrier01/main.c @@ -12,7 +12,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c index 038bbec43c..d2811b409a 100644 --- a/testsuites/psxtests/psxconfig01/init.c +++ b/testsuites/psxtests/psxconfig01/init.c @@ -27,7 +27,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/testsuites/psxtests/psxfenv01/init.c b/testsuites/psxtests/psxfenv01/init.c index 867b625a1e..15d383f211 100644 --- a/testsuites/psxtests/psxfenv01/init.c +++ b/testsuites/psxtests/psxfenv01/init.c @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include diff --git a/testsuites/psxtests/psxinttypes01/init.c b/testsuites/psxtests/psxinttypes01/init.c index 615b9d9ab4..d17ad5bda3 100644 --- a/testsuites/psxtests/psxinttypes01/init.c +++ b/testsuites/psxtests/psxinttypes01/init.c @@ -35,7 +35,7 @@ #include "config.h" #endif -#include +#include #include #include #include diff --git a/testsuites/psxtests/psxndbm01/init.c b/testsuites/psxtests/psxndbm01/init.c index d696abf282..a13afa7315 100644 --- a/testsuites/psxtests/psxndbm01/init.c +++ b/testsuites/psxtests/psxndbm01/init.c @@ -45,7 +45,7 @@ #include #include /* contains definitions of 'file_mode' */ #include -#include +#include #include const char rtems_test_name[] = "PSXNDBM 01"; diff --git a/testsuites/psxtests/psxrwlock01/main.c b/testsuites/psxtests/psxrwlock01/main.c index 2984ce965a..d71218bfff 100644 --- a/testsuites/psxtests/psxrwlock01/main.c +++ b/testsuites/psxtests/psxrwlock01/main.c @@ -12,7 +12,7 @@ #include "config.h" #endif -#include +#include #include #include diff --git a/testsuites/samples/base_mp/system.h b/testsuites/samples/base_mp/system.h index 3c434397b5..97c76f5e24 100644 --- a/testsuites/samples/base_mp/system.h +++ b/testsuites/samples/base_mp/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/samples/base_sp/system.h b/testsuites/samples/base_sp/system.h index 174496ecbf..0b49edb465 100644 --- a/testsuites/samples/base_sp/system.h +++ b/testsuites/samples/base_sp/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/samples/capture/system.h b/testsuites/samples/capture/system.h index 99c15ec740..7f915dc830 100644 --- a/testsuites/samples/capture/system.h +++ b/testsuites/samples/capture/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/samples/cdtest/main.cc b/testsuites/samples/cdtest/main.cc index 010bc221f0..894e404ba1 100644 --- a/testsuites/samples/cdtest/main.cc +++ b/testsuites/samples/cdtest/main.cc @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include diff --git a/testsuites/samples/cdtest/system.h b/testsuites/samples/cdtest/system.h index 6530682a93..7d14747a32 100644 --- a/testsuites/samples/cdtest/system.h +++ b/testsuites/samples/cdtest/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/samples/fileio/system.h b/testsuites/samples/fileio/system.h index 743acf8406..54e2441184 100644 --- a/testsuites/samples/fileio/system.h +++ b/testsuites/samples/fileio/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include #include "tmacros.h" /* functions */ diff --git a/testsuites/samples/iostream/system.h b/testsuites/samples/iostream/system.h index fbcc56e063..696cb8df34 100644 --- a/testsuites/samples/iostream/system.h +++ b/testsuites/samples/iostream/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* configuration information */ diff --git a/testsuites/samples/nsecs/system.h b/testsuites/samples/nsecs/system.h index 29627e49db..31c17a4073 100644 --- a/testsuites/samples/nsecs/system.h +++ b/testsuites/samples/nsecs/system.h @@ -1,7 +1,7 @@ #ifndef SYSTEM_H #define SYSTEM_H -#include +#include #include /* for device driver prototypes */ diff --git a/testsuites/samples/paranoia/system.h b/testsuites/samples/paranoia/system.h index 6726f81873..740c8ec5b9 100644 --- a/testsuites/samples/paranoia/system.h +++ b/testsuites/samples/paranoia/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include /* functions */ diff --git a/testsuites/samples/pppd/system.h b/testsuites/samples/pppd/system.h index f83212ed5a..c9972fe9b3 100644 --- a/testsuites/samples/pppd/system.h +++ b/testsuites/samples/pppd/system.h @@ -2,7 +2,7 @@ #define SYSTEM_H #include -#include +#include #include #include diff --git a/testsuites/samples/ticker/system.h b/testsuites/samples/ticker/system.h index 05261341f7..4ac3f59f16 100644 --- a/testsuites/samples/ticker/system.h +++ b/testsuites/samples/ticker/system.h @@ -12,7 +12,7 @@ */ #include -#include +#include #include #include "tmacros.h" diff --git a/testsuites/smptests/smpatomic01/init.c b/testsuites/smptests/smpatomic01/init.c index a3b9e1dc45..ba2ec7baba 100644 --- a/testsuites/smptests/smpatomic01/init.c +++ b/testsuites/smptests/smpatomic01/init.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c index bfaa755150..1c33911732 100644 --- a/testsuites/smptests/smplock01/init.c +++ b/testsuites/smptests/smplock01/init.c @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include "tmacros.h" diff --git a/testsuites/smptests/smpscheduler03/init.c b/testsuites/smptests/smpscheduler03/init.c index 024e3cdd48..33b076b045 100644 --- a/testsuites/smptests/smpscheduler03/init.c +++ b/testsuites/smptests/smpscheduler03/init.c @@ -17,7 +17,7 @@ #endif #include -#include +#include void Init(rtems_task_argument arg); diff --git a/testsuites/smptests/smpscheduler05/init.c b/testsuites/smptests/smpscheduler05/init.c index 4a1d0b6db3..90147ea9d7 100644 --- a/testsuites/smptests/smpscheduler05/init.c +++ b/testsuites/smptests/smpscheduler05/init.c @@ -17,7 +17,7 @@ #endif #include -#include +#include void Init(rtems_task_argument arg); diff --git a/testsuites/smptests/smpscheduler06/init.c b/testsuites/smptests/smpscheduler06/init.c index 1559e04d43..6f26639a86 100644 --- a/testsuites/smptests/smpscheduler06/init.c +++ b/testsuites/smptests/smpscheduler06/init.c @@ -17,7 +17,7 @@ #endif #include -#include +#include void Init(rtems_task_argument arg); diff --git a/testsuites/smptests/smpscheduler07/init.c b/testsuites/smptests/smpscheduler07/init.c index 4583a5eb2a..cdd3370413 100644 --- a/testsuites/smptests/smpscheduler07/init.c +++ b/testsuites/smptests/smpscheduler07/init.c @@ -17,7 +17,7 @@ #endif #include -#include +#include void Init(rtems_task_argument arg); diff --git a/testsuites/sptests/spheapprot/init.c b/testsuites/sptests/spheapprot/init.c index 8046100091..7428f38830 100644 --- a/testsuites/sptests/spheapprot/init.c +++ b/testsuites/sptests/spheapprot/init.c @@ -22,7 +22,7 @@ #include -#include +#include #include #include diff --git a/testsuites/sptests/sptimecounter02/init.c b/testsuites/sptests/sptimecounter02/init.c index fafbaf8af1..ffa53edfd8 100644 --- a/testsuites/sptests/sptimecounter02/init.c +++ b/testsuites/sptests/sptimecounter02/init.c @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include diff --git a/testsuites/sptests/sptimecounter03/init.c b/testsuites/sptests/sptimecounter03/init.c index 4ef084d3d2..dd4c100b64 100644 --- a/testsuites/sptests/sptimecounter03/init.c +++ b/testsuites/sptests/sptimecounter03/init.c @@ -16,7 +16,7 @@ #include "config.h" #endif -#include +#include #include diff --git a/testsuites/sptests/sptimecounter04/init.c b/testsuites/sptests/sptimecounter04/init.c index 42c31277b9..a0645a0895 100644 --- a/testsuites/sptests/sptimecounter04/init.c +++ b/testsuites/sptests/sptimecounter04/init.c @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include "tmacros.h" diff --git a/testsuites/support/include/buffer_test_io.h b/testsuites/support/include/buffer_test_io.h index ea68fea0d8..f0eae50fbd 100644 --- a/testsuites/support/include/buffer_test_io.h +++ b/testsuites/support/include/buffer_test_io.h @@ -5,7 +5,7 @@ #ifndef __BUFFER_TEST_IO_h #define __BUFFER_TEST_IO_h -#include +#include #ifdef __cplusplus extern "C" { diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h index 2c885c6ecc..fe17bc01e7 100644 --- a/testsuites/support/include/tmacros.h +++ b/testsuites/support/include/tmacros.h @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c index bf24ca138f..d62278cb07 100644 --- a/testsuites/tmtests/tmfine01/init.c +++ b/testsuites/tmtests/tmfine01/init.c @@ -24,7 +24,7 @@ #include #include -#include +#include const char rtems_test_name[] = "TMFINE 1"; diff --git a/testsuites/tmtests/tmonetoone/init.c b/testsuites/tmtests/tmonetoone/init.c index b721a8c531..70f3f51eb2 100644 --- a/testsuites/tmtests/tmonetoone/init.c +++ b/testsuites/tmtests/tmonetoone/init.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include -- cgit v1.2.3