[PATCH 1/5] c-user: Move basic system configuration

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Dec 10 13:11:29 UTC 2019


Move the basic system configuration to the front.  Rename it to "General
System Configuration".

Update #3836.
---
 c-user/configuring_a_system.rst | 1376 +++++++++++++++++++--------------------
 1 file changed, 688 insertions(+), 688 deletions(-)

diff --git a/c-user/configuring_a_system.rst b/c-user/configuring_a_system.rst
index 85c4e0f..0c0cb4a 100644
--- a/c-user/configuring_a_system.rst
+++ b/c-user/configuring_a_system.rst
@@ -476,334 +476,429 @@ NOTES:
     #define CONFIGURE_UNLIMITED_OBJECTS
     #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
 
-Classic API Configuration
-=========================
+General System Configuration
+============================
 
-This section defines the Classic API related system configuration parameters
-supported by ``<rtems/confdefs.h>``.
+This section defines the general system configuration options supported by
+``<rtems/confdefs.h>``.
 
-.. index:: CONFIGURE_MAXIMUM_TASKS
+.. index:: CONFIGURE_EXTRA_TASK_STACKS
+.. index:: memory for task tasks
 
-.. _CONFIGURE_MAXIMUM_TASKS:
+.. _CONFIGURE_EXTRA_TASK_STACKS:
 
-CONFIGURE_MAXIMUM_TASKS
------------------------
+CONFIGURE_EXTRA_TASK_STACKS
+---------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_TASKS``
+    ``CONFIGURE_EXTRA_TASK_STACKS``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Unsigned integer (``size_t``).
 
 RANGE:
-    Zero or positive.
+    Undefined or positive.
 
 DEFAULT VALUE:
-    The default value is ``0``.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
-    can be concurrently active.
+    This configuration parameter is set to the number of bytes the applications
+    wishes to add to the task stack requirements calculated by
+    ``<rtems/confdefs.h>``.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
-
-    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 <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
-
-    A future enhancement to ``<rtems/confdefs.h>`` 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.
-
-.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
+    This parameter is very important.  If the application creates tasks with
+    stacks larger then the minimum, then that memory is NOT accounted for by
+    ``<rtems/confdefs.h>``.
 
-.. index:: CONFIGURE_MAXIMUM_TIMERS
+.. index:: CONFIGURE_INITIAL_EXTENSIONS
 
-.. _CONFIGURE_MAXIMUM_TIMERS:
+.. _CONFIGURE_INITIAL_EXTENSIONS:
 
-CONFIGURE_MAXIMUM_TIMERS
-------------------------
+CONFIGURE_INITIAL_EXTENSIONS
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_TIMERS``
+    ``CONFIGURE_INITIAL_EXTENSIONS``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    List of user extension initializers (``rtems_extensions_table``).
 
 RANGE:
-    Zero or positive.
+    Undefined or a list of one or more user extensions.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This is not defined by default.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
-    that can be concurrently active.
+    If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
+    this application specific set of initial extensions will be placed in the
+    initial extension table.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    None.
 
-.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
+.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
+.. index:: interrupt stack size
 
-.. _CONFIGURE_MAXIMUM_SEMAPHORES:
+.. _CONFIGURE_INTERRUPT_STACK_SIZE:
 
-CONFIGURE_MAXIMUM_SEMAPHORES
-----------------------------
+CONFIGURE_INTERRUPT_STACK_SIZE
+------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_SEMAPHORES``
+    ``CONFIGURE_INTERRUPT_STACK_SIZE``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Unsigned integer.
 
 RANGE:
-    Zero or positive.
+    Positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is ``BSP_INTERRUPT_STACK_SIZE`` in case it is defined,
+    otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
-    Semaphores that can be concurrently active.
+    The ``CONFIGURE_INTERRUPT_STACK_SIZE`` configuration option defines the
+    size of an interrupt stack in bytes.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    The interrupt stack size must be aligned according to
+    ``CPU_INTERRUPT_STACK_ALIGNMENT``.
 
-.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
+    There is one interrupt stack available for each configured processor
+    (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <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.
 
-.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
+    Some BSPs use the interrupt stack as the initialization stack which is used
+    to perform the sequential system initialization before the multithreading
+    is started.
 
-CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
----------------------------------
+    The interrupt stacks are covered by the :ref:`stack checker
+    <CONFIGURE_STACK_CHECKER_ENABLED>`.  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
+    <CONFIGURE_MINIMUM_TASK_STACK_SIZE>` instead of ``CPU_STACK_MINIMUM_SIZE``.
+
+.. index:: CONFIGURE_MAXIMUM_PRIORITY
+.. index:: maximum priority
+.. index:: number of priority levels
+
+.. _CONFIGURE_MAXIMUM_PRIORITY:
+
+CONFIGURE_MAXIMUM_PRIORITY
+--------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
+    ``CONFIGURE_MAXIMUM_PRIORITY``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Unsigned integer (``uint8_t``).
 
 RANGE:
-    Zero or positive.
+    Valid values for this configuration parameter must be one (1) less than
+    than a power of two (2) between 4 and 256 inclusively.  In other words,
+    valid values are 3, 7, 31, 63, 127, and 255.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is 255, because RTEMS must support 256 priority levels to
+    be compliant with various standards. These priorities range from zero (0)
+    to 255.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
-    Semaphores using the :ref:`MrsP` that can be concurrently active.
+   This configuration parameter specified the maximum numeric priority of any
+   task in the system and one less that the number of priority levels in the
+   system.
+
+   Reducing the number of priorities in the system reduces the amount of memory
+   allocated from the RTEMS Workspace.
 
 NOTES:
-    This configuration option is only used in SMP configurations.  In
-    uniprocessor configurations, the :ref:`PriorityCeiling` is used for MrsP
-    semaphores and thus no extra memory is necessary.
+   The numerically greatest priority is the logically lowest priority in the
+   system and will thus be used by the IDLE task.
 
-.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+   Priority zero (0) is reserved for internal use by RTEMS and is not available
+   to applications.
 
-.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
+   With some schedulers, reducing the number of priorities can reduce the
+   amount of memory used by the scheduler. For example, the Deterministic
+   Priority Scheduler (DPS) used by default uses three pointers of storage per
+   priority level. Reducing the number of priorities from 256 levels to
+   sixteen (16) can reduce memory usage by about three (3) kilobytes.
 
-CONFIGURE_MAXIMUM_MESSAGE_QUEUES
---------------------------------
+.. index:: CONFIGURE_MAXIMUM_PROCESSORS
+
+.. _CONFIGURE_MAXIMUM_PROCESSORS:
+
+CONFIGURE_MAXIMUM_PROCESSORS
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
+    ``CONFIGURE_MAXIMUM_PROCESSORS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Zero or positive.
+    Positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is 1.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
-    Message Queues that can be concurrently active.
+    ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to 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 thread and interrupt stack for
+    example.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    If there are more processors available than configured, the rest will be
+    ignored.  This configuration define is ignored in uniprocessor
+    configurations.
 
-.. index:: CONFIGURE_MAXIMUM_BARRIERS
+.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
+.. index:: maximum thread name size
 
-.. _CONFIGURE_MAXIMUM_BARRIERS:
+.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
 
-CONFIGURE_MAXIMUM_BARRIERS
---------------------------
+CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
+----------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_BARRIERS``
+    ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Unsigned integer (``size_t``).
 
 RANGE:
-    Zero or positive.
+    No restrictions.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is 16.  This value was chosen for Linux compatibility,
+    see
+    `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
-    Barriers that can be concurrently active.
+   This configuration parameter specifies the maximum thread name size
+   including the terminating `NUL` character.
 
-NOTES:
-    This object class can be configured in unlimited allocation mode.
+NOTE:
+   The size of the thread control block is increased by the maximum thread name
+   size.  This configuration option is available since RTEMS 5.1.
 
-.. index:: CONFIGURE_MAXIMUM_PERIODS
+.. index:: CONFIGURE_MICROSECONDS_PER_TICK
+.. index:: tick quantum
 
-.. _CONFIGURE_MAXIMUM_PERIODS:
+.. _CONFIGURE_MICROSECONDS_PER_TICK:
 
-CONFIGURE_MAXIMUM_PERIODS
--------------------------
+CONFIGURE_MICROSECONDS_PER_TICK
+-------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_PERIODS``
+    ``CONFIGURE_MICROSECONDS_PER_TICK``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Zero or positive.
+    Positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This is not defined by default. When not defined, the clock tick quantum is
+    configured to be 10,000 microseconds which is ten (10) milliseconds.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
-    that can be concurrently active.
+    This constant is  used to specify the length of time between clock ticks.
+
+    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.
+
+    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.
+
+    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.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    This configuration parameter has no impact if the Clock Tick Device driver
+    is not configured.
 
-.. index:: CONFIGURE_MAXIMUM_PARTITIONS
+    There may be BSP specific limits on the resolution or maximum value of a
+    clock tick quantum.
 
-.. _CONFIGURE_MAXIMUM_PARTITIONS:
+.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
+.. index:: minimum task stack size
 
-CONFIGURE_MAXIMUM_PARTITIONS
-----------------------------
+.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
+
+CONFIGURE_MINIMUM_TASK_STACK_SIZE
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_PARTITIONS``
+    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Zero or positive.
+    Positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is architecture-specific.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
-    Partitions that can be concurrently active.
+    This configuration parameter defines the minimum stack size in bytes for
+    every user task or thread in the system.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    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 <CONFIGURE_STACK_CHECKER_ENABLED>`).
 
-.. index:: CONFIGURE_MAXIMUM_REGIONS
+    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 must be done with caution as it could increase the
+    possibility of a blown task stack.
 
-.. _CONFIGURE_MAXIMUM_REGIONS:
+    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.
 
-CONFIGURE_MAXIMUM_REGIONS
--------------------------
+    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 <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
+    <CONFIGURE_INTERRUPT_STACK_SIZE>`.
+
+.. index:: CONFIGURE_STACK_CHECKER_ENABLED
+
+.. _CONFIGURE_STACK_CHECKER_ENABLED:
+
+CONFIGURE_STACK_CHECKER_ENABLED
+-------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_REGIONS``
+    ``CONFIGURE_STACK_CHECKER_ENABLED``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Boolean feature macro.
 
 RANGE:
-    Zero or positive.
+    Defined or undefined.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This is not defined by default, and thus stack checking is disabled.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
-    that can be concurrently active.
+    This configuration parameter is defined when the application wishes to
+    enable run-time stack bounds checking.
 
 NOTES:
-    None.
+    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
 
-.. index:: CONFIGURE_MAXIMUM_PORTS
+    This increases the time required to create tasks as well as adding overhead
+    to each context switch.
 
-.. _CONFIGURE_MAXIMUM_PORTS:
+.. index:: CONFIGURE_TICKS_PER_TIMESLICE
+.. index:: ticks per timeslice
 
-CONFIGURE_MAXIMUM_PORTS
------------------------
+.. _CONFIGURE_TICKS_PER_TIMESLICE:
+
+CONFIGURE_TICKS_PER_TIMESLICE
+-----------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_PORTS``
+    ``CONFIGURE_TICKS_PER_TIMESLICE``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Zero or positive.
+    Positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is 50.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
-    can be concurrently active.
+    This configuration parameter specifies the length of the timeslice quantum
+    in ticks for each task.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    This configuration parameter has no impact if the Clock Tick Device driver
+    is not configured.
 
-.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
+.. index:: CONFIGURE_UNIFIED_WORK_AREAS
+.. index:: unified work areas
+.. index:: separate work areas
+.. index:: RTEMS Workspace
+.. index:: C Program Heap
 
-.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
+.. _CONFIGURE_UNIFIED_WORK_AREAS:
 
-CONFIGURE_MAXIMUM_USER_EXTENSIONS
----------------------------------
+CONFIGURE_UNIFIED_WORK_AREAS
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
+    ``CONFIGURE_UNIFIED_WORK_AREAS``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Boolean feature macro.
 
 RANGE:
-    Zero or positive.
+    Defined or undefined.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This is not defined by default, which specifies that the C Program Heap and
+    the RTEMS Workspace will be separate.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
-    User Extensions that can be concurrently active.
+    When defined, the C Program Heap and the RTEMS Workspace will be one pool
+    of memory.
 
-NOTES:
-    This object class can be configured in unlimited allocation mode.
+    When not defined, there will be separate memory pools for the RTEMS
+    Workspace and C Program Heap.
 
-Classic API Initialization Tasks Table Configuration
-====================================================
+NOTES:
+    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.
 
-The ``<rtems/confdefs.h>`` configuration system can automatically generate an
-Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
-The following parameters control the generation of that table.
+    In high memory environments, this is desirable when you want to use the
+    RTEMS "unlimited" objects 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.
 
-.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
+.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
+.. index:: clear C Program Heap
+.. index:: clear RTEMS Workspace
+.. index:: zero C Program Heap
+.. index:: zero RTEMS Workspace
 
-.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
+.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
 
-CONFIGURE_RTEMS_INIT_TASKS_TABLE
---------------------------------
+CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
+--------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
+    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
 
 DATA TYPE:
     Boolean feature macro.
@@ -812,259 +907,261 @@ RANGE:
     Defined or undefined.
 
 DEFAULT VALUE:
-    This is not defined by default.
+    This is not defined by default, unless overridden by the BSP.  The default
+    is *NOT* to zero out the RTEMS Workspace or C Program Heap.
 
 DESCRIPTION:
-    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
-    Classic RTEMS API Initialization Task Table. The table built by
-    ``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
-    sufficient for applications which initialization the system from a single
-    task.
-
-    By default, this field is not defined as the user MUST select their own API
-    for initialization tasks.
+    This macro indicates whether RTEMS should zero the RTEMS Workspace and C
+    Program Heap as part of its initialization.  If defined, the memory regions
+    are zeroed.  Otherwise, they are not.
 
 NOTES:
-    The application may choose to use the initialization tasks or threads table
-    from another API.
+    Zeroing memory can add significantly to system boot time. It is not
+    necessary for RTEMS but is often assumed by support libraries.
 
-    A compile time error will be generated if the user does not configure any
-    initialization tasks or threads.
+Classic API Configuration
+=========================
 
-.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
+This section defines the Classic API related system configuration parameters
+supported by ``<rtems/confdefs.h>``.
 
-.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
+.. index:: CONFIGURE_MAXIMUM_TASKS
 
-CONFIGURE_INIT_TASK_ENTRY_POINT
--------------------------------
+.. _CONFIGURE_MAXIMUM_TASKS:
+
+CONFIGURE_MAXIMUM_TASKS
+-----------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_ENTRY_POINT``
+    ``CONFIGURE_MAXIMUM_TASKS``
 
 DATA TYPE:
-    Task entry function pointer (``rtems_task_entry``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Valid task entry function pointer.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is ``Init``.
+    The default value is ``0``.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
-    name) of the single initialization task defined by the Classic API
-    Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
+    can be concurrently active.
 
 NOTES:
-    The user must implement the function ``Init`` or the function name provided
-    in this configuration parameter.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_INIT_TASK_NAME
+    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``.
 
-.. _CONFIGURE_INIT_TASK_NAME:
+    The maximum number of POSIX threads is specified by
+    :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
 
-CONFIGURE_INIT_TASK_NAME
+    A future enhancement to ``<rtems/confdefs.h>`` 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.
+
+.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
+
+.. index:: CONFIGURE_MAXIMUM_TIMERS
+
+.. _CONFIGURE_MAXIMUM_TIMERS:
+
+CONFIGURE_MAXIMUM_TIMERS
 ------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_NAME``
+    ``CONFIGURE_MAXIMUM_TIMERS``
 
 DATA TYPE:
-    RTEMS Name (``rtems_name``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Any value.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
-    defined by the Classic API Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
+    that can be concurrently active.
 
 NOTES:
-    None.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
+.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
 
-.. _CONFIGURE_INIT_TASK_STACK_SIZE:
+.. _CONFIGURE_MAXIMUM_SEMAPHORES:
 
-CONFIGURE_INIT_TASK_STACK_SIZE
-------------------------------
+CONFIGURE_MAXIMUM_SEMAPHORES
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_STACK_SIZE``
+    ``CONFIGURE_MAXIMUM_SEMAPHORES``
 
 DATA TYPE:
-    Unsigned integer (``size_t``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
     Zero or positive.
 
 DEFAULT VALUE:
-    The default value is RTEMS_MINIMUM_STACK_SIZE.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
-    initialization task defined by the Classic API Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
+    Semaphores that can be concurrently active.
 
 NOTES:
-    If the stack size specified is greater than the configured minimum, it must
-    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
-    Task/Thread Stack Memory Above Minimum` for more information about
-    ``CONFIGURE_EXTRA_TASK_STACKS``.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_INIT_TASK_PRIORITY
+.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
 
-.. _CONFIGURE_INIT_TASK_PRIORITY:
+.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
 
-CONFIGURE_INIT_TASK_PRIORITY
-----------------------------
+CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_PRIORITY``
+    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
 
 DATA TYPE:
-    RTEMS Task Priority (``rtems_task_priority``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    One (1) to CONFIGURE_MAXIMUM_PRIORITY.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 1, which is the highest priority in the Classic API.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
-    initialization task defined by the Classic API Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
+    Semaphores using the :ref:`MrsP` that can be concurrently active.
 
 NOTES:
-    None.
-
+    This configuration option is only used in SMP configurations.  In
+    uniprocessor configurations, the :ref:`PriorityCeiling` is used for MrsP
+    semaphores and thus no extra memory is necessary.
 
-.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
+.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
 
-.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
+.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
 
-CONFIGURE_INIT_TASK_ATTRIBUTES
-------------------------------
+CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+--------------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_ATTRIBUTES``
+    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
 
 DATA TYPE:
-    RTEMS Attributes (``rtems_attribute``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Valid task attribute sets.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
-    initialization task defined by the Classic API Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
+    Message Queues that can be concurrently active.
 
 NOTES:
-    None.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
+.. index:: CONFIGURE_MAXIMUM_BARRIERS
 
-.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
+.. _CONFIGURE_MAXIMUM_BARRIERS:
 
-CONFIGURE_INIT_TASK_INITIAL_MODES
----------------------------------
+CONFIGURE_MAXIMUM_BARRIERS
+--------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_INITIAL_MODES``
+    ``CONFIGURE_MAXIMUM_BARRIERS``
 
 DATA TYPE:
-    RTEMS Mode (``rtems_mode``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Valid task mode sets.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is ``RTEMS_NO_PREEMPT``.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
-    single initialization task defined by the Classic API Initialization Tasks
-    Table.
+    ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
+    Barriers that can be concurrently active.
 
 NOTES:
-    None.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
+.. index:: CONFIGURE_MAXIMUM_PERIODS
 
-.. _CONFIGURE_INIT_TASK_ARGUMENTS:
+.. _CONFIGURE_MAXIMUM_PERIODS:
 
-CONFIGURE_INIT_TASK_ARGUMENTS
------------------------------
+CONFIGURE_MAXIMUM_PERIODS
+-------------------------
 
 CONSTANT:
-    ``CONFIGURE_INIT_TASK_ARGUMENTS``
+    ``CONFIGURE_MAXIMUM_PERIODS``
 
 DATA TYPE:
-    RTEMS Task Argument (``rtems_task_argument``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Complete range of the type.
+    Zero or positive.
 
 DEFAULT VALUE:
     The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
-    initialization task defined by the Classic API Initialization Tasks Table.
+    ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
+    that can be concurrently active.
 
 NOTES:
-    None.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
+.. index:: CONFIGURE_MAXIMUM_PARTITIONS
 
-.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
+.. _CONFIGURE_MAXIMUM_PARTITIONS:
 
-CONFIGURE_HAS_OWN_INIT_TASK_TABLE
----------------------------------
+CONFIGURE_MAXIMUM_PARTITIONS
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
+    ``CONFIGURE_MAXIMUM_PARTITIONS``
 
 DATA TYPE:
-    Boolean feature macro.
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Defined or undefined.
+    Zero or positive.
 
 DEFAULT VALUE:
-    This is not defined by default.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE`` is defined if the user wishes to
-    define their own Classic API Initialization Tasks Table.  This table should
-    be named ``Initialization_tasks``.
+    ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
+    Partitions that can be concurrently active.
 
 NOTES:
-    This is a seldom used configuration parameter. The most likely use case is
-    when an application desires to have more than one initialization task.
-
-POSIX API Configuration
-=======================
-
-The parameters in this section are used to configure resources for the POSIX
-API supported by RTEMS.  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.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
+.. index:: CONFIGURE_MAXIMUM_REGIONS
 
-.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
+.. _CONFIGURE_MAXIMUM_REGIONS:
 
-CONFIGURE_MAXIMUM_POSIX_KEYS
-----------------------------
+CONFIGURE_MAXIMUM_REGIONS
+-------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
+    ``CONFIGURE_MAXIMUM_REGIONS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
@@ -1076,21 +1173,21 @@ DEFAULT VALUE:
     The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
+    ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
     that can be concurrently active.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
+    None.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+.. index:: CONFIGURE_MAXIMUM_PORTS
 
-.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+.. _CONFIGURE_MAXIMUM_PORTS:
 
-CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
----------------------------------------
+CONFIGURE_MAXIMUM_PORTS
+-----------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
+    ``CONFIGURE_MAXIMUM_PORTS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
@@ -1099,30 +1196,24 @@ RANGE:
     Zero or positive.
 
 DEFAULT VALUE:
-    The default value is
-    :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS <CONFIGURE_MAXIMUM_POSIX_KEYS>` *
-    :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>` +
-    :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS`` is the maximum number of key
-    value pairs used by POSIX API Keys that can be concurrently active.
+    ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
+    can be concurrently active.
 
 NOTES:
     This object class can be configured in unlimited allocation mode.
 
-    A key value pair is created by :c:func:`pthread_setspecific` if the value
-    is not :c:macro:`NULL`, otherwise it is deleted.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
 
-.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
+.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
 
-CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
---------------------------------------
+CONFIGURE_MAXIMUM_USER_EXTENSIONS
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
+    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
@@ -1134,279 +1225,253 @@ DEFAULT VALUE:
     The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
-    API Message Queues that can be concurrently active.
+    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
+    User Extensions that can be concurrently active.
 
 NOTES:
     This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+Classic API Initialization Tasks Table Configuration
+====================================================
 
-.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
+The ``<rtems/confdefs.h>`` configuration system can automatically generate an
+Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
+The following parameters control the generation of that table.
 
-CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
---------------------------------------
+.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
+
+CONFIGURE_RTEMS_INIT_TASKS_TABLE
+--------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
+    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Boolean feature macro.
 
 RANGE:
-    Zero or positive.
+    Defined or undefined.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This is not defined by default.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
-    API Queued Signals that can be concurrently active.
+    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
+    Classic RTEMS API Initialization Task Table. The table built by
+    ``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
+    sufficient for applications which initialization the system from a single
+    task.
+
+    By default, this field is not defined as the user MUST select their own API
+    for initialization tasks.
 
 NOTES:
-    Unlimited objects are not available for queued signals.
+    The application may choose to use the initialization tasks or threads table
+    from another API.
 
-    Queued signals are only available if RTEMS was built with the
-    ``--enable-posix`` build configuration option.
+    A compile time error will be generated if the user does not configure any
+    initialization tasks or threads.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
 
-.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
+.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
 
-CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
-----------------------------------
+CONFIGURE_INIT_TASK_ENTRY_POINT
+-------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
+    ``CONFIGURE_INIT_TASK_ENTRY_POINT``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Task entry function pointer (``rtems_task_entry``).
 
 RANGE:
-    Zero or positive.
+    Valid task entry function pointer.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is ``Init``.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
-    Named Semaphores that can be concurrently active.
+    ``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
+    name) of the single initialization task defined by the Classic API
+    Initialization Tasks Table.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
-
-    Named semaphores are created with ``sem_open()``.  Semaphores initialized
-    with ``sem_init()`` are not affected by this configuration option since the
-    storage space for these semaphores is user-provided.
+    The user must implement the function ``Init`` or the function name provided
+    in this configuration parameter.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
+.. index:: CONFIGURE_INIT_TASK_NAME
 
-.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
+.. _CONFIGURE_INIT_TASK_NAME:
 
-CONFIGURE_MAXIMUM_POSIX_TIMERS
-------------------------------
+CONFIGURE_INIT_TASK_NAME
+------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
+    ``CONFIGURE_INIT_TASK_NAME``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    RTEMS Name (``rtems_name``).
 
 RANGE:
-    Zero or positive.
+    Any value.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
-    Timers that can be concurrently active.
+    ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
+    defined by the Classic API Initialization Tasks Table.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
-
-    Timers are only available if RTEMS was built with the
-    ``--enable-posix`` build configuration option.
+    None.
 
-.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
+.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
 
-.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
+.. _CONFIGURE_INIT_TASK_STACK_SIZE:
 
-CONFIGURE_MAXIMUM_POSIX_THREADS
--------------------------------
+CONFIGURE_INIT_TASK_STACK_SIZE
+------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
+    ``CONFIGURE_INIT_TASK_STACK_SIZE``
 
 DATA TYPE:
-    Unsigned integer (``uint32_t``).
+    Unsigned integer (``size_t``).
 
 RANGE:
     Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 0.
+    The default value is RTEMS_MINIMUM_STACK_SIZE.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
-    Threads that can be concurrently active.
+    ``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
+    initialization task defined by the Classic API Initialization Tasks Table.
 
 NOTES:
-    This object class can be configured in unlimited allocation mode.
-
-    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 parameter
-    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
-    requirements *ABOVE* the minimum size required.  See :ref:`Reserve
+    If the stack size specified is greater than the configured minimum, it must
+    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  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 <CONFIGURE_MAXIMUM_TASKS>`.
-
-    All POSIX threads have floating point enabled.
-
-.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
-.. index:: minimum POSIX thread stack size
+.. index:: CONFIGURE_INIT_TASK_PRIORITY
 
-.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
+.. _CONFIGURE_INIT_TASK_PRIORITY:
 
-CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
------------------------------------------
+CONFIGURE_INIT_TASK_PRIORITY
+----------------------------
 
 CONSTANT:
-    ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
+    ``CONFIGURE_INIT_TASK_PRIORITY``
 
 DATA TYPE:
-    Unsigned integer (``size_t``).
+    RTEMS Task Priority (``rtems_task_priority``).
 
 RANGE:
-    Positive.
+    One (1) to CONFIGURE_MAXIMUM_PRIORITY.
 
 DEFAULT VALUE:
-    The default value is two times the value of
-    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE <CONFIGURE_MINIMUM_TASK_STACK_SIZE>`.
+    The default value is 1, which is the highest priority in the Classic API.
 
 DESCRIPTION:
-    This configuration parameter defines the minimum stack size in bytes for
-    every POSIX thread in the system.
+    ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
+    initialization task defined by the Classic API Initialization Tasks Table.
 
 NOTES:
     None.
 
-POSIX Initialization Threads Table Configuration
-================================================
-
-The ``<rtems/confdefs.h>`` configuration system can automatically generate a
-POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
-a single entry.  The following parameters control the generation of that table.
 
-.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
+.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
 
-.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
+.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
 
-CONFIGURE_POSIX_INIT_THREAD_TABLE
----------------------------------
+CONFIGURE_INIT_TASK_ATTRIBUTES
+------------------------------
 
 CONSTANT:
-
-    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
+    ``CONFIGURE_INIT_TASK_ATTRIBUTES``
 
 DATA TYPE:
-    Boolean feature macro.
+    RTEMS Attributes (``rtems_attribute``).
 
 RANGE:
-    Defined or undefined.
-
-DEFAULT VALUE:
-    This field is not defined by default, as the user MUST select their own API
-    for initialization tasks.
+    Valid task attribute sets.
 
-DESCRIPTION:
-    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
-    a POSIX API Initialization Threads Table.  The table built by
-    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
-    is sufficient for applications which initialization the system from a
-    single task.
+DEFAULT VALUE:
+    The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
 
-    By default, this field is not defined as the user MUST select their own API
-    for initialization tasks.
+DESCRIPTION:
+    ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
+    initialization task defined by the Classic API Initialization Tasks Table.
 
 NOTES:
-    The application may choose to use the initialization tasks or threads table
-    from another API.
-
-    A compile time error will be generated if the user does not configure any
-    initialization tasks or threads.
+    None.
 
-.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
 
-.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
+.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
 
-CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
----------------------------------------
+CONFIGURE_INIT_TASK_INITIAL_MODES
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
+    ``CONFIGURE_INIT_TASK_INITIAL_MODES``
 
 DATA TYPE:
-    POSIX thread function pointer (``void *(*entry_point)(void *)``).
+    RTEMS Mode (``rtems_mode``).
 
 RANGE:
-    Undefined or a valid POSIX thread function pointer.
+    Valid task mode sets.
 
 DEFAULT VALUE:
-    The default value is ``POSIX_Init``.
+    The default value is ``RTEMS_NO_PREEMPT``.
 
 DESCRIPTION:
-    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
-    (a.k.a. function name) of the single initialization thread defined by the
-    POSIX API Initialization Threads Table.
+    ``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
+    single initialization task defined by the Classic API Initialization Tasks
+    Table.
 
 NOTES:
-    The user must implement the function ``POSIX_Init`` or the function name
-    provided in this configuration parameter.
+    None.
 
-.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
 
-.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
+.. _CONFIGURE_INIT_TASK_ARGUMENTS:
 
-CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
---------------------------------------
+CONFIGURE_INIT_TASK_ARGUMENTS
+-----------------------------
 
 CONSTANT:
-    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
+    ``CONFIGURE_INIT_TASK_ARGUMENTS``
 
 DATA TYPE:
-    Unsigned integer (``size_t``).
+    RTEMS Task Argument (``rtems_task_argument``).
 
 RANGE:
-    Zero or positive.
+    Complete range of the type.
 
 DEFAULT VALUE:
-    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
+    The default value is 0.
 
 DESCRIPTION:
-    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
-    initialization thread defined by the POSIX API Initialization Threads
-    Table.
+    ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
+    initialization task defined by the Classic API Initialization Tasks Table.
 
 NOTES:
-    If the stack size specified is greater than the configured minimum, it must
-    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
-    Task/Thread Stack Memory Above Minimum` for more information about
-    ``CONFIGURE_EXTRA_TASK_STACKS``.
+    None.
 
-.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
+.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
 
-.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
+.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
 
-CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
------------------------------------------
+CONFIGURE_HAS_OWN_INIT_TASK_TABLE
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
+    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
 
 DATA TYPE:
     Boolean feature macro.
@@ -1418,456 +1483,391 @@ DEFAULT VALUE:
     This is not defined by default.
 
 DESCRIPTION:
-    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
-    to define their own POSIX API Initialization Threads Table.  This table
-    should be named ``POSIX_Initialization_threads``.
+    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE`` is defined if the user wishes to
+    define their own Classic API Initialization Tasks Table.  This table should
+    be named ``Initialization_tasks``.
 
 NOTES:
     This is a seldom used configuration parameter. The most likely use case is
     when an application desires to have more than one initialization task.
 
-Basic System Information
-========================
+POSIX API Configuration
+=======================
 
-This section defines the general system configuration parameters supported by
-``<rtems/confdefs.h>``.
+The parameters in this section are used to configure resources for the POSIX
+API supported by RTEMS.  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.
 
-.. index:: CONFIGURE_UNIFIED_WORK_AREAS
-.. index:: unified work areas
-.. index:: separate work areas
-.. index:: RTEMS Workspace
-.. index:: C Program Heap
+.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
 
-.. _CONFIGURE_UNIFIED_WORK_AREAS:
+.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
 
-CONFIGURE_UNIFIED_WORK_AREAS
+CONFIGURE_MAXIMUM_POSIX_KEYS
 ----------------------------
 
 CONSTANT:
-    ``CONFIGURE_UNIFIED_WORK_AREAS``
+    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
 
 DATA TYPE:
-    Boolean feature macro.
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Defined or undefined.
+    Zero or positive.
 
 DEFAULT VALUE:
-    This is not defined by default, which specifies that the C Program Heap and
-    the RTEMS Workspace will be separate.
+    The default value is 0.
 
 DESCRIPTION:
-    When defined, the C Program Heap and the RTEMS Workspace will be one pool
-    of memory.
-
-    When not defined, there will be separate memory pools for the RTEMS
-    Workspace and C Program Heap.
+    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
+    that can be concurrently active.
 
 NOTES:
-    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
-    RTEMS "unlimited" objects 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.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_MAXIMUM_PROCESSORS
+.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
 
-.. _CONFIGURE_MAXIMUM_PROCESSORS:
+.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
 
-CONFIGURE_MAXIMUM_PROCESSORS
-----------------------------
+CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+---------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_PROCESSORS``
+    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Positive.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 1.
+    The default value is
+    :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS <CONFIGURE_MAXIMUM_POSIX_KEYS>` *
+    :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>` +
+    :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
 
 DESCRIPTION:
-    ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to 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 thread and interrupt stack for
-    example.
+    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS`` is the maximum number of key
+    value pairs used by POSIX API Keys that can be concurrently active.
 
 NOTES:
-    If there are more processors available than configured, the rest will be
-    ignored.  This configuration define is ignored in uniprocessor
-    configurations.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_MICROSECONDS_PER_TICK
-.. index:: tick quantum
+    A key value pair is created by :c:func:`pthread_setspecific` if the value
+    is not :c:macro:`NULL`, otherwise it is deleted.
 
-.. _CONFIGURE_MICROSECONDS_PER_TICK:
+.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
 
-CONFIGURE_MICROSECONDS_PER_TICK
--------------------------------
+.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
+
+CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+--------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MICROSECONDS_PER_TICK``
+    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Positive.
+    Zero or positive.
 
 DEFAULT VALUE:
-    This is not defined by default. When not defined, the clock tick quantum is
-    configured to be 10,000 microseconds which is ten (10) milliseconds.
+    The default value is 0.
 
 DESCRIPTION:
-    This constant is  used to specify the length of time between clock ticks.
-
-    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.
-
-    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.
-
-    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.
+    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
+    API Message Queues that can be concurrently active.
 
 NOTES:
-    This configuration parameter has no impact if the Clock Tick Device driver
-    is not configured.
-
-    There may be BSP specific limits on the resolution or maximum value of a
-    clock tick quantum.
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_TICKS_PER_TIMESLICE
-.. index:: ticks per timeslice
+.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
 
-.. _CONFIGURE_TICKS_PER_TIMESLICE:
+.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
 
-CONFIGURE_TICKS_PER_TIMESLICE
------------------------------
+CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+--------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_TICKS_PER_TIMESLICE``
+    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Positive.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 50.
+    The default value is 0.
 
 DESCRIPTION:
-    This configuration parameter specifies the length of the timeslice quantum
-    in ticks for each task.
+    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
+    API Queued Signals that can be concurrently active.
 
 NOTES:
-    This configuration parameter has no impact if the Clock Tick Device driver
-    is not configured.
+    Unlimited objects are not available for queued signals.
 
-.. index:: CONFIGURE_MAXIMUM_PRIORITY
-.. index:: maximum priority
-.. index:: number of priority levels
+    Queued signals are only available if RTEMS was built with the
+    ``--enable-posix`` build configuration option.
 
-.. _CONFIGURE_MAXIMUM_PRIORITY:
+.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
 
-CONFIGURE_MAXIMUM_PRIORITY
---------------------------
+.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
+
+CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+----------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_PRIORITY``
+    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
 
 DATA TYPE:
-    Unsigned integer (``uint8_t``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    Valid values for this configuration parameter must be one (1) less than
-    than a power of two (2) between 4 and 256 inclusively.  In other words,
-    valid values are 3, 7, 31, 63, 127, and 255.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 255, because RTEMS must support 256 priority levels to
-    be compliant with various standards. These priorities range from zero (0)
-    to 255.
+    The default value is 0.
 
 DESCRIPTION:
-   This configuration parameter specified the maximum numeric priority of any
-   task in the system and one less that the number of priority levels in the
-   system.
-
-   Reducing the number of priorities in the system reduces the amount of memory
-   allocated from the RTEMS Workspace.
-
-NOTES:
-   The numerically greatest priority is the logically lowest priority in the
-   system and will thus be used by the IDLE task.
+    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
+    Named Semaphores that can be concurrently active.
 
-   Priority zero (0) is reserved for internal use by RTEMS and is not available
-   to applications.
+NOTES:
+    This object class can be configured in unlimited allocation mode.
 
-   With some schedulers, reducing the number of priorities can reduce the
-   amount of memory used by the scheduler. For example, the Deterministic
-   Priority Scheduler (DPS) used by default uses three pointers of storage per
-   priority level. Reducing the number of priorities from 256 levels to
-   sixteen (16) can reduce memory usage by about three (3) kilobytes.
+    Named semaphores are created with ``sem_open()``.  Semaphores initialized
+    with ``sem_init()`` are not affected by this configuration option since the
+    storage space for these semaphores is user-provided.
 
-.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
-.. index:: maximum thread name size
+.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
 
-.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
+.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
 
-CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
-----------------------------------
+CONFIGURE_MAXIMUM_POSIX_TIMERS
+------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
+    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
 
 DATA TYPE:
-    Unsigned integer (``size_t``).
+    Unsigned integer (``uint32_t``).
 
 RANGE:
-    No restrictions.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is 16.  This value was chosen for Linux compatibility,
-    see
-    `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
+    The default value is 0.
 
 DESCRIPTION:
-   This configuration parameter specifies the maximum thread name size
-   including the terminating `NUL` character.
+    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
+    Timers that can be concurrently active.
 
-NOTE:
-   The size of the thread control block is increased by the maximum thread name
-   size.  This configuration option is available since RTEMS 5.1.
+NOTES:
+    This object class can be configured in unlimited allocation mode.
 
-.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
-.. index:: minimum task stack size
+    Timers are only available if RTEMS was built with the
+    ``--enable-posix`` build configuration option.
 
-.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
+.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
 
-CONFIGURE_MINIMUM_TASK_STACK_SIZE
----------------------------------
+.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
+
+CONFIGURE_MAXIMUM_POSIX_THREADS
+-------------------------------
 
 CONSTANT:
-    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
+    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
 
 DATA TYPE:
     Unsigned integer (``uint32_t``).
 
 RANGE:
-    Positive.
+    Zero or positive.
 
 DEFAULT VALUE:
-    The default value is architecture-specific.
+    The default value is 0.
 
 DESCRIPTION:
-    This configuration parameter defines the minimum stack size in bytes for
-    every user task or thread in the system.
+    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
+    Threads that can be concurrently active.
 
 NOTES:
-    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 <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 must be done with caution as it could increase the
-    possibility of a blown task stack.
+    This object class can be configured in unlimited allocation mode.
 
-    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.
+    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 parameter
+    ``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``.
 
-    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 <CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE>`
-    configuration option.
+    The maximum number of Classic API Tasks is specified by
+    :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>`.
 
-    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
-    <CONFIGURE_INTERRUPT_STACK_SIZE>`.
+    All POSIX threads have floating point enabled.
 
-.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
-.. index:: interrupt stack size
+.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
+.. index:: minimum POSIX thread stack size
 
-.. _CONFIGURE_INTERRUPT_STACK_SIZE:
+.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
 
-CONFIGURE_INTERRUPT_STACK_SIZE
-------------------------------
+CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
+-----------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_INTERRUPT_STACK_SIZE``
+    ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
 
 DATA TYPE:
-    Unsigned integer.
+    Unsigned integer (``size_t``).
 
 RANGE:
     Positive.
 
 DEFAULT VALUE:
-    The default value is ``BSP_INTERRUPT_STACK_SIZE`` in case it is defined,
-    otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``.
+    The default value is two times the value of
+    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE <CONFIGURE_MINIMUM_TASK_STACK_SIZE>`.
 
 DESCRIPTION:
-    The ``CONFIGURE_INTERRUPT_STACK_SIZE`` configuration option defines the
-    size of an interrupt stack in bytes.
+    This configuration parameter defines the minimum stack size in bytes for
+    every POSIX thread in the system.
 
 NOTES:
-    The interrupt stack size must be aligned according to
-    ``CPU_INTERRUPT_STACK_ALIGNMENT``.
-
-    There is one interrupt stack available for each configured processor
-    (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <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.
+    None.
 
-    The interrupt stacks are covered by the :ref:`stack checker
-    <CONFIGURE_STACK_CHECKER_ENABLED>`.  However, using a too small interrupt
-    stack size may still result in undefined behaviour.
+POSIX Initialization Threads Table Configuration
+================================================
 
-    In releases before RTEMS 5.1 the default value was
-    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE
-    <CONFIGURE_MINIMUM_TASK_STACK_SIZE>` instead of ``CPU_STACK_MINIMUM_SIZE``.
+The ``<rtems/confdefs.h>`` configuration system can automatically generate a
+POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
+a single entry.  The following parameters control the generation of that table.
 
-.. index:: CONFIGURE_EXTRA_TASK_STACKS
-.. index:: memory for task tasks
+.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
 
-.. _CONFIGURE_EXTRA_TASK_STACKS:
+.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
 
-CONFIGURE_EXTRA_TASK_STACKS
----------------------------
+CONFIGURE_POSIX_INIT_THREAD_TABLE
+---------------------------------
 
 CONSTANT:
-    ``CONFIGURE_EXTRA_TASK_STACKS``
+
+    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
 
 DATA TYPE:
-    Unsigned integer (``size_t``).
+    Boolean feature macro.
 
 RANGE:
-    Undefined or positive.
+    Defined or undefined.
 
 DEFAULT VALUE:
-    The default value is 0.
+    This field is not defined by default, as the user MUST select their own API
+    for initialization tasks.
 
 DESCRIPTION:
-    This configuration parameter is set to the number of bytes the applications
-    wishes to add to the task stack requirements calculated by
-    ``<rtems/confdefs.h>``.
+    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
+    a POSIX API Initialization Threads Table.  The table built by
+    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
+    is sufficient for applications which initialization the system from a
+    single task.
+
+    By default, this field is not defined as the user MUST select their own API
+    for initialization tasks.
 
 NOTES:
-    This parameter is very important.  If the application creates tasks with
-    stacks larger then the minimum, then that memory is NOT accounted for by
-    ``<rtems/confdefs.h>``.
+    The application may choose to use the initialization tasks or threads table
+    from another API.
 
-.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
-.. index:: clear C Program Heap
-.. index:: clear RTEMS Workspace
-.. index:: zero C Program Heap
-.. index:: zero RTEMS Workspace
+    A compile time error will be generated if the user does not configure any
+    initialization tasks or threads.
 
-.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
+.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
 
-CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
---------------------------------------
+.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
+
+CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+---------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
+    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
 
 DATA TYPE:
-    Boolean feature macro.
+    POSIX thread function pointer (``void *(*entry_point)(void *)``).
 
 RANGE:
-    Defined or undefined.
+    Undefined or a valid POSIX thread function pointer.
 
 DEFAULT VALUE:
-    This is not defined by default, unless overridden by the BSP.  The default
-    is *NOT* to zero out the RTEMS Workspace or C Program Heap.
+    The default value is ``POSIX_Init``.
 
 DESCRIPTION:
-    This macro indicates whether RTEMS should zero the RTEMS Workspace and C
-    Program Heap as part of its initialization.  If defined, the memory regions
-    are zeroed.  Otherwise, they are not.
+    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
+    (a.k.a. function name) of the single initialization thread defined by the
+    POSIX API Initialization Threads Table.
 
 NOTES:
-    Zeroing memory can add significantly to system boot time. It is not
-    necessary for RTEMS but is often assumed by support libraries.
+    The user must implement the function ``POSIX_Init`` or the function name
+    provided in this configuration parameter.
 
-.. index:: CONFIGURE_STACK_CHECKER_ENABLED
+.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
 
-.. _CONFIGURE_STACK_CHECKER_ENABLED:
+.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
 
-CONFIGURE_STACK_CHECKER_ENABLED
--------------------------------
+CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+--------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_STACK_CHECKER_ENABLED``
+    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
 
 DATA TYPE:
-    Boolean feature macro.
+    Unsigned integer (``size_t``).
 
 RANGE:
-    Defined or undefined.
+    Zero or positive.
 
 DEFAULT VALUE:
-    This is not defined by default, and thus stack checking is disabled.
+    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
 
 DESCRIPTION:
-    This configuration parameter is defined when the application wishes to
-    enable run-time stack bounds checking.
+    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
+    initialization thread defined by the POSIX API Initialization Threads
+    Table.
 
 NOTES:
-    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
-
-    This increases the time required to create tasks as well as adding overhead
-    to each context switch.
+    If the stack size specified is greater than the configured minimum, it must
+    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
+    Task/Thread Stack Memory Above Minimum` for more information about
+    ``CONFIGURE_EXTRA_TASK_STACKS``.
 
-.. index:: CONFIGURE_INITIAL_EXTENSIONS
+.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
 
-.. _CONFIGURE_INITIAL_EXTENSIONS:
+.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
 
-CONFIGURE_INITIAL_EXTENSIONS
-----------------------------
+CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
+-----------------------------------------
 
 CONSTANT:
-    ``CONFIGURE_INITIAL_EXTENSIONS``
+    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
 
 DATA TYPE:
-    List of user extension initializers (``rtems_extensions_table``).
+    Boolean feature macro.
 
 RANGE:
-    Undefined or a list of one or more user extensions.
+    Defined or undefined.
 
 DEFAULT VALUE:
     This is not defined by default.
 
 DESCRIPTION:
-    If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
-    this application specific set of initial extensions will be placed in the
-    initial extension table.
+    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
+    to define their own POSIX API Initialization Threads Table.  This table
+    should be named ``POSIX_Initialization_threads``.
 
 NOTES:
-    None.
+    This is a seldom used configuration parameter. The most likely use case is
+    when an application desires to have more than one initialization task.
 
 Configuring Custom Task Stack Allocation
 ========================================
-- 
2.16.4



More information about the devel mailing list