source: rtems-docs/c-user/configuring_a_system.rst @ 13debfb

5
Last change on this file since 13debfb was 13debfb, checked in by Sebastian Huber <sebastian.huber@…>, on 02/05/18 at 09:43:23

c-user: Fix index directives

Update #3229.

  • Property mode set to 100644
File size: 127.0 KB
RevLine 
[489740f]1.. comment SPDX-License-Identifier: CC-BY-SA-4.0
2
[c9aaf31]3.. COMMENT: COPYRIGHT (c) 1988-2008.
4.. COMMENT: On-Line Applications Research Corporation (OAR).
5.. COMMENT: All rights reserved.
6
[6c56401]7.. index:: configuring a system
[3384994]8.. _Configuring a System:
[6c56401]9
[fd6dc8c8]10Configuring a System
[4da4a15]11********************
[fd6dc8c8]12
13Introduction
14============
15
[c9aaf31]16RTEMS must be configured for an application.  This configuration encompasses a
17variety of information including the length of each clock tick, the maximum
18number of each information RTEMS object that can be created, the application
19initialization tasks, the task scheduling algorithm to be used, and the device
20drivers in the application.
21
22Although this information is contained in data structures that are used by
[265cc70]23RTEMS at system initialization time, the data structures themselves must not be
24generated by hand. RTEMS provides a set of macros system which provides a
25simple standard mechanism to automate the generation of these structures.
[c9aaf31]26
[fd6dc8c8]27.. index:: confdefs.h
28.. index:: <rtems/confdefs.h>
29
[c9aaf31]30The RTEMS header file ``<rtems/confdefs.h>`` is at the core of the automatic
31generation of system configuration. It is based on the idea of setting macros
32which define configuration parameters of interest to the application and
33defaulting or calculating all others. This variety of macros can automatically
34produce all of the configuration data required for an RTEMS application.
35
36.. sidebar: Trivia:
37
38  The term ``confdefs`` is shorthand for a *Configuration Defaults*.
39
40As a general rule, application developers only specify values for the
41configuration parameters of interest to them. They define what resources or
42features they require. In most cases, when a parameter is not specified, it
43defaults to zero (0) instances, a standards compliant value, or disabled as
44appropriate. For example, by default there will be 256 task priority levels but
45this can be lowered by the application. This number of priority levels is
46required to be compliant with the RTEID/ORKID standards upon which the Classic
47API is based. There are similar cases where the default is selected to be
48compliant with with the POSIX standard.
[fd6dc8c8]49
50For each configuration parameter in the configuration tables, the macro
[c9aaf31]51corresponding to that field is discussed. The RTEMS Maintainers expect that all
52systems can be easily configured using the ``<rtems/confdefs.h>`` mechanism and
53that using this mechanism will avoid internal RTEMS configuration changes
54impacting applications.
[fd6dc8c8]55
56Default Value Selection Philosophy
57==================================
58
[c9aaf31]59The user should be aware that the defaults are intentionally set as low as
60possible.  By default, no application resources are configured.  The
61``<rtems/confdefs.h>`` file ensures that at least one application task or
62thread is configured and that at least one of the initialization task/thread
63tables is configured.
[fd6dc8c8]64
[9aafb39]65.. _Sizing the RTEMS Workspace:
66
[fd6dc8c8]67Sizing the RTEMS Workspace
68==========================
69
[c9aaf31]70The RTEMS Workspace is a user-specified block of memory reserved for use by
71RTEMS.  The application should NOT modify this memory.  This area consists
72primarily of the RTEMS data structures whose exact size depends upon the values
73specified in the Configuration Table.  In addition, task stacks and floating
74point context areas are dynamically allocated from the RTEMS Workspace.
75
76The ``<rtems/confdefs.h>`` mechanism calculates the size of the RTEMS Workspace
77automatically.  It assumes that all tasks are floating point and that all will
78be allocated the minimum stack space.  This calculation includes the amount of
79memory that will be allocated for internal use by RTEMS. The automatic
80calculation may underestimate the workspace size truly needed by the
81application, in which case one can use the ``CONFIGURE_MEMORY_OVERHEAD`` macro
82to add a value to the estimate. See :ref:`Specify Memory Overhead` for more
83details.
[fd6dc8c8]84
85The memory area for the RTEMS Workspace is determined by the BSP.  In case the
86RTEMS Workspace is too large for the available memory, then a fatal run-time
87error occurs and the system terminates.
88
[f02e872]89The file ``<rtems/confdefs.h>`` will calculate the value of the
90``work_space_size`` parameter of the Configuration Table. There are many
[c9aaf31]91parameters the application developer can specify to help ``<rtems/confdefs.h>``
92in its calculations.  Correctly specifying the application requirements via
93parameters such as ``CONFIGURE_EXTRA_TASK_STACKS`` and
94``CONFIGURE_MAXIMUM_TASKS`` is critical for production software.
95
96For each class of objects, the allocation can operate in one of two ways.  The
97default way has an ceiling on the maximum number of object instances which can
98concurrently exist in the system. Memory for all instances of that object class
99is reserved at system initialization.  The second way allocates memory for an
100initial number of objects and increases the current allocation by a fixed
101increment when required. Both ways allocate space from inside the RTEMS
102Workspace.
103
104See :ref:`Unlimited Objects` for more details about the second way, which
105allows for dynamic allocation of objects and therefore does not provide
106determinism.  This mode is useful mostly for when the number of objects cannot
107be determined ahead of time or when porting software for which you do not know
108the object requirements.
109
110The space needed for stacks and for RTEMS objects will vary from one version of
111RTEMS and from one target processor to another.  Therefore it is safest to use
112``<rtems/confdefs.h>`` and specify your application's requirements in terms of
113the numbers of objects and multiples of ``RTEMS_MINIMUM_STACK_SIZE``, as far as
114is possible. The automatic estimates of space required will in general change
115when:
[fd6dc8c8]116
117- a configuration parameter is changed,
118
119- task or interrupt stack sizes change,
120
121- the floating point attribute of a task changes,
122
123- task floating point attribute is altered,
124
125- RTEMS is upgraded, or
126
127- the target processor is changed.
128
129Failure to provide enough space in the RTEMS Workspace may result in fatal
130run-time errors terminating the system.
131
132Potential Issues with RTEMS Workspace Size Estimation
133=====================================================
134
[c9aaf31]135The ``<rtems/confdefs.h>`` file estimates the amount of memory required for the
136RTEMS Workspace.  This estimate is only as accurate as the information given to
137``<rtems/confdefs.h>`` and may be either too high or too low for a variety of
138reasons.  Some of the reasons that ``<rtems/confdefs.h>`` may reserve too much
139memory for RTEMS are:
[fd6dc8c8]140
141- All tasks/threads are assumed to be floating point.
142
[c9aaf31]143Conversely, there are many more reasons that the resource estimate could be too
144low:
[fd6dc8c8]145
[c9aaf31]146- Task/thread stacks greater than minimum size must be accounted for explicitly
147  by developer.
[fd6dc8c8]148
149- Memory for messages is not included.
150
151- Device driver requirements are not included.
152
153- Network stack requirements are not included.
154
155- Requirements for add-on libraries are not included.
156
157In general, ``<rtems/confdefs.h>`` is very accurate when given enough
[c9aaf31]158information.  However, it is quite easy to use a library and forget to account
159for its resources.
[fd6dc8c8]160
161Format to be followed for making changes in this file
162=====================================================
163
[53bb72e]164MACRO NAME:
[d389819]165  Should be alphanumeric. Can have '_' (underscore).
[fd6dc8c8]166
[53bb72e]167DATA TYPE:
[fd6dc8c8]168  Please refer to all existing formats.
169
[53bb72e]170RANGE:
[fd6dc8c8]171  The range depends on the Data Type of the macro.
172
[c9aaf31]173  - If the data type is of type task priority, then its value should be an
174    integer in the range of 1 to 255.
175
176  - If the data type is an integer, then it can have numbers, characters (in
177    case the value is defined using another macro) and arithmetic operations
[9aafb39]178    (+, -, \*, /).
[fd6dc8c8]179
[c9aaf31]180  - If the data type is a function pointer the first character should be an
181    alphabet or an underscore. The rest of the string can be alphanumeric.
[fd6dc8c8]182
[c9aaf31]183  - If the data type is RTEMS Attributes or RTEMS Mode then the string should
184    be alphanumeric.
[fd6dc8c8]185
[c9aaf31]186  - If the data type is RTEMS NAME then the value should be an integer>=0 or
[53bb72e]187    ``RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )``
[c9aaf31]188
[53bb72e]189DEFAULT VALUE:
[c9aaf31]190  The default value should be in the following formats- Please note that the
191  '.' (full stop) is necessary.
192
193  - In case the value is not defined then: This is not defined by default.
[fd6dc8c8]194
[c9aaf31]195  - If we know the default value then: The default value is XXX.
196
197  - If the default value is BSP Specific then: This option is BSP specific.
198
[53bb72e]199DESCRIPTION:
[fd6dc8c8]200  The description of the macro. (No specific format)
201
[53bb72e]202NOTES:
[fd6dc8c8]203  Any further notes. (No specific format)
204
205Configuration Example
206=====================
207
[c9aaf31]208In the following example, the configuration information for a system with a
209single message queue, four (4) tasks, and a timeslice of fifty (50)
210milliseconds is as follows:
211
[25d55d4]212.. code-block:: c
[fd6dc8c8]213
214    #include <bsp.h>
215    #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
216    #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[c9aaf31]217    #define CONFIGURE_MICROSECONDS_PER_TICK   1000 /* 1 millisecond */
218    #define CONFIGURE_TICKS_PER_TIMESLICE       50 /* 50 milliseconds */
[fd6dc8c8]219    #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
220    #define CONFIGURE_MAXIMUM_TASKS 4
221    #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
[c9aaf31]222    #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
223               CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
[fd6dc8c8]224    #define CONFIGURE_INIT
225    #include <rtems/confdefs.h>
226
[c9aaf31]227In this example, only a few configuration parameters are specified. The impact
228of these are as follows:
229
230- The example specified ``CONFIGURE_RTEMS_INIT_TASK_TABLE`` but did not specify
231  any additional parameters. This results in a configuration of an application
232  which will begin execution of a single initialization task named ``Init``
233  which is non-preemptible and at priority one (1).
234
235- By specifying ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``, this application
236  is configured to have a clock tick device driver. Without a clock tick device
237  driver, RTEMS has no way to know that time is passing and will be unable to
238  support delays and wall time. Further configuration details about time are
239  provided. Per ``CONFIGURE_MICROSECONDS_PER_TICK`` and
240  ``CONFIGURE_TICKS_PER_TIMESLICE``, the user specified they wanted a clock
241  tick to occur each millisecond, and that the length of a timeslice would be
242  fifty (50) milliseconds.
243
244- By specifying ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``, the application
245  will include a console device driver. Although the console device driver may
246  support a combination of multiple serial ports and display and keyboard
247  combinations, it is only required to provide a single device named
248  ``/dev/console``. This device will be used for Standard Input, Output and
249  Error I/O Streams. Thus when ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
250  is specified, implicitly three (3) file descriptors are reserved for the
251  Standard I/O Streams and those file descriptors are associated with
252  ``/dev/console`` during initialization. All console devices are expected to
253  support the POSIX*termios* interface.
254
255- The example above specifies via ``CONFIGURE_MAXIMUM_TASKS`` that the
256  application requires a maximum of four (4) simultaneously existing Classic
257  API tasks. Similarly, by specifying ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``,
258  there may be a maximum of only one (1) concurrently existent Classic API
259  message queues.
260
261- The most surprising configuration parameter in this example is the use of
262  ``CONFIGURE_MESSAGE_BUFFER_MEMORY``. Message buffer memory is allocated from
263  the RTEMS Workspace and must be accounted for. In this example, the single
264  message queue will have up to twenty (20) messages of type ``struct
265  USER_MESSAGE``.
266
267- The ``CONFIGURE_INIT`` constant must be defined in order to make
268  ``<rtems/confdefs.h>`` instantiate the configuration data structures.  This
269  can only be defined in one source file per application that includes
270  ``<rtems/confdefs.h>`` or the symbol table will be instantiated multiple
271  times and linking errors produced.
272
273This example illustrates that parameters have default values. Among other
274things, the application implicitly used the following defaults:
275
276- All unspecified types of communications and synchronization objects in the
277  Classic and POSIX Threads API have maximums of zero (0).
[fd6dc8c8]278
279- The filesystem will be the default filesystem which is the In-Memory File
280  System (IMFS).
281
282- The application will have the default number of priority levels.
283
[c9aaf31]284- The minimum task stack size will be that recommended by RTEMS for the target
285  architecture.
[fd6dc8c8]286
[9aafb39]287.. _Unlimited Objects:
288
[fd6dc8c8]289Unlimited Objects
[53bb72e]290=================
[fd6dc8c8]291
[c9aaf31]292In real-time embedded systems the RAM is normally a limited, critical resource
293and dynamic allocation is avoided as much as possible to ensure predictable,
294deterministic execution times. For such cases, see :ref:`Sizing the RTEMS
295Workspace` for an overview of how to tune the size of the workspace.
296Frequently when users are porting software to RTEMS the precise resource
297requirements of the software is unknown. In these situations users do not need
298to control the size of the workspace very tightly because they just want to get
[fd6dc8c8]299the new software to run; later they can tune the workspace size as needed.
300
[c9aaf31]301The following object classes in the Classic API can be configured in unlimited
302mode:
[fd6dc8c8]303
[ba64982]304- Barriers
[fd6dc8c8]305
306- Message Queues
307
[ba64982]308- Partitions
[fd6dc8c8]309
[ba64982]310- Periods
[fd6dc8c8]311
[ba64982]312- Ports
[fd6dc8c8]313
314- Regions
315
[ba64982]316- Semaphores
[fd6dc8c8]317
[ba64982]318- Tasks
[fd6dc8c8]319
[ba64982]320- Timers
[fd6dc8c8]321
[ba64982]322Additionally, the following object classes from the POSIX API can be configured
323in unlimited mode:
[fd6dc8c8]324
[ba64982]325- Keys -- :c:func:`pthread_key_create`
[fd6dc8c8]326
[ba64982]327- Key Value Pairs -- :c:func:`pthread_setspecific`
[fd6dc8c8]328
[ba64982]329- Message Queues -- :c:func:`mq_open`
[fd6dc8c8]330
[ba64982]331- Named Semaphores -- :c:func:`sem_open`
[fd6dc8c8]332
[ba64982]333- Shared Memory -- :c:func:`shm_open`
[fd6dc8c8]334
[ba64982]335- Threads -- :c:func:`pthread_create`
[fd6dc8c8]336
[ba64982]337- Timers -- :c:func:`timer_create`
[fd6dc8c8]338
[ba64982]339.. warning::
[fd6dc8c8]340
[ba64982]341    The following object classes can *not* be configured in unlimited mode:
[fd6dc8c8]342
[ba64982]343    - Drivers
[fd6dc8c8]344
[ba64982]345    - File Descriptors
[fd6dc8c8]346
[ba64982]347    - POSIX Queued Signals
[fd6dc8c8]348
[ba64982]349    - User Extensions
[fd6dc8c8]350
351Due to the memory requirements of unlimited objects it is strongly recommended
[c9aaf31]352to use them only in combination with the unified work areas. See :ref:`Separate
353or Unified Work Areas` for more information on unified work areas.
[fd6dc8c8]354
355The following example demonstrates how the two simple configuration defines for
356unlimited objects and unified works areas can replace many seperate
357configuration defines for supported object classes:
[c9aaf31]358
[25d55d4]359.. code-block:: c
[fd6dc8c8]360
361    #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
362    #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
363    #define CONFIGURE_UNIFIED_WORK_AREAS
364    #define CONFIGURE_UNLIMITED_OBJECTS
365    #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
366    #define CONFIGURE_INIT
367    #include <rtems/confdefs.h>
368
369Users are cautioned that using unlimited objects is not recommended for
[c9aaf31]370production software unless the dynamic growth is absolutely required. It is
371generally considered a safer embedded systems programming practice to know the
372system limits rather than experience an out of memory error at an arbitrary and
373largely unpredictable time in the field.
[fd6dc8c8]374
[9aafb39]375.. _Per Object Class Unlimited Object Instances:
376
[6c56401]377.. index:: rtems_resource_unlimited
378
[fd6dc8c8]379Per Object Class Unlimited Object Instances
380-------------------------------------------
381
382When the number of objects is not known ahead of time, RTEMS provides an
[c9aaf31]383auto-extending mode that can be enabled individually for each object type by
384using the macro ``rtems_resource_unlimited``. This takes a value as a
385parameter, and is used to set the object maximum number field in an API
386Configuration table. The value is an allocation unit size. When RTEMS is
387required to grow the object table it is grown by this size. The kernel will
388return the object memory back to the RTEMS Workspace when an object is
389destroyed. The kernel will only return an allocated block of objects to the
390RTEMS Workspace if at least half the allocation size of free objects remain
391allocated. RTEMS always keeps one allocation block of objects allocated. Here
392is an example of using ``rtems_resource_unlimited``:
393
[25d55d4]394.. code-block:: c
[fd6dc8c8]395
396    #define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
397
398.. index:: rtems_resource_is_unlimited
399.. index:: rtems_resource_maximum_per_allocation
400
[c9aaf31]401Object maximum specifications can be evaluated with the
402``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
403macros.
[fd6dc8c8]404
[9aafb39]405.. _Unlimited Object Instances:
406
[fd6dc8c8]407Unlimited Object Instances
408--------------------------
409
[c9aaf31]410To ease the burden of developers who are porting new software RTEMS also
411provides the capability to make all object classes listed above operate in
412unlimited mode in a simple manner. The application developer is only
413responsible for enabling unlimited objects and specifying the allocation size.
[fd6dc8c8]414
[6c56401]415.. index:: CONFIGURE_UNLIMITED_OBJECTS
[9aafb39]416
[0e8f08d]417.. _CONFIGURE_UNLIMITED_OBJECTS:
[3384994]418
[0e8f08d]419CONFIGURE_UNLIMITED_OBJECTS
420---------------------------
[fd6dc8c8]421
[53bb72e]422CONSTANT:
[fd6dc8c8]423    ``CONFIGURE_UNLIMITED_OBJECTS``
424
[53bb72e]425DATA TYPE:
[fd6dc8c8]426    Boolean feature macro.
427
[53bb72e]428RANGE:
[fd6dc8c8]429    Defined or undefined.
430
[53bb72e]431DEFAULT VALUE:
[fd6dc8c8]432    This is not defined by default.
433
[53bb72e]434DESCRIPTION:
435    ``CONFIGURE_UNLIMITED_OBJECTS`` enables ``rtems_resource_unlimited`` mode
436    for Classic API and POSIX API objects that do not already have a specific
437    maximum limit defined.
[fd6dc8c8]438
[53bb72e]439NOTES:
440    When using unlimited objects, it is common practice to also specify
441    ``CONFIGURE_UNIFIED_WORK_AREAS`` so the system operates with a single pool
442    of memory for both RTEMS and application memory allocations.
[fd6dc8c8]443
[0e8f08d]444.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
[9aafb39]445
[0e8f08d]446CONFIGURE_UNLIMITED_ALLOCATION_SIZE
447-----------------------------------
[fd6dc8c8]448
[53bb72e]449CONSTANT:
[fd6dc8c8]450    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
451
[53bb72e]452DATA TYPE:
[fd6dc8c8]453    Unsigned integer (``uint32_t``).
454
[53bb72e]455RANGE:
[fd6dc8c8]456    Positive.
457
[53bb72e]458DEFAULT VALUE:
459    If not defined and ``CONFIGURE_UNLIMITED_OBJECTS`` is defined, the default
460    value is eight (8).
[fd6dc8c8]461
[53bb72e]462DESCRIPTION:
463    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE`` provides an allocation size to use
464    for ``rtems_resource_unlimited`` when using
465    ``CONFIGURE_UNLIMITED_OBJECTS``.
[fd6dc8c8]466
[53bb72e]467NOTES:
468    By allowing users to declare all resources as being unlimited the user can
469    avoid identifying and limiting the resources
470    used. ``CONFIGURE_UNLIMITED_OBJECTS`` does not support varying the
471    allocation sizes for different objects; users who want that much control
472    can define the ``rtems_resource_unlimited`` macros themselves.
[c9aaf31]473
[25d55d4]474.. code-block:: c
[fd6dc8c8]475
476    #define CONFIGURE_UNLIMITED_OBJECTS
477    #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
478
479Classic API Configuration
480=========================
481
[c9aaf31]482This section defines the Classic API related system configuration parameters
483supported by ``<rtems/confdefs.h>``.
[fd6dc8c8]484
[6c56401]485.. index:: CONFIGURE_MAXIMUM_TASKS
[9aafb39]486
[0e8f08d]487.. _CONFIGURE_MAXIMUM_TASKS:
[3384994]488
[0e8f08d]489CONFIGURE_MAXIMUM_TASKS
490-----------------------
[fd6dc8c8]491
[53bb72e]492CONSTANT:
[fd6dc8c8]493    ``CONFIGURE_MAXIMUM_TASKS``
494
[53bb72e]495DATA TYPE:
[fd6dc8c8]496    Unsigned integer (``uint32_t``).
497
[53bb72e]498RANGE:
[fd6dc8c8]499    Zero or positive.
500
[53bb72e]501DEFAULT VALUE:
502    The default value is ``0``.
[fd6dc8c8]503
[53bb72e]504DESCRIPTION:
505    ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
506    can be concurrently active.
[fd6dc8c8]507
[53bb72e]508NOTES:
509    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]510
[53bb72e]511    The calculations for the required memory in the RTEMS Workspace for tasks
512    assume that each task has a minimum stack size and has floating point
513    support enabled.  The configuration parameter
514    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements
515    *ABOVE* the minimum size required.  See :ref:`Reserve Task/Thread Stack
516    Memory Above Minimum` for more information about
517    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c8]518
[53bb72e]519    The maximum number of POSIX threads is specified by
520    ``CONFIGURE_MAXIMUM_POSIX_THREADS``.
[fd6dc8c8]521
[53bb72e]522    A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
523    assumption that all tasks have floating point enabled. This would require
524    the addition of a new configuration parameter to specify the number of
525    tasks which enable floating point support.
[fd6dc8c8]526
527.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
528
[6c56401]529.. index:: CONFIGURE_MAXIMUM_TIMERS
[9aafb39]530
[0e8f08d]531.. _CONFIGURE_MAXIMUM_TIMERS:
[3384994]532
[0e8f08d]533CONFIGURE_MAXIMUM_TIMERS
534------------------------
[fd6dc8c8]535
[53bb72e]536CONSTANT:
[fd6dc8c8]537    ``CONFIGURE_MAXIMUM_TIMERS``
538
[53bb72e]539DATA TYPE:
[fd6dc8c8]540    Unsigned integer (``uint32_t``).
541
[53bb72e]542RANGE:
[fd6dc8c8]543    Zero or positive.
544
[53bb72e]545DEFAULT VALUE:
[fd6dc8c8]546    The default value is 0.
547
[53bb72e]548DESCRIPTION:
549    ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
550    that can be concurrently active.
[fd6dc8c8]551
[53bb72e]552NOTES:
553    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]554
[6c56401]555.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
[9aafb39]556
[0e8f08d]557.. _CONFIGURE_MAXIMUM_SEMAPHORES:
[3384994]558
[0e8f08d]559CONFIGURE_MAXIMUM_SEMAPHORES
560----------------------------
[fd6dc8c8]561
[53bb72e]562CONSTANT:
[fd6dc8c8]563    ``CONFIGURE_MAXIMUM_SEMAPHORES``
564
[53bb72e]565DATA TYPE:
[fd6dc8c8]566    Unsigned integer (``uint32_t``).
567
[53bb72e]568RANGE:
[fd6dc8c8]569    Zero or positive.
570
[53bb72e]571DEFAULT VALUE:
[fd6dc8c8]572    The default value is 0.
573
[53bb72e]574DESCRIPTION:
575    ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
576    Semaphores that can be concurrently active.
[fd6dc8c8]577
[53bb72e]578NOTES:
579    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]580
[6c56401]581.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
[9aafb39]582
[0e8f08d]583.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
[3384994]584
[0e8f08d]585CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
586---------------------------------
[fd6dc8c8]587
[53bb72e]588CONSTANT:
[fd6dc8c8]589    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
590
[53bb72e]591DATA TYPE:
[fd6dc8c8]592    Unsigned integer (``uint32_t``).
593
[53bb72e]594RANGE:
[fd6dc8c8]595    Zero or positive.
596
[53bb72e]597DEFAULT VALUE:
[fd6dc8c8]598    The default value is 0.
599
[53bb72e]600DESCRIPTION:
601    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
[a0d2eee]602    Semaphores using the :ref:`MrsP` that can be concurrently active.
[fd6dc8c8]603
[53bb72e]604NOTES:
[a0d2eee]605    This configuration option is only used in SMP configurations.  In
606    uni-processor configurations, the :ref:`PriorityCeiling` is used for MrsP
[53bb72e]607    semaphores and thus no extra memory is necessary.
[fd6dc8c8]608
[6c56401]609.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
[9aafb39]610
[0e8f08d]611.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
[3384994]612
[0e8f08d]613CONFIGURE_MAXIMUM_MESSAGE_QUEUES
614--------------------------------
[fd6dc8c8]615
[53bb72e]616CONSTANT:
[fd6dc8c8]617    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
618
[53bb72e]619DATA TYPE:
[fd6dc8c8]620    Unsigned integer (``uint32_t``).
621
[53bb72e]622RANGE:
[fd6dc8c8]623    Zero or positive.
624
[53bb72e]625DEFAULT VALUE:
[fd6dc8c8]626    The default value is 0.
627
[53bb72e]628DESCRIPTION:
629    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
630    Message Queues that can be concurrently active.
[fd6dc8c8]631
[53bb72e]632NOTES:
633    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]634
[6c56401]635.. index:: CONFIGURE_MAXIMUM_BARRIERS
[9aafb39]636
[0e8f08d]637.. _CONFIGURE_MAXIMUM_BARRIERS:
[3384994]638
[0e8f08d]639CONFIGURE_MAXIMUM_BARRIERS
640--------------------------
[fd6dc8c8]641
[53bb72e]642CONSTANT:
[fd6dc8c8]643    ``CONFIGURE_MAXIMUM_BARRIERS``
644
[53bb72e]645DATA TYPE:
[fd6dc8c8]646    Unsigned integer (``uint32_t``).
647
[53bb72e]648RANGE:
[fd6dc8c8]649    Zero or positive.
650
[53bb72e]651DEFAULT VALUE:
[fd6dc8c8]652    The default value is 0.
653
[53bb72e]654DESCRIPTION:
655    ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
656    Barriers that can be concurrently active.
[fd6dc8c8]657
[53bb72e]658NOTES:
659    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]660
[6c56401]661.. index:: CONFIGURE_MAXIMUM_PERIODS
[9aafb39]662
[0e8f08d]663.. _CONFIGURE_MAXIMUM_PERIODS:
[3384994]664
[0e8f08d]665CONFIGURE_MAXIMUM_PERIODS
666-------------------------
[fd6dc8c8]667
[53bb72e]668CONSTANT:
[fd6dc8c8]669    ``CONFIGURE_MAXIMUM_PERIODS``
670
[53bb72e]671DATA TYPE:
[fd6dc8c8]672    Unsigned integer (``uint32_t``).
673
[53bb72e]674RANGE:
[fd6dc8c8]675    Zero or positive.
676
[53bb72e]677DEFAULT VALUE:
[fd6dc8c8]678    The default value is 0.
679
[53bb72e]680DESCRIPTION:
681    ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
682    that can be concurrently active.
[fd6dc8c8]683
[53bb72e]684NOTES:
685    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]686
[6c56401]687.. index:: CONFIGURE_MAXIMUM_PARTITIONS
[9aafb39]688
[0e8f08d]689.. _CONFIGURE_MAXIMUM_PARTITIONS:
[3384994]690
[0e8f08d]691CONFIGURE_MAXIMUM_PARTITIONS
692----------------------------
[fd6dc8c8]693
[53bb72e]694CONSTANT:
[fd6dc8c8]695    ``CONFIGURE_MAXIMUM_PARTITIONS``
696
[53bb72e]697DATA TYPE:
[fd6dc8c8]698    Unsigned integer (``uint32_t``).
699
[53bb72e]700RANGE:
[fd6dc8c8]701    Zero or positive.
702
[53bb72e]703DEFAULT VALUE:
[fd6dc8c8]704    The default value is 0.
705
[53bb72e]706DESCRIPTION:
707    ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
708    Partitions that can be concurrently active.
[fd6dc8c8]709
[53bb72e]710NOTES:
711    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]712
[6c56401]713.. index:: CONFIGURE_MAXIMUM_REGIONS
[9aafb39]714
[0e8f08d]715.. _CONFIGURE_MAXIMUM_REGIONS:
[3384994]716
[0e8f08d]717CONFIGURE_MAXIMUM_REGIONS
718-------------------------
[fd6dc8c8]719
[53bb72e]720CONSTANT:
[fd6dc8c8]721    ``CONFIGURE_MAXIMUM_REGIONS``
722
[53bb72e]723DATA TYPE:
[fd6dc8c8]724    Unsigned integer (``uint32_t``).
725
[53bb72e]726RANGE:
[fd6dc8c8]727    Zero or positive.
728
[53bb72e]729DEFAULT VALUE:
[fd6dc8c8]730    The default value is 0.
731
[53bb72e]732DESCRIPTION:
733    ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
734    that can be concurrently active.
[fd6dc8c8]735
[53bb72e]736NOTES:
737    None.
[fd6dc8c8]738
[6c56401]739.. index:: CONFIGURE_MAXIMUM_PORTS
[9aafb39]740
[0e8f08d]741.. _CONFIGURE_MAXIMUM_PORTS:
[3384994]742
[0e8f08d]743CONFIGURE_MAXIMUM_PORTS
744-----------------------
[fd6dc8c8]745
[53bb72e]746CONSTANT:
[fd6dc8c8]747    ``CONFIGURE_MAXIMUM_PORTS``
748
[53bb72e]749DATA TYPE:
[fd6dc8c8]750    Unsigned integer (``uint32_t``).
751
[53bb72e]752RANGE:
[fd6dc8c8]753    Zero or positive.
754
[53bb72e]755DEFAULT VALUE:
[fd6dc8c8]756    The default value is 0.
757
[53bb72e]758DESCRIPTION:
759    ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
760    can be concurrently active.
[fd6dc8c8]761
[53bb72e]762NOTES:
763    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]764
[6c56401]765.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
[9aafb39]766
[0e8f08d]767.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
[3384994]768
[0e8f08d]769CONFIGURE_MAXIMUM_USER_EXTENSIONS
770---------------------------------
[fd6dc8c8]771
[53bb72e]772CONSTANT:
[fd6dc8c8]773    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
774
[53bb72e]775DATA TYPE:
[fd6dc8c8]776    Unsigned integer (``uint32_t``).
777
[53bb72e]778RANGE:
[fd6dc8c8]779    Zero or positive.
780
[53bb72e]781DEFAULT VALUE:
[fd6dc8c8]782    The default value is 0.
783
[53bb72e]784DESCRIPTION:
785    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
786    User Extensions that can be concurrently active.
[fd6dc8c8]787
[53bb72e]788NOTES:
789    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]790
791Classic API Initialization Tasks Table Configuration
792====================================================
793
[c9aaf31]794The ``<rtems/confdefs.h>`` configuration system can automatically generate an
795Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
796The following parameters control the generation of that table.
[fd6dc8c8]797
[6c56401]798.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
[9aafb39]799
[0e8f08d]800.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
[3384994]801
[0e8f08d]802CONFIGURE_RTEMS_INIT_TASKS_TABLE
803--------------------------------
[fd6dc8c8]804
[53bb72e]805CONSTANT:
[fd6dc8c8]806    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
807
[53bb72e]808DATA TYPE:
[fd6dc8c8]809    Boolean feature macro.
810
[53bb72e]811RANGE:
[fd6dc8c8]812    Defined or undefined.
813
[53bb72e]814DEFAULT VALUE:
[fd6dc8c8]815    This is not defined by default.
816
[53bb72e]817DESCRIPTION:
818    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
819    Classic RTEMS API Initialization Task Table. The table built by
820    ``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
821    sufficient for applications which initialization the system from a single
822    task.
[fd6dc8c8]823
[53bb72e]824    By default, this field is not defined as the user MUST select their own API
825    for initialization tasks.
[fd6dc8c8]826
[53bb72e]827NOTES:
828    The application may choose to use the initialization tasks or threads table
829    from another API.
[fd6dc8c8]830
[53bb72e]831    A compile time error will be generated if the user does not configure any
832    initialization tasks or threads.
[fd6dc8c8]833
[6c56401]834.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
[9aafb39]835
[0e8f08d]836.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
[3384994]837
[0e8f08d]838CONFIGURE_INIT_TASK_ENTRY_POINT
839-------------------------------
[fd6dc8c8]840
[53bb72e]841CONSTANT:
[fd6dc8c8]842    ``CONFIGURE_INIT_TASK_ENTRY_POINT``
843
[53bb72e]844DATA TYPE:
[fd6dc8c8]845    Task entry function pointer (``rtems_task_entry``).
846
[53bb72e]847RANGE:
[fd6dc8c8]848    Valid task entry function pointer.
849
[53bb72e]850DEFAULT VALUE:
[fd6dc8c8]851    The default value is ``Init``.
852
[53bb72e]853DESCRIPTION:
854    ``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
855    name) of the single initialization task defined by the Classic API
856    Initialization Tasks Table.
[fd6dc8c8]857
[53bb72e]858NOTES:
859    The user must implement the function ``Init`` or the function name provided
860    in this configuration parameter.
[fd6dc8c8]861
[6c56401]862.. index:: CONFIGURE_INIT_TASK_NAME
[9aafb39]863
[0e8f08d]864.. _CONFIGURE_INIT_TASK_NAME:
[3384994]865
[0e8f08d]866CONFIGURE_INIT_TASK_NAME
867------------------------
[fd6dc8c8]868
[53bb72e]869CONSTANT:
[fd6dc8c8]870    ``CONFIGURE_INIT_TASK_NAME``
871
[53bb72e]872DATA TYPE:
[fd6dc8c8]873    RTEMS Name (``rtems_name``).
874
[53bb72e]875RANGE:
[fd6dc8c8]876    Any value.
877
[53bb72e]878DEFAULT VALUE:
[fd6dc8c8]879    The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
880
[53bb72e]881DESCRIPTION:
882    ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
883    defined by the Classic API Initialization Tasks Table.
[fd6dc8c8]884
[53bb72e]885NOTES:
886    None.
[fd6dc8c8]887
[6c56401]888.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
[9aafb39]889
[0e8f08d]890.. _CONFIGURE_INIT_TASK_STACK_SIZE:
[3384994]891
[0e8f08d]892CONFIGURE_INIT_TASK_STACK_SIZE
893------------------------------
[fd6dc8c8]894
[53bb72e]895CONSTANT:
[fd6dc8c8]896    ``CONFIGURE_INIT_TASK_STACK_SIZE``
897
[53bb72e]898DATA TYPE:
[fd6dc8c8]899    Unsigned integer (``size_t``).
900
[53bb72e]901RANGE:
[fd6dc8c8]902    Zero or positive.
903
[53bb72e]904DEFAULT VALUE:
[fd6dc8c8]905    The default value is RTEMS_MINIMUM_STACK_SIZE.
906
[53bb72e]907DESCRIPTION:
908    ``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
909    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c8]910
[53bb72e]911NOTES:
912    If the stack size specified is greater than the configured minimum, it must
913    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
914    Task/Thread Stack Memory Above Minimum` for more information about
915    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c8]916
[6c56401]917.. index:: CONFIGURE_INIT_TASK_PRIORITY
[9aafb39]918
[0e8f08d]919.. _CONFIGURE_INIT_TASK_PRIORITY:
[3384994]920
[0e8f08d]921CONFIGURE_INIT_TASK_PRIORITY
922----------------------------
[fd6dc8c8]923
[53bb72e]924CONSTANT:
[fd6dc8c8]925    ``CONFIGURE_INIT_TASK_PRIORITY``
926
[53bb72e]927DATA TYPE:
[fd6dc8c8]928    RTEMS Task Priority (``rtems_task_priority``).
929
[53bb72e]930RANGE:
[fd6dc8c8]931    One (1) to CONFIGURE_MAXIMUM_PRIORITY.
932
[53bb72e]933DEFAULT VALUE:
934    The default value is 1, which is the highest priority in the Classic API.
[fd6dc8c8]935
[53bb72e]936DESCRIPTION:
937    ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
938    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c8]939
[53bb72e]940NOTES:
941    None.
[fd6dc8c8]942
943
[6c56401]944.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
[9aafb39]945
[0e8f08d]946.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
[3384994]947
[0e8f08d]948CONFIGURE_INIT_TASK_ATTRIBUTES
949------------------------------
[fd6dc8c8]950
[53bb72e]951CONSTANT:
[fd6dc8c8]952    ``CONFIGURE_INIT_TASK_ATTRIBUTES``
953
[53bb72e]954DATA TYPE:
[fd6dc8c8]955    RTEMS Attributes (``rtems_attribute``).
956
[53bb72e]957RANGE:
[fd6dc8c8]958    Valid task attribute sets.
959
[53bb72e]960DEFAULT VALUE:
[fd6dc8c8]961    The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
962
[53bb72e]963DESCRIPTION:
964    ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
965    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c8]966
[53bb72e]967NOTES:
968    None.
[fd6dc8c8]969
[6c56401]970.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
[9aafb39]971
[0e8f08d]972.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
[3384994]973
[0e8f08d]974CONFIGURE_INIT_TASK_INITIAL_MODES
975---------------------------------
[fd6dc8c8]976
[53bb72e]977CONSTANT:
[fd6dc8c8]978    ``CONFIGURE_INIT_TASK_INITIAL_MODES``
979
[53bb72e]980DATA TYPE:
[fd6dc8c8]981    RTEMS Mode (``rtems_mode``).
982
[53bb72e]983RANGE:
[fd6dc8c8]984    Valid task mode sets.
985
[53bb72e]986DEFAULT VALUE:
[fd6dc8c8]987    The default value is ``RTEMS_NO_PREEMPT``.
988
[53bb72e]989DESCRIPTION:
990    ``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
991    single initialization task defined by the Classic API Initialization Tasks
992    Table.
[fd6dc8c8]993
[53bb72e]994NOTES:
995    None.
[fd6dc8c8]996
[6c56401]997.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
[9aafb39]998
[0e8f08d]999.. _CONFIGURE_INIT_TASK_ARGUMENTS:
[3384994]1000
[0e8f08d]1001CONFIGURE_INIT_TASK_ARGUMENTS
1002-----------------------------
[fd6dc8c8]1003
[53bb72e]1004CONSTANT:
[fd6dc8c8]1005    ``CONFIGURE_INIT_TASK_ARGUMENTS``
1006
[53bb72e]1007DATA TYPE:
[fd6dc8c8]1008    RTEMS Task Argument (``rtems_task_argument``).
1009
[53bb72e]1010RANGE:
[fd6dc8c8]1011    Complete range of the type.
1012
[53bb72e]1013DEFAULT VALUE:
[fd6dc8c8]1014    The default value is 0.
1015
[53bb72e]1016DESCRIPTION:
1017    ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
1018    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c8]1019
[53bb72e]1020NOTES:
1021    None.
[fd6dc8c8]1022
[6c56401]1023.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
[9aafb39]1024
[0e8f08d]1025.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
[3384994]1026
[0e8f08d]1027CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1028---------------------------------
[fd6dc8c8]1029
[53bb72e]1030CONSTANT:
[fd6dc8c8]1031    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
1032
[53bb72e]1033DATA TYPE:
[fd6dc8c8]1034    Boolean feature macro.
1035
[53bb72e]1036RANGE:
[fd6dc8c8]1037    Defined or undefined.
1038
[53bb72e]1039DEFAULT VALUE:
[fd6dc8c8]1040    This is not defined by default.
1041
[53bb72e]1042DESCRIPTION:
1043    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE`` is defined if the user wishes to
1044    define their own Classic API Initialization Tasks Table.  This table should
1045    be named ``Initialization_tasks``.
[fd6dc8c8]1046
[53bb72e]1047NOTES:
1048    This is a seldom used configuration parameter. The most likely use case is
1049    when an application desires to have more than one initialization task.
[fd6dc8c8]1050
1051POSIX API Configuration
1052=======================
1053
[c9aaf31]1054The parameters in this section are used to configure resources for the RTEMS
1055POSIX API.  They are only relevant if the POSIX API is enabled at configure
1056time using the ``--enable-posix`` option.
[fd6dc8c8]1057
[6c56401]1058.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
[9aafb39]1059
[0e8f08d]1060.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
[3384994]1061
[0e8f08d]1062CONFIGURE_MAXIMUM_POSIX_THREADS
1063-------------------------------
[fd6dc8c8]1064
[53bb72e]1065CONSTANT:
[fd6dc8c8]1066    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
1067
[53bb72e]1068DATA TYPE:
[fd6dc8c8]1069    Unsigned integer (``uint32_t``).
1070
[53bb72e]1071RANGE:
[fd6dc8c8]1072    Zero or positive.
1073
[53bb72e]1074DEFAULT VALUE:
[fd6dc8c8]1075    The default value is 0.
1076
[53bb72e]1077DESCRIPTION:
1078    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
1079    Threads that can be concurrently active.
[fd6dc8c8]1080
[53bb72e]1081NOTES:
1082    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]1083
[53bb72e]1084    This calculations for the required memory in the RTEMS Workspace for
1085    threads assume that each thread has a minimum stack size and has floating
1086    point support enabled.  The configuration parameter
1087    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
1088    requirements *ABOVE* the minimum size required.  See :ref:`Reserve
1089    Task/Thread Stack Memory Above Minimum` for more information about
1090    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c8]1091
[53bb72e]1092    The maximum number of Classic API Tasks is specified by
1093    ``CONFIGURE_MAXIMUM_TASKS``.
[fd6dc8c8]1094
[53bb72e]1095    All POSIX threads have floating point enabled.
[fd6dc8c8]1096
[6c56401]1097.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
[9aafb39]1098
[0e8f08d]1099.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
[3384994]1100
[0e8f08d]1101CONFIGURE_MAXIMUM_POSIX_KEYS
1102----------------------------
[fd6dc8c8]1103
[53bb72e]1104CONSTANT:
[fd6dc8c8]1105    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
1106
[53bb72e]1107DATA TYPE:
[fd6dc8c8]1108    Unsigned integer (``uint32_t``).
1109
[53bb72e]1110RANGE:
[fd6dc8c8]1111    Zero or positive.
1112
[53bb72e]1113DEFAULT VALUE:
[fd6dc8c8]1114    The default value is 0.
1115
[53bb72e]1116DESCRIPTION:
1117    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
1118    that can be concurrently active.
[fd6dc8c8]1119
[53bb72e]1120NOTES:
1121    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]1122
[6c56401]1123.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
[9aafb39]1124
[0e8f08d]1125.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
[3384994]1126
[0e8f08d]1127CONFIGURE_MAXIMUM_POSIX_TIMERS
1128------------------------------
[fd6dc8c8]1129
[53bb72e]1130CONSTANT:
[fd6dc8c8]1131    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
1132
[53bb72e]1133DATA TYPE:
[fd6dc8c8]1134    Unsigned integer (``uint32_t``).
1135
[53bb72e]1136RANGE:
[fd6dc8c8]1137    Zero or positive.
1138
[53bb72e]1139DEFAULT VALUE:
[fd6dc8c8]1140    The default value is 0.
1141
[53bb72e]1142DESCRIPTION:
1143    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
1144    Timers that can be concurrently active.
[fd6dc8c8]1145
[53bb72e]1146NOTES:
1147    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]1148
[6c56401]1149.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
[9aafb39]1150
[0e8f08d]1151.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
[3384994]1152
[0e8f08d]1153CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1154--------------------------------------
[fd6dc8c8]1155
[53bb72e]1156CONSTANT:
[fd6dc8c8]1157    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
1158
[53bb72e]1159DATA TYPE:
[fd6dc8c8]1160    Unsigned integer (``uint32_t``).
1161
[53bb72e]1162RANGE:
[fd6dc8c8]1163    Zero or positive.
1164
[53bb72e]1165DEFAULT VALUE:
[fd6dc8c8]1166    The default value is 0.
1167
[53bb72e]1168DESCRIPTION:
1169    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
1170    API Queued Signals that can be concurrently active.
[fd6dc8c8]1171
[53bb72e]1172NOTES:
1173    None.
[fd6dc8c8]1174
[6c56401]1175.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
[9aafb39]1176
[0e8f08d]1177.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
[3384994]1178
[0e8f08d]1179CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1180--------------------------------------
[fd6dc8c8]1181
[53bb72e]1182CONSTANT:
[fd6dc8c8]1183    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
1184
[53bb72e]1185DATA TYPE:
[fd6dc8c8]1186    Unsigned integer (``uint32_t``).
1187
[53bb72e]1188RANGE:
[fd6dc8c8]1189    Zero or positive.
1190
[53bb72e]1191DEFAULT VALUE:
[fd6dc8c8]1192    The default value is 0.
1193
[53bb72e]1194DESCRIPTION:
1195    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
1196    API Message Queues that can be concurrently active.
[fd6dc8c8]1197
[53bb72e]1198NOTES:
1199    This object class can be configured in unlimited allocation mode.
[fd6dc8c8]1200
[6c56401]1201.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
[64564df]1202
[0e8f08d]1203.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
[3384994]1204
[0e8f08d]1205CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1206----------------------------------
[64564df]1207
1208CONSTANT:
1209    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
1210
1211DATA TYPE:
1212    Unsigned integer (``uint32_t``).
1213
1214RANGE:
1215    Zero or positive.
1216
1217DEFAULT VALUE:
1218    The default value is 0.
1219
1220DESCRIPTION:
1221    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
1222    Named Semaphores that can be concurrently active.  Named semaphores are
1223    created with ``sem_open()``.  Semaphores initialized with ``sem_init()``
1224    are not affected by this configuration option since the storage space for
1225    these semaphores is user-provided.
1226
1227NOTES:
1228    None.
1229
[fd6dc8c8]1230POSIX Initialization Threads Table Configuration
1231================================================
1232
[c9aaf31]1233The ``<rtems/confdefs.h>`` configuration system can automatically generate a
1234POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
1235a single entry.  The following parameters control the generation of that table.
[fd6dc8c8]1236
[6c56401]1237.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
[9aafb39]1238
[0e8f08d]1239.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
[3384994]1240
[0e8f08d]1241CONFIGURE_POSIX_INIT_THREAD_TABLE
1242---------------------------------
[fd6dc8c8]1243
[53bb72e]1244CONSTANT:
1245
1246    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
[fd6dc8c8]1247
[53bb72e]1248DATA TYPE:
[fd6dc8c8]1249    Boolean feature macro.
1250
[53bb72e]1251RANGE:
[fd6dc8c8]1252    Defined or undefined.
1253
[53bb72e]1254DEFAULT VALUE:
[c9aaf31]1255    This field is not defined by default, as the user MUST select their own API
1256    for initialization tasks.
[fd6dc8c8]1257
[53bb72e]1258DESCRIPTION:
1259    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
1260    a POSIX API Initialization Threads Table.  The table built by
1261    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
1262    is sufficient for applications which initialization the system from a
1263    single task.
[fd6dc8c8]1264
[53bb72e]1265    By default, this field is not defined as the user MUST select their own API
1266    for initialization tasks.
[fd6dc8c8]1267
[53bb72e]1268NOTES:
1269    The application may choose to use the initialization tasks or threads table
1270    from another API.
[fd6dc8c8]1271
[53bb72e]1272    A compile time error will be generated if the user does not configure any
1273    initialization tasks or threads.
[fd6dc8c8]1274
[6c56401]1275.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
[9aafb39]1276
[0e8f08d]1277.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
[3384994]1278
[0e8f08d]1279CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1280---------------------------------------
[fd6dc8c8]1281
[53bb72e]1282CONSTANT:
[fd6dc8c8]1283    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
1284
[53bb72e]1285DATA TYPE:
[bcd64c6]1286    POSIX thread function pointer (``void *(*entry_point)(void *)``).
[fd6dc8c8]1287
[53bb72e]1288RANGE:
[fd6dc8c8]1289    Undefined or a valid POSIX thread function pointer.
1290
[53bb72e]1291DEFAULT VALUE:
[fd6dc8c8]1292    The default value is ``POSIX_Init``.
1293
[53bb72e]1294DESCRIPTION:
1295    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
1296    (a.k.a. function name) of the single initialization thread defined by the
1297    POSIX API Initialization Threads Table.
[fd6dc8c8]1298
[53bb72e]1299NOTES:
1300    The user must implement the function ``POSIX_Init`` or the function name
1301    provided in this configuration parameter.
[fd6dc8c8]1302
[6c56401]1303.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
[9aafb39]1304
[0e8f08d]1305.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
[3384994]1306
[0e8f08d]1307CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1308--------------------------------------
[fd6dc8c8]1309
[53bb72e]1310CONSTANT:
[fd6dc8c8]1311    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
1312
[53bb72e]1313DATA TYPE:
[fd6dc8c8]1314    Unsigned integer (``size_t``).
1315
[53bb72e]1316RANGE:
[fd6dc8c8]1317    Zero or positive.
1318
[53bb72e]1319DEFAULT VALUE:
[9aafb39]1320    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
[fd6dc8c8]1321
[53bb72e]1322DESCRIPTION:
1323    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
1324    initialization thread defined by the POSIX API Initialization Threads
1325    Table.
[fd6dc8c8]1326
[53bb72e]1327NOTES:
1328    If the stack size specified is greater than the configured minimum, it must
1329    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
1330    Task/Thread Stack Memory Above Minimum` for more information about
1331    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c8]1332
[6c56401]1333.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
[9aafb39]1334
[0e8f08d]1335.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
[3384994]1336
[0e8f08d]1337CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1338-----------------------------------------
[fd6dc8c8]1339
[53bb72e]1340CONSTANT:
[fd6dc8c8]1341    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
1342
[53bb72e]1343DATA TYPE:
[fd6dc8c8]1344    Boolean feature macro.
1345
[53bb72e]1346RANGE:
[fd6dc8c8]1347    Defined or undefined.
1348
[53bb72e]1349DEFAULT VALUE:
[fd6dc8c8]1350    This is not defined by default.
1351
[53bb72e]1352DESCRIPTION:
1353    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
1354    to define their own POSIX API Initialization Threads Table.  This table
1355    should be named ``POSIX_Initialization_threads``.
[fd6dc8c8]1356
[53bb72e]1357NOTES:
1358    This is a seldom used configuration parameter. The most likely use case is
1359    when an application desires to have more than one initialization task.
[fd6dc8c8]1360
1361Basic System Information
1362========================
1363
[c9aaf31]1364This section defines the general system configuration parameters supported by
1365``<rtems/confdefs.h>``.
[fd6dc8c8]1366
1367.. index:: CONFIGURE_UNIFIED_WORK_AREAS
1368.. index:: unified work areas
1369.. index:: separate work areas
1370.. index:: RTEMS Workspace
1371.. index:: C Program Heap
1372
[0e8f08d]1373.. _CONFIGURE_UNIFIED_WORK_AREAS:
[3384994]1374
[0e8f08d]1375CONFIGURE_UNIFIED_WORK_AREAS
1376----------------------------
[6c56401]1377
[53bb72e]1378CONSTANT:
[fd6dc8c8]1379    ``CONFIGURE_UNIFIED_WORK_AREAS``
1380
[53bb72e]1381DATA TYPE:
[fd6dc8c8]1382    Boolean feature macro.
1383
[53bb72e]1384RANGE:
[fd6dc8c8]1385    Defined or undefined.
1386
[53bb72e]1387DEFAULT VALUE:
[c9aaf31]1388    This is not defined by default, which specifies that the C Program Heap and
1389    the RTEMS Workspace will be separate.
[fd6dc8c8]1390
[53bb72e]1391DESCRIPTION:
1392    When defined, the C Program Heap and the RTEMS Workspace will be one pool
1393    of memory.
[fd6dc8c8]1394
[53bb72e]1395    When not defined, there will be separate memory pools for the RTEMS
1396    Workspace and C Program Heap.
[fd6dc8c8]1397
[53bb72e]1398NOTES:
1399    Having separate pools does have some advantages in the event a task blows a
1400    stack or writes outside its memory area. However, in low memory systems the
1401    overhead of the two pools plus the potential for unused memory in either
1402    pool is very undesirable.
[fd6dc8c8]1403
[53bb72e]1404    In high memory environments, this is desirable when you want to use the
1405    RTEMS "unlimited" objects option.  You will be able to create objects until
1406    you run out of all available memory rather then just until you run out of
1407    RTEMS Workspace.
[fd6dc8c8]1408
[6c56401]1409.. index:: CONFIGURE_MAXIMUM_PROCESSORS
[1d073c5]1410
[3384994]1411.. _CONFIGURE_MAXIMUM_PROCESSORS:
1412
[0e8f08d]1413CONFIGURE_MAXIMUM_PROCESSORS
1414----------------------------
[1d073c5]1415
1416CONSTANT:
1417    ``CONFIGURE_MAXIMUM_PROCESSORS``
1418
1419DATA TYPE:
1420    Unsigned integer (``uint32_t``).
1421
1422RANGE:
1423    Positive.
1424
1425DEFAULT VALUE:
1426    The default value is 1.
1427
1428DESCRIPTION:
1429    ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to the maximum number of
1430    processors an applicaiton intends to use.  The number of acually available
1431    processors depends on the hardware and may be less.  It is recommended to
1432    use the smallest value suitable for the application in order to save
1433    memory.  Each processor needs an idle thread and interrupt stack for
1434    example.
1435
1436NOTES:
1437    If there are more processors available than configured, the rest will be
1438    ignored.  This configuration define is ignored in uni-processor
1439    configurations.
1440
[6c56401]1441.. index:: CONFIGURE_MICROSECONDS_PER_TICK
1442.. index:: tick quantum
[9aafb39]1443
[3384994]1444.. _CONFIGURE_MICROSECONDS_PER_TICK:
1445
[0e8f08d]1446CONFIGURE_MICROSECONDS_PER_TICK
1447-------------------------------
[fd6dc8c8]1448
[53bb72e]1449CONSTANT:
[fd6dc8c8]1450    ``CONFIGURE_MICROSECONDS_PER_TICK``
1451
[53bb72e]1452DATA TYPE:
[fd6dc8c8]1453    Unsigned integer (``uint32_t``).
1454
[53bb72e]1455RANGE:
[fd6dc8c8]1456    Positive.
1457
[53bb72e]1458DEFAULT VALUE:
[c9aaf31]1459    This is not defined by default. When not defined, the clock tick quantum is
1460    configured to be 10,000 microseconds which is ten (10) milliseconds.
[fd6dc8c8]1461
[53bb72e]1462DESCRIPTION:
1463    This constant is  used to specify the length of time between clock ticks.
[fd6dc8c8]1464
[53bb72e]1465    When the clock tick quantum value is too low, the system will spend so much
1466    time processing clock ticks that it does not have processing time available
1467    to perform application work. In this case, the system will become
1468    unresponsive.
[fd6dc8c8]1469
[53bb72e]1470    The lowest practical time quantum varies widely based upon the speed of the
1471    target hardware and the architectural overhead associated with
1472    interrupts. In general terms, you do not want to configure it lower than is
1473    needed for the application.
[c9aaf31]1474
[53bb72e]1475    The clock tick quantum should be selected such that it all blocking and
1476    delay times in the application are evenly divisible by it. Otherwise,
1477    rounding errors will be introduced which may negatively impact the
1478    application.
[fd6dc8c8]1479
[53bb72e]1480NOTES:
1481    This configuration parameter has no impact if the Clock Tick Device driver
1482    is not configured.
[fd6dc8c8]1483
[53bb72e]1484    There may be BSP specific limits on the resolution or maximum value of a
1485    clock tick quantum.
[fd6dc8c8]1486
[6c56401]1487.. index:: CONFIGURE_TICKS_PER_TIMESLICE
1488.. index:: ticks per timeslice
[9aafb39]1489
[0e8f08d]1490.. _CONFIGURE_TICKS_PER_TIMESLICE:
[3384994]1491
[0e8f08d]1492CONFIGURE_TICKS_PER_TIMESLICE
1493-----------------------------
[fd6dc8c8]1494
[53bb72e]1495CONSTANT:
[fd6dc8c8]1496    ``CONFIGURE_TICKS_PER_TIMESLICE``
1497
[53bb72e]1498DATA TYPE:
[fd6dc8c8]1499    Unsigned integer (``uint32_t``).
1500
[53bb72e]1501RANGE:
[fd6dc8c8]1502    Positive.
1503
[53bb72e]1504DEFAULT VALUE:
[fd6dc8c8]1505    The default value is 50.
1506
[53bb72e]1507DESCRIPTION:
1508    This configuration parameter specifies the length of the timeslice quantum
1509    in ticks for each task.
[fd6dc8c8]1510
[53bb72e]1511NOTES:
1512    This configuration parameter has no impact if the Clock Tick Device driver
1513    is not configured.
[fd6dc8c8]1514
1515.. index:: CONFIGURE_MAXIMUM_PRIORITY
1516.. index:: maximum priority
1517.. index:: number of priority levels
1518
[0e8f08d]1519.. _CONFIGURE_MAXIMUM_PRIORITY:
[3384994]1520
[0e8f08d]1521CONFIGURE_MAXIMUM_PRIORITY
1522--------------------------
[6c56401]1523
[53bb72e]1524CONSTANT:
[fd6dc8c8]1525    ``CONFIGURE_MAXIMUM_PRIORITY``
1526
[53bb72e]1527DATA TYPE:
[fd6dc8c8]1528    Unsigned integer (``uint8_t``).
1529
[53bb72e]1530RANGE:
[fd6dc8c8]1531    Valid values for this configuration parameter must be one (1) less than
1532    than a power of two (2) between 4 and 256 inclusively.  In other words,
1533    valid values are 3, 7, 31, 63, 127, and 255.
1534
[53bb72e]1535DEFAULT VALUE:
[c9aaf31]1536    The default value is 255, because RTEMS must support 256 priority levels to
1537    be compliant with various standards. These priorities range from zero (0)
1538    to 255.
[fd6dc8c8]1539
[53bb72e]1540DESCRIPTION:
1541   This configuration parameter specified the maximum numeric priority of any
1542   task in the system and one less that the number of priority levels in the
1543   system.
[fd6dc8c8]1544
[53bb72e]1545   Reducing the number of priorities in the system reduces the amount of memory
1546   allocated from the RTEMS Workspace.
[fd6dc8c8]1547
[53bb72e]1548NOTES:
1549   The numerically greatest priority is the logically lowest priority in the
1550   system and will thus be used by the IDLE task.
[fd6dc8c8]1551
[53bb72e]1552   Priority zero (0) is reserved for internal use by RTEMS and is not available
1553   to applications.
[fd6dc8c8]1554
[53bb72e]1555   With some schedulers, reducing the number of priorities can reduce the
1556   amount of memory used by the scheduler. For example, the Deterministic
1557   Priority Scheduler (DPS) used by default uses three pointers of storage per
1558   priority level. Reducing the number of priorities from 256 levels to
1559   sixteen (16) can reduce memory usage by about three (3) kilobytes.
[fd6dc8c8]1560
[6c56401]1561.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1562.. index:: maximum thread name size
[fde6ac6]1563
[3384994]1564.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
1565
[0e8f08d]1566CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1567----------------------------------
[fde6ac6]1568
1569CONSTANT:
1570    ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
1571
1572DATA TYPE:
1573    Unsigned integer (``size_t``).
1574
1575RANGE:
1576    No restrictions.
1577
1578DEFAULT VALUE:
1579    The default value is 16.  This value was chosen for Linux compatibility,
1580    see
1581    `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
1582
1583DESCRIPTION:
1584   This configuration parameter specifies the maximum thread name size
1585   including the terminating `NUL` character.
1586
1587NOTE:
1588   The size of the thread control block is increased by the maximum thread name
[60a6d6e]1589   size.  This configuration option is available since RTEMS 5.1.
[fde6ac6]1590
[6c56401]1591.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
1592.. index:: minimum task stack size
[9aafb39]1593
[0e8f08d]1594.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
[3384994]1595
[0e8f08d]1596CONFIGURE_MINIMUM_TASK_STACK_SIZE
1597---------------------------------
[fd6dc8c8]1598
[53bb72e]1599CONSTANT:
[fd6dc8c8]1600    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
1601
[53bb72e]1602DATA TYPE:
[fd6dc8c8]1603    Unsigned integer (``uint32_t``).
1604
[53bb72e]1605RANGE:
[fd6dc8c8]1606    Positive.
1607
[53bb72e]1608DEFAULT VALUE:
[fd6dc8c8]1609    This is not defined by default, which sets the executive to the recommended
1610    minimum stack size for this processor.
1611
[53bb72e]1612DESCRIPTION:
1613    The configuration parameter is set to the number of bytes the application
1614    wants the minimum stack size to be for every task or thread in the system.
[fd6dc8c8]1615
[53bb72e]1616    Adjusting this parameter should be done with caution. Examining the actual
1617    usage using the Stack Checker Usage Reporting facility is recommended.
[fd6dc8c8]1618
[53bb72e]1619NOTES:
1620    This parameter can be used to lower the minimum from that recommended. This
1621    can be used in low memory systems to reduce memory consumption for
1622    stacks. However, this must be done with caution as it could increase the
1623    possibility of a blown task stack.
[fd6dc8c8]1624
[53bb72e]1625    This parameter can be used to increase the minimum from that
1626    recommended. This can be used in higher memory systems to reduce the risk
1627    of stack overflow without performing analysis on actual consumption.
[fd6dc8c8]1628
[6c56401]1629.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
1630.. index:: interrupt stack size
[9aafb39]1631
[0e8f08d]1632.. _CONFIGURE_INTERRUPT_STACK_SIZE:
[3384994]1633
[0e8f08d]1634CONFIGURE_INTERRUPT_STACK_SIZE
1635------------------------------
[fd6dc8c8]1636
[53bb72e]1637CONSTANT:
[fd6dc8c8]1638    ``CONFIGURE_INTERRUPT_STACK_SIZE``
1639
[53bb72e]1640DATA TYPE:
[fd6dc8c8]1641    Unsigned integer (``uint32_t``).
1642
[53bb72e]1643RANGE:
[fd6dc8c8]1644    Positive.
1645
[53bb72e]1646DEFAULT VALUE:
[c9aaf31]1647    The default value is CONFIGURE_MINIMUM_TASK_STACK_SIZE, which is the
1648    minimum interrupt stack size.
[fd6dc8c8]1649
[53bb72e]1650DESCRIPTION:
1651    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is set to the size of the interrupt
1652    stack.  The interrupt stack size is often set by the BSP but since this
1653    memory may be allocated from the RTEMS Workspace, it must be accounted for.
[fd6dc8c8]1654
[53bb72e]1655NOTES:
1656    In some BSPs, changing this constant does NOT change the size of the
1657    interrupt stack, only the amount of memory reserved for it.
[fd6dc8c8]1658
[53bb72e]1659    Patches which result in this constant only being used in memory
1660    calculations when the interrupt stack is intended to be allocated from the
1661    RTEMS Workspace would be welcomed by the RTEMS Project.
[fd6dc8c8]1662
[6c56401]1663.. index:: CONFIGURE_EXTRA_TASK_STACKS
1664.. index:: memory for task tasks
[fd6dc8c8]1665
[0e8f08d]1666.. _CONFIGURE_EXTRA_TASK_STACKS:
[3384994]1667
[0e8f08d]1668CONFIGURE_EXTRA_TASK_STACKS
1669---------------------------
[fd6dc8c8]1670
[53bb72e]1671CONSTANT:
[fd6dc8c8]1672    ``CONFIGURE_EXTRA_TASK_STACKS``
1673
[53bb72e]1674DATA TYPE:
[fd6dc8c8]1675    Unsigned integer (``size_t``).
1676
[53bb72e]1677RANGE:
[fd6dc8c8]1678    Undefined or positive.
1679
[53bb72e]1680DEFAULT VALUE:
[fd6dc8c8]1681    The default value is 0.
1682
[53bb72e]1683DESCRIPTION:
1684    This configuration parameter is set to the number of bytes the applications
1685    wishes to add to the task stack requirements calculated by
1686    ``<rtems/confdefs.h>``.
[fd6dc8c8]1687
[53bb72e]1688NOTES:
1689    This parameter is very important.  If the application creates tasks with
1690    stacks larger then the minimum, then that memory is NOT accounted for by
1691    ``<rtems/confdefs.h>``.
[fd6dc8c8]1692
1693.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1694.. index:: clear C Program Heap
1695.. index:: clear RTEMS Workspace
1696.. index:: zero C Program Heap
1697.. index:: zero RTEMS Workspace
1698
[0e8f08d]1699.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
[3384994]1700
[0e8f08d]1701CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1702--------------------------------------
[6c56401]1703
[53bb72e]1704CONSTANT:
[fd6dc8c8]1705    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
1706
[53bb72e]1707DATA TYPE:
[fd6dc8c8]1708    Boolean feature macro.
1709
[53bb72e]1710RANGE:
[fd6dc8c8]1711    Defined or undefined.
1712
[53bb72e]1713DEFAULT VALUE:
[c9aaf31]1714    This is not defined by default, unless overridden by the BSP.  The default
1715    is *NOT* to zero out the RTEMS Workspace or C Program Heap.
[fd6dc8c8]1716
[53bb72e]1717DESCRIPTION:
1718    This macro indicates whether RTEMS should zero the RTEMS Workspace and C
1719    Program Heap as part of its initialization.  If defined, the memory regions
1720    are zeroed.  Otherwise, they are not.
[fd6dc8c8]1721
[53bb72e]1722NOTES:
1723    Zeroing memory can add significantly to system boot time. It is not
1724    necessary for RTEMS but is often assumed by support libraries.
[fd6dc8c8]1725
[6c56401]1726.. index:: CONFIGURE_STACK_CHECKER_ENABLED
[9aafb39]1727
[0e8f08d]1728.. _CONFIGURE_STACK_CHECKER_ENABLED:
[3384994]1729
[0e8f08d]1730CONFIGURE_STACK_CHECKER_ENABLED
1731-------------------------------
[fd6dc8c8]1732
[53bb72e]1733CONSTANT:
[fd6dc8c8]1734    ``CONFIGURE_STACK_CHECKER_ENABLED``
1735
[53bb72e]1736DATA TYPE:
[fd6dc8c8]1737    Boolean feature macro.
1738
[53bb72e]1739RANGE:
[fd6dc8c8]1740    Defined or undefined.
1741
[53bb72e]1742DEFAULT VALUE:
[fd6dc8c8]1743    This is not defined by default, and thus stack checking is disabled.
1744
[53bb72e]1745DESCRIPTION:
1746    This configuration parameter is defined when the application wishes to
1747    enable run-time stack bounds checking.
[fd6dc8c8]1748
[53bb72e]1749NOTES:
1750    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
[fd6dc8c8]1751
[53bb72e]1752    This increases the time required to create tasks as well as adding overhead
1753    to each context switch.
[fd6dc8c8]1754
[6c56401]1755.. index:: CONFIGURE_INITIAL_EXTENSIONS
[9aafb39]1756
[3384994]1757.. _CONFIGURE_INITIAL_EXTENSIONS:
1758
[0e8f08d]1759CONFIGURE_INITIAL_EXTENSIONS
1760----------------------------
[fd6dc8c8]1761
[53bb72e]1762CONSTANT:
[fd6dc8c8]1763    ``CONFIGURE_INITIAL_EXTENSIONS``
1764
[53bb72e]1765DATA TYPE:
[fd6dc8c8]1766    List of user extension initializers (``rtems_extensions_table``).
1767
[53bb72e]1768RANGE:
[fd6dc8c8]1769    Undefined or a list of one or more user extensions.
1770
[53bb72e]1771DEFAULT VALUE:
[fd6dc8c8]1772    This is not defined by default.
1773
[53bb72e]1774DESCRIPTION:
1775    If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
1776    this application specific set of initial extensions will be placed in the
1777    initial extension table.
[fd6dc8c8]1778
[53bb72e]1779NOTES:
1780    None.
[fd6dc8c8]1781
1782Configuring Custom Task Stack Allocation
1783========================================
1784
1785RTEMS allows the application or BSP to define its own allocation and
[c9aaf31]1786deallocation methods for task stacks. This can be used to place task stacks in
1787special areas of memory or to utilize a Memory Management Unit so that stack
1788overflows are detected in hardware.
[fd6dc8c8]1789
[6c56401]1790.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
[9aafb39]1791
[0e8f08d]1792.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
[3384994]1793
[0e8f08d]1794CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1795-----------------------------------
[fd6dc8c8]1796
[53bb72e]1797CONSTANT:
[fd6dc8c8]1798    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1799
[53bb72e]1800DATA TYPE:
[fd6dc8c8]1801    Function pointer.
1802
[53bb72e]1803RANGE:
[fd6dc8c8]1804    Undefined, NULL or valid function pointer.
1805
[53bb72e]1806DEFAULT VALUE:
[c9aaf31]1807    The default value is NULL, which indicates that task stacks will be
1808    allocated from the RTEMS Workspace.
[fd6dc8c8]1809
[53bb72e]1810DESCRIPTION:
1811    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
1812    method for an application or BSP specific task stack allocation
1813    implementation.
[fd6dc8c8]1814
[53bb72e]1815NOTES:
1816    A correctly configured system must configure the following to be consistent:
[fd6dc8c8]1817
1818- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1819
1820- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1821
1822- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1823
[6c56401]1824.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
1825.. index:: task stack allocator
[9aafb39]1826
[0e8f08d]1827.. _CONFIGURE_TASK_STACK_ALLOCATOR:
[3384994]1828
[0e8f08d]1829CONFIGURE_TASK_STACK_ALLOCATOR
1830------------------------------
[fd6dc8c8]1831
[53bb72e]1832CONSTANT:
[fd6dc8c8]1833    ``CONFIGURE_TASK_STACK_ALLOCATOR``
1834
[53bb72e]1835DATA TYPE:
[fd6dc8c8]1836    Function pointer.
1837
[53bb72e]1838RANGE:
[fd6dc8c8]1839    Undefined or valid function pointer.
1840
[53bb72e]1841DEFAULT VALUE:
[c9aaf31]1842    The default value is ``_Workspace_Allocate``, which indicates that task
1843    stacks will be allocated from the RTEMS Workspace.
[fd6dc8c8]1844
[53bb72e]1845DESCRIPTION:
1846    ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
1847    allocate task stacks.
[fd6dc8c8]1848
[53bb72e]1849NOTES:
1850    A correctly configured system must configure the following to be consistent:
[fd6dc8c8]1851
1852- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1853
1854- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1855
1856- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1857
[6c56401]1858.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
1859.. index:: task stack deallocator
[9aafb39]1860
[0e8f08d]1861.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
[3384994]1862
[0e8f08d]1863CONFIGURE_TASK_STACK_DEALLOCATOR
1864--------------------------------
[fd6dc8c8]1865
[53bb72e]1866CONSTANT:
[fd6dc8c8]1867    ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1868
[53bb72e]1869DATA TYPE:
[fd6dc8c8]1870    Function pointer.
1871
[53bb72e]1872RANGE:
[fd6dc8c8]1873    Undefined or valid function pointer.
1874
[53bb72e]1875DEFAULT VALUE:
[c9aaf31]1876    The default value is ``_Workspace_Free``, which indicates that task stacks
1877    will be allocated from the RTEMS Workspace.
[fd6dc8c8]1878
[53bb72e]1879DESCRIPTION:
1880    ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
1881    to free task stacks.
[fd6dc8c8]1882
[53bb72e]1883NOTES:
1884    A correctly configured system must configure the following to be consistent:
[fd6dc8c8]1885
1886- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1887
1888- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1889
1890- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1891
1892Configuring Memory for Classic API Message Buffers
1893==================================================
1894
[c9aaf31]1895This section describes the configuration parameters related to specifying the
1896amount of memory reserved for Classic API Message Buffers.
[fd6dc8c8]1897
[6c56401]1898.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1899.. index:: memory for a single message queue's buffers
[9aafb39]1900
[0e8f08d]1901.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
[3384994]1902
[0e8f08d]1903CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1904-----------------------------------
[fd6dc8c8]1905
[53bb72e]1906CONSTANT:
[fd6dc8c8]1907    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
1908
[53bb72e]1909DATA TYPE:
[fd6dc8c8]1910    Unsigned integer (``size_t``).
1911
[53bb72e]1912RANGE:
[fd6dc8c8]1913    Positive.
1914
[53bb72e]1915DEFAULT VALUE:
[fd6dc8c8]1916    The default value is None.
1917
[53bb72e]1918DESCRIPTION:
1919    This is a helper macro which is used to assist in computing the total
1920    amount of memory required for message buffers.  Each message queue will
1921    have its own configuration with maximum message size and maximum number of
1922    pending messages.
[fd6dc8c8]1923
[53bb72e]1924    The interface for this macro is as follows:
[fd6dc8c8]1925
[53bb72e]1926    .. code-block:: c
[fd6dc8c8]1927
[53bb72e]1928        CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
[fd6dc8c8]1929
[53bb72e]1930    Where ``max_messages`` is the maximum number of pending messages and
1931    ``size_per`` is the size in bytes of the user message.
[fd6dc8c8]1932
[53bb72e]1933NOTES:
[fd6dc8c8]1934
[53bb72e]1935    This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
[fd6dc8c8]1936
[6c56401]1937.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
1938.. index:: configure message queue buffer memory
[9aafb39]1939
[0e8f08d]1940.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
[3384994]1941
[0e8f08d]1942CONFIGURE_MESSAGE_BUFFER_MEMORY
1943-------------------------------
[fd6dc8c8]1944
[53bb72e]1945CONSTANT:
[fd6dc8c8]1946    ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
1947
[53bb72e]1948DATA TYPE:
[fd6dc8c8]1949    integer summation macro
1950
[53bb72e]1951RANGE:
[fd6dc8c8]1952    undefined (zero) or calculation resulting in a positive integer
1953
[53bb72e]1954DEFAULT VALUE:
[fd6dc8c8]1955    This is not defined by default, and zero (0) memory is reserved.
1956
[53bb72e]1957DESCRIPTION:
1958    This macro is set to the number of bytes the application requires to be
1959    reserved for pending Classic API Message Queue buffers.
1960
1961NOTES:
1962    The following illustrates how the help macro
1963    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE`` can be used to assist in
1964    calculating the message buffer memory required.  In this example, there are
1965    two message queues used in this application.  The first message queue has
1966    maximum of 24 pending messages with the message structure defined by the
1967    type ``one_message_type``.  The other message queue has maximum of 500
1968    pending messages with the message structure defined by the type
1969    ``other_message_type``.
1970
1971    .. code-block:: c
1972
1973        #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
1974                    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
1975                         24, sizeof(one_message_type) \
1976                     ) + \
1977                     CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
1978                         500, sizeof(other_message_type) \
1979                     )
[fd6dc8c8]1980
1981Seldom Used Configuration Parameters
1982====================================
1983
[c9aaf31]1984This section describes configuration parameters supported by
1985``<rtems/confdefs.h>`` which are seldom used by applications. These parameters
1986tend to be oriented to debugging system configurations and providing
1987work-arounds when the memory estimated by ``<rtems/confdefs.h>`` is incorrect.
[fd6dc8c8]1988
[6c56401]1989.. index:: CONFIGURE_MEMORY_OVERHEAD
[fd6dc8c8]1990
[0e8f08d]1991.. _CONFIGURE_MEMORY_OVERHEAD:
[3384994]1992
[0e8f08d]1993CONFIGURE_MEMORY_OVERHEAD
1994-------------------------
[fd6dc8c8]1995
[53bb72e]1996CONSTANT:
[fd6dc8c8]1997    ``CONFIGURE_MEMORY_OVERHEAD``
1998
[53bb72e]1999DATA TYPE:
[fd6dc8c8]2000    Unsigned integer (``size_t``).
2001
[53bb72e]2002RANGE:
[fd6dc8c8]2003    Zero or positive.
2004
[53bb72e]2005DEFAULT VALUE:
[fd6dc8c8]2006    The default value is 0.
2007
[53bb72e]2008DESCRIPTION:
2009    This parameter is set to the number of kilobytes the application wishes to
2010    add to the requirements calculated by ``<rtems/confdefs.h>``.
[fd6dc8c8]2011
[53bb72e]2012NOTES:
2013    This configuration parameter should only be used when it is suspected that
2014    a bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.
2015    Typically the memory allocation will be too low when an application does
2016    not account for all message queue buffers or task stacks.
[fd6dc8c8]2017
[6c56401]2018.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
[9aafb39]2019
[0e8f08d]2020.. _CONFIGURE_HAS_OWN_CONFIGURATION_TABLE:
[3384994]2021
[0e8f08d]2022CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
2023-------------------------------------
[fd6dc8c8]2024
[53bb72e]2025CONSTANT:
[fd6dc8c8]2026    ``CONFIGURE_HAS_OWN_CONFIGURATION_TABLE``
2027
[53bb72e]2028DATA TYPE:
[fd6dc8c8]2029    Boolean feature macro.
2030
[53bb72e]2031RANGE:
[fd6dc8c8]2032    Defined or undefined.
2033
[53bb72e]2034DEFAULT VALUE:
[fd6dc8c8]2035    This is not defined by default.
2036
[53bb72e]2037DESCRIPTION:
2038    This configuration parameter should only be defined if the application is
2039    providing their own complete set of configuration tables.
[fd6dc8c8]2040
[53bb72e]2041NOTES:
2042    None.
[fd6dc8c8]2043
2044C Library Support Configuration
2045===============================
2046
[c9aaf31]2047This section defines the file system and IO library related configuration
2048parameters supported by ``<rtems/confdefs.h>``.
[fd6dc8c8]2049
[6c56401]2050.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2051.. index:: maximum file descriptors
[9aafb39]2052
[0e8f08d]2053.. _CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS:
[3384994]2054
[0e8f08d]2055CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2056----------------------------------------
[fd6dc8c8]2057
[53bb72e]2058CONSTANT:
[fd6dc8c8]2059    ``CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS``
2060
[53bb72e]2061DATA TYPE:
[fd6dc8c8]2062    Unsigned integer (``uint32_t``).
2063
[53bb72e]2064RANGE:
[fd6dc8c8]2065    Zero or positive.
2066
[53bb72e]2067DEFAULT VALUE:
[fd6dc8c8]2068    If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
[c9aaf31]2069    default value is 3, otherwise the default value is 0.  Three file
2070    descriptors allows RTEMS to support standard input, output, and error I/O
2071    streams on ``/dev/console``.
[fd6dc8c8]2072
[53bb72e]2073DESCRIPTION:
2074    This configuration parameter is set to the maximum number of file like
2075    objects that can be concurrently open.
[fd6dc8c8]2076
[53bb72e]2077NOTES:
2078    None.
[fd6dc8c8]2079
2080File System Configuration Parameters
2081====================================
2082
2083This section defines File System related configuration parameters.
2084
[6c56401]2085.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
[9aafb39]2086
[0e8f08d]2087.. _CONFIGURE_HAS_OWN_MOUNT_TABLE:
[3384994]2088
[0e8f08d]2089CONFIGURE_HAS_OWN_MOUNT_TABLE
2090-----------------------------
[fd6dc8c8]2091
[53bb72e]2092CONSTANT:
[fd6dc8c8]2093    ``CONFIGURE_HAS_OWN_MOUNT_TABLE``
2094
[53bb72e]2095DATA TYPE:
[fd6dc8c8]2096    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2097
[53bb72e]2098RANGE:
[fd6dc8c8]2099    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2100
[53bb72e]2101DEFAULT VALUE:
[fd6dc8c8]2102    This is not defined by default.
2103
[53bb72e]2104DESCRIPTION:
2105    This configuration parameter is defined when the application provides their
2106    own filesystem mount table.  The mount table is an array of
2107    ``rtems_filesystem_mount_table_t`` entries pointed to by the global
2108    variable ``rtems_filesystem_mount_table``.  The number of entries in this
2109    table is in an integer variable named ``rtems_filesystem_mount_table_t``.
[fd6dc8c8]2110
2111.. COMMENT: XXX - is the variable name for the count right?
2112
[53bb72e]2113NOTES:
2114    None.
[fd6dc8c8]2115
2116.. COMMENT: XXX - Please provide an example
2117
[6c56401]2118.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
[9aafb39]2119
[0e8f08d]2120.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
[3384994]2121
[0e8f08d]2122CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2123--------------------------------------
[fd6dc8c8]2124
[53bb72e]2125CONSTANT:
[fd6dc8c8]2126    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
2127
[53bb72e]2128DATA TYPE:
[fd6dc8c8]2129    Boolean feature macro.
2130
[53bb72e]2131RANGE:
[fd6dc8c8]2132    Defined or undefined.
2133
[53bb72e]2134DEFAULT VALUE:
[c9aaf31]2135    This is not defined by default. If no other root file system configuration
2136    parameters are specified, the IMFS will be used as the root file system.
[fd6dc8c8]2137
[53bb72e]2138DESCRIPTION:
2139    This configuration parameter is defined if the application wishes to use
2140    the device-only filesytem as the root file system.
[fd6dc8c8]2141
[53bb72e]2142NOTES:
2143    The device-only filesystem supports only device nodes and is smaller in
2144    executable code size than the full IMFS and miniIMFS.
[fd6dc8c8]2145
[53bb72e]2146    The devFS is comparable in functionality to the pseudo-filesystem name
2147    space provided before RTEMS release 4.5.0.
[fd6dc8c8]2148
[6c56401]2149.. index:: CONFIGURE_MAXIMUM_DEVICES
[9aafb39]2150
[0e8f08d]2151.. _CONFIGURE_MAXIMUM_DEVICES:
[3384994]2152
[0e8f08d]2153CONFIGURE_MAXIMUM_DEVICES
2154-------------------------
[fd6dc8c8]2155
[53bb72e]2156CONSTANT:
[fd6dc8c8]2157    ``CONFIGURE_MAXIMUM_DEVICES``
2158
[53bb72e]2159DATA TYPE:
[fd6dc8c8]2160    Unsigned integer (``uint32_t``).
2161
[53bb72e]2162RANGE:
[fd6dc8c8]2163    Positive.
2164
[53bb72e]2165DEFAULT VALUE:
[c9aaf31]2166    If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
2167    ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
[fd6dc8c8]2168
[53bb72e]2169DESCRIPTION:
2170    ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
2171    devices that may be registered in the device file system (devFS).
[fd6dc8c8]2172
[53bb72e]2173NOTES:
2174    This option is specific to the device file system (devFS) and should not be
2175    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
2176    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
2177    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
[fd6dc8c8]2178
[6c56401]2179.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
[9aafb39]2180
[0e8f08d]2181.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
[3384994]2182
[0e8f08d]2183CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2184----------------------------------------
[fd6dc8c8]2185
[53bb72e]2186CONSTANT:
[fd6dc8c8]2187    ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
2188
[53bb72e]2189DATA TYPE:
[fd6dc8c8]2190    Boolean feature macro.
2191
[53bb72e]2192RANGE:
[fd6dc8c8]2193    Defined or undefined.
2194
[53bb72e]2195DEFAULT VALUE:
[c9aaf31]2196    This is not defined by default. If no other root file system configuration
2197    parameters are specified, the IMFS will be used as the root file system.
[fd6dc8c8]2198
[53bb72e]2199DESCRIPTION:
2200    This configuration parameter is defined if the application dose not intend
2201    to use any kind of filesystem support. This include the device
2202    infrastructure necessary to support ``printf()``.
[fd6dc8c8]2203
[53bb72e]2204NOTES:
2205    None.
[fd6dc8c8]2206
[6c56401]2207.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
[9aafb39]2208
[0e8f08d]2209.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
[3384994]2210
[0e8f08d]2211CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2212-----------------------------------------
[fd6dc8c8]2213
[53bb72e]2214CONSTANT:
[fd6dc8c8]2215    ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
2216
[53bb72e]2217DATA TYPE:
[fd6dc8c8]2218    Boolean feature macro.
2219
[53bb72e]2220RANGE:
[fd6dc8c8]2221    Defined or undefined.
2222
[53bb72e]2223DEFAULT VALUE:
[fd6dc8c8]2224    This is not defined by default.
2225
[53bb72e]2226DESCRIPTION:
2227    In case this configuration option is defined, then the following
2228    configuration options will be defined as well
[fd6dc8c8]2229
[53bb72e]2230    - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
[fd6dc8c8]2231
[53bb72e]2232    - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
[fd6dc8c8]2233
[53bb72e]2234    - ``CONFIGURE_IMFS_DISABLE_UTIME``,
[fd6dc8c8]2235
[53bb72e]2236    - ``CONFIGURE_IMFS_DISABLE_LINK``,
[fd6dc8c8]2237
[53bb72e]2238    - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
[fd6dc8c8]2239
[53bb72e]2240    - ``CONFIGURE_IMFS_DISABLE_READLINK``,
[fd6dc8c8]2241
[53bb72e]2242    - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
[fd6dc8c8]2243
[53bb72e]2244    - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
[fd6dc8c8]2245
[6c56401]2246.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
[9aafb39]2247
[0e8f08d]2248.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
[3384994]2249
[0e8f08d]2250CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2251--------------------------------------
[fd6dc8c8]2252
[53bb72e]2253CONSTANT:
[fd6dc8c8]2254    ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
2255
[53bb72e]2256DATA TYPE:
[fd6dc8c8]2257    Boolean feature macro.
2258
[53bb72e]2259RANGE:
[fd6dc8c8]2260    Valid values for this configuration parameter are a power of two (2)
[c9aaf31]2261    between 16 and 512 inclusive.  In other words, valid values are 16, 32, 64,
2262    128, 256,and 512.
[fd6dc8c8]2263
[53bb72e]2264DEFAULT VALUE:
[fd6dc8c8]2265    The default IMFS block size is 128 bytes.
2266
[53bb72e]2267DESCRIPTION:
2268    This configuration parameter specifies the block size for in-memory files
2269    managed by the IMFS. The configured block size has two impacts. The first
2270    is the average amount of unused memory in the last block of each file. For
2271    example, when the block size is 512, on average one-half of the last block
2272    of each file will remain unused and the memory is wasted. In contrast, when
2273    the block size is 16, the average unused memory per file is only 8
2274    bytes. However, it requires more allocations for the same size file and
2275    thus more overhead per block for the dynamic memory management.
[fd6dc8c8]2276
[53bb72e]2277    Second, the block size has an impact on the maximum size file that can be
2278    stored in the IMFS. With smaller block size, the maximum file size is
2279    correspondingly smaller. The following shows the maximum file size possible
2280    based on the configured block size:
[fd6dc8c8]2281
[53bb72e]2282    - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
[fd6dc8c8]2283
[53bb72e]2284    - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
[fd6dc8c8]2285
[53bb72e]2286    - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
[fd6dc8c8]2287
[53bb72e]2288    - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
[fd6dc8c8]2289
[53bb72e]2290    - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
[c9aaf31]2291
[53bb72e]2292    - when the block size is 512 bytes, the maximum file size is 1,082,195,456
2293      bytes.
[fd6dc8c8]2294
[6c56401]2295.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
[9aafb39]2296
[0e8f08d]2297.. _CONFIGURE_IMFS_DISABLE_CHOWN:
[3384994]2298
[0e8f08d]2299CONFIGURE_IMFS_DISABLE_CHOWN
2300----------------------------
[fd6dc8c8]2301
[53bb72e]2302CONSTANT:
[fd6dc8c8]2303    ``CONFIGURE_IMFS_DISABLE_CHOWN``
2304
[53bb72e]2305DATA TYPE:
[fd6dc8c8]2306    Boolean feature macro.
2307
[53bb72e]2308RANGE:
[fd6dc8c8]2309    Defined or undefined.
2310
[53bb72e]2311DEFAULT VALUE:
[fd6dc8c8]2312    This is not defined by default.
2313
[53bb72e]2314DESCRIPTION:
2315    In case this configuration option is defined, then the support to change
2316    the owner is disabled in the root IMFS.
[fd6dc8c8]2317
[6c56401]2318.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
[9aafb39]2319
[0e8f08d]2320.. _CONFIGURE_IMFS_DISABLE_CHMOD:
[3384994]2321
[0e8f08d]2322CONFIGURE_IMFS_DISABLE_CHMOD
2323----------------------------
[fd6dc8c8]2324
[53bb72e]2325CONSTANT:
[fd6dc8c8]2326    ``CONFIGURE_IMFS_DISABLE_CHMOD``
2327
[53bb72e]2328DATA TYPE:
[fd6dc8c8]2329    Boolean feature macro.
2330
[53bb72e]2331RANGE:
[fd6dc8c8]2332    Defined or undefined.
2333
[53bb72e]2334DEFAULT VALUE:
[fd6dc8c8]2335    This is not defined by default.
2336
[53bb72e]2337DESCRIPTION:
2338    In case this configuration option is defined, then the support to change
2339    the mode is disabled in the root IMFS.
[fd6dc8c8]2340
[6c56401]2341.. index:: CONFIGURE_IMFS_DISABLE_UTIME
[9aafb39]2342
[0e8f08d]2343.. _CONFIGURE_IMFS_DISABLE_UTIME:
[3384994]2344
[0e8f08d]2345CONFIGURE_IMFS_DISABLE_UTIME
2346----------------------------
[fd6dc8c8]2347
[53bb72e]2348CONSTANT:
[fd6dc8c8]2349    ``CONFIGURE_IMFS_DISABLE_UTIME``
2350
[53bb72e]2351DATA TYPE:
[fd6dc8c8]2352    Boolean feature macro.
2353
[53bb72e]2354RANGE:
[fd6dc8c8]2355    Defined or undefined.
2356
[53bb72e]2357DEFAULT VALUE:
[fd6dc8c8]2358    This is not defined by default.
2359
[53bb72e]2360DESCRIPTION:
2361    In case this configuration option is defined, then the support to change
2362    times is disabled in the root IMFS.
[fd6dc8c8]2363
[6c56401]2364.. index:: CONFIGURE_IMFS_DISABLE_LINK
[9aafb39]2365
[0e8f08d]2366.. _CONFIGURE_IMFS_DISABLE_LINK:
[3384994]2367
[0e8f08d]2368CONFIGURE_IMFS_DISABLE_LINK
2369---------------------------
[fd6dc8c8]2370
[53bb72e]2371CONSTANT:
[fd6dc8c8]2372    ``CONFIGURE_IMFS_DISABLE_LINK``
2373
[53bb72e]2374DATA TYPE:
[fd6dc8c8]2375    Boolean feature macro.
2376
[53bb72e]2377RANGE:
[fd6dc8c8]2378    Defined or undefined.
2379
[53bb72e]2380DEFAULT VALUE:
[fd6dc8c8]2381    This is not defined by default.
2382
[53bb72e]2383DESCRIPTION:
2384    In case this configuration option is defined, then the support to create
2385    hard links is disabled in the root IMFS.
[fd6dc8c8]2386
[6c56401]2387.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
[9aafb39]2388
[0e8f08d]2389.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
[3384994]2390
[0e8f08d]2391CONFIGURE_IMFS_DISABLE_SYMLINK
2392------------------------------
[fd6dc8c8]2393
[53bb72e]2394CONSTANT:
[fd6dc8c8]2395    ``CONFIGURE_IMFS_DISABLE_SYMLINK``
2396
[53bb72e]2397DATA TYPE:
[fd6dc8c8]2398    Boolean feature macro.
2399
[53bb72e]2400RANGE:
[fd6dc8c8]2401    Defined or undefined.
2402
[53bb72e]2403DEFAULT VALUE:
[fd6dc8c8]2404    This is not defined by default.
2405
[53bb72e]2406DESCRIPTION:
2407    In case this configuration option is defined, then the support to create
2408    symbolic links is disabled in the root IMFS.
[fd6dc8c8]2409
[6c56401]2410.. index:: CONFIGURE_IMFS_DISABLE_READLINK
[9aafb39]2411
[0e8f08d]2412.. _CONFIGURE_IMFS_DISABLE_READLINK:
[3384994]2413
[0e8f08d]2414CONFIGURE_IMFS_DISABLE_READLINK
2415-------------------------------
[fd6dc8c8]2416
[53bb72e]2417CONSTANT:
[fd6dc8c8]2418    ``CONFIGURE_IMFS_DISABLE_READLINK``
2419
[53bb72e]2420DATA TYPE:
[fd6dc8c8]2421    Boolean feature macro.
2422
[53bb72e]2423RANGE:
[fd6dc8c8]2424    Defined or undefined.
2425
[53bb72e]2426DEFAULT VALUE:
[fd6dc8c8]2427    This is not defined by default.
2428
[53bb72e]2429DESCRIPTION:
2430    In case this configuration option is defined, then the support to read
2431    symbolic links is disabled in the root IMFS.
[fd6dc8c8]2432
[6c56401]2433.. index:: CONFIGURE_IMFS_DISABLE_RENAME
[9aafb39]2434
[0e8f08d]2435.. _CONFIGURE_IMFS_DISABLE_RENAME:
[3384994]2436
[0e8f08d]2437CONFIGURE_IMFS_DISABLE_RENAME
2438-----------------------------
[fd6dc8c8]2439
[53bb72e]2440CONSTANT:
[fd6dc8c8]2441    ``CONFIGURE_IMFS_DISABLE_RENAME``
2442
[53bb72e]2443DATA TYPE:
[fd6dc8c8]2444    Boolean feature macro.
2445
[53bb72e]2446RANGE:
[fd6dc8c8]2447    Defined or undefined.
2448
[53bb72e]2449DEFAULT VALUE:
[fd6dc8c8]2450    This is not defined by default.
2451
[53bb72e]2452DESCRIPTION:
2453    In case this configuration option is defined, then the support to rename
2454    nodes is disabled in the root IMFS.
[fd6dc8c8]2455
[6c56401]2456.. index:: CONFIGURE_IMFS_DISABLE_READDIR
[9aafb39]2457
[0e8f08d]2458.. _CONFIGURE_IMFS_DISABLE_READDIR:
[3384994]2459
[0e8f08d]2460CONFIGURE_IMFS_DISABLE_READDIR
2461------------------------------
[fd6dc8c8]2462
[53bb72e]2463CONSTANT:
[fd6dc8c8]2464    ``CONFIGURE_IMFS_DISABLE_READDIR``
2465
[53bb72e]2466DATA TYPE:
[fd6dc8c8]2467    Boolean feature macro.
2468
[53bb72e]2469RANGE:
[fd6dc8c8]2470    Defined or undefined.
2471
[53bb72e]2472DEFAULT VALUE:
[fd6dc8c8]2473    This is not defined by default.
2474
[53bb72e]2475DESCRIPTION:
2476    In case this configuration option is defined, then the support to read a
2477    directory is disabled in the root IMFS.  It is still possible to open nodes
2478    in a directory.
[fd6dc8c8]2479
[6c56401]2480.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
[9aafb39]2481
[0e8f08d]2482.. _CONFIGURE_IMFS_DISABLE_MOUNT:
[3384994]2483
[0e8f08d]2484CONFIGURE_IMFS_DISABLE_MOUNT
2485----------------------------
[fd6dc8c8]2486
[53bb72e]2487CONSTANT:
[fd6dc8c8]2488    ``CONFIGURE_IMFS_DISABLE_MOUNT``
2489
[53bb72e]2490DATA TYPE:
[fd6dc8c8]2491    Boolean feature macro.
2492
[53bb72e]2493RANGE:
[fd6dc8c8]2494    Defined or undefined.
2495
[53bb72e]2496DEFAULT VALUE:
[fd6dc8c8]2497    This is not defined by default.
2498
[53bb72e]2499DESCRIPTION:
2500    In case this configuration option is defined, then the support to mount
2501    other file systems is disabled in the root IMFS.
[fd6dc8c8]2502
[6c56401]2503.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
[9aafb39]2504
[0e8f08d]2505.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
[3384994]2506
[0e8f08d]2507CONFIGURE_IMFS_DISABLE_UNMOUNT
2508------------------------------
[fd6dc8c8]2509
[53bb72e]2510CONSTANT:
[fd6dc8c8]2511    ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
2512
[53bb72e]2513DATA TYPE:
[fd6dc8c8]2514    Boolean feature macro.
2515
[53bb72e]2516RANGE:
[fd6dc8c8]2517    Defined or undefined.
2518
[53bb72e]2519DEFAULT VALUE:
[fd6dc8c8]2520    This is not defined by default.
2521
[53bb72e]2522DESCRIPTION:
2523    In case this configuration option is defined, then the support to unmount
2524    file systems is disabled in the root IMFS.
[fd6dc8c8]2525
[6c56401]2526.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
[9aafb39]2527
[0e8f08d]2528.. _CONFIGURE_IMFS_DISABLE_MKNOD:
[3384994]2529
[0e8f08d]2530CONFIGURE_IMFS_DISABLE_MKNOD
2531----------------------------
[fd6dc8c8]2532
[53bb72e]2533CONSTANT:
[fd6dc8c8]2534    ``CONFIGURE_IMFS_DISABLE_MKNOD``
2535
[53bb72e]2536DATA TYPE:
[fd6dc8c8]2537    Boolean feature macro.
2538
[53bb72e]2539RANGE:
[fd6dc8c8]2540    Defined or undefined.
2541
[53bb72e]2542DEFAULT VALUE:
[fd6dc8c8]2543    This is not defined by default.
2544
[53bb72e]2545DESCRIPTION:
2546    In case this configuration option is defined, then the support to make
2547    directories, devices, regular files and FIFOs is disabled in the root IMFS.
[fd6dc8c8]2548
[6c56401]2549.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
[9aafb39]2550
[0e8f08d]2551.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
[3384994]2552
[0e8f08d]2553CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2554---------------------------------
[fd6dc8c8]2555
[53bb72e]2556CONSTANT:
[fd6dc8c8]2557    ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
2558
[53bb72e]2559DATA TYPE:
[fd6dc8c8]2560    Boolean feature macro.
2561
[53bb72e]2562RANGE:
[fd6dc8c8]2563    Defined or undefined.
2564
[53bb72e]2565DEFAULT VALUE:
[fd6dc8c8]2566    This is not defined by default.
2567
[53bb72e]2568DESCRIPTION:
2569    In case this configuration option is defined, then the support to make
2570    regular files is disabled in the root IMFS.
[fd6dc8c8]2571
[6c56401]2572.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
[9aafb39]2573
[0e8f08d]2574.. _CONFIGURE_IMFS_DISABLE_RMNOD:
[3384994]2575
[0e8f08d]2576CONFIGURE_IMFS_DISABLE_RMNOD
2577----------------------------
[fd6dc8c8]2578
[53bb72e]2579CONSTANT:
[fd6dc8c8]2580    ``CONFIGURE_IMFS_DISABLE_RMNOD``
2581
[53bb72e]2582DATA TYPE:
[fd6dc8c8]2583    Boolean feature macro.
2584
[53bb72e]2585RANGE:
[fd6dc8c8]2586    Defined or undefined.
2587
[53bb72e]2588DEFAULT VALUE:
[fd6dc8c8]2589    This is not defined by default.
2590
[53bb72e]2591DESCRIPTION:
2592    In case this configuration option is defined, then the support to remove
2593    nodes is disabled in the root IMFS.
[fd6dc8c8]2594
2595Block Device Cache Configuration
2596================================
2597
2598This section defines Block Device Cache (bdbuf) related configuration
2599parameters.
2600
[6c56401]2601.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
[9aafb39]2602
[0e8f08d]2603.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
[3384994]2604
[0e8f08d]2605CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2606------------------------------------
[fd6dc8c8]2607
[53bb72e]2608CONSTANT:
[fd6dc8c8]2609    ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
2610
[53bb72e]2611DATA TYPE:
[fd6dc8c8]2612    Boolean feature macro.
2613
[53bb72e]2614RANGE:
[fd6dc8c8]2615    Defined or undefined.
2616
[53bb72e]2617DEFAULT VALUE:
[fd6dc8c8]2618    This is not defined by default.
2619
[53bb72e]2620DESCRIPTION:
2621    Provides a Block Device Cache configuration.
[fd6dc8c8]2622
[53bb72e]2623NOTES:
2624    Each option of the Block Device Cache configuration can be explicitly set
2625    by the user with the configuration options below.  The Block Device Cache
2626    is used for example by the RFS and DOSFS file systems.
[fd6dc8c8]2627
[6c56401]2628.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
[9aafb39]2629
[0e8f08d]2630.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
[3384994]2631
[0e8f08d]2632CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2633---------------------------------
[fd6dc8c8]2634
[53bb72e]2635CONSTANT:
[fd6dc8c8]2636    ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
2637
[53bb72e]2638DATA TYPE:
[fd6dc8c8]2639    Unsigned integer (``size_t``).
2640
[53bb72e]2641RANGE:
[fd6dc8c8]2642    Positive.
2643
[53bb72e]2644DEFAULT VALUE:
[fd6dc8c8]2645    The default value is 32768 bytes.
2646
[53bb72e]2647DESCRIPTION:
2648    Size of the cache memory in bytes.
[fd6dc8c8]2649
[53bb72e]2650NOTES:
2651    None.
[fd6dc8c8]2652
[6c56401]2653.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
[9aafb39]2654
[0e8f08d]2655.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
[3384994]2656
[0e8f08d]2657CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2658-------------------------------
[fd6dc8c8]2659
[53bb72e]2660CONSTANT:
[fd6dc8c8]2661    ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
2662
[53bb72e]2663DATA TYPE:
[fd6dc8c8]2664    Unsigned integer (``uint32_t``).
2665
[53bb72e]2666RANGE:
[fd6dc8c8]2667    Positive.
2668
[53bb72e]2669DEFAULT VALUE:
[fd6dc8c8]2670    The default value is 512 bytes.
2671
[53bb72e]2672DESCRIPTION:
2673    Defines the minimum size of a buffer in bytes.
[fd6dc8c8]2674
[53bb72e]2675NOTES:
2676    None.
[fd6dc8c8]2677
[6c56401]2678.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
[9aafb39]2679
[0e8f08d]2680.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
[3384994]2681
[0e8f08d]2682CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2683-------------------------------
[fd6dc8c8]2684
[53bb72e]2685CONSTANT:
[fd6dc8c8]2686    ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
2687
[53bb72e]2688DATA TYPE:
[fd6dc8c8]2689    Unsigned integer (``uint32_t``).
2690
[53bb72e]2691RANGE:
[fd6dc8c8]2692    It must be positive and an integral multiple of the buffer minimum size.
2693
[53bb72e]2694DEFAULT VALUE:
[fd6dc8c8]2695    The default value is 4096 bytes.
2696
[53bb72e]2697DESCRIPTION:
2698    Defines the maximum size of a buffer in bytes.
[fd6dc8c8]2699
[53bb72e]2700NOTES:
2701    None.
[fd6dc8c8]2702
[6c56401]2703.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
[9aafb39]2704
[0e8f08d]2705.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
[3384994]2706
[0e8f08d]2707CONFIGURE_SWAPOUT_SWAP_PERIOD
2708-----------------------------
[fd6dc8c8]2709
[53bb72e]2710CONSTANT:
[fd6dc8c8]2711    ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
2712
[53bb72e]2713DATA TYPE:
[fd6dc8c8]2714    Unsigned integer (``uint32_t``).
2715
[53bb72e]2716RANGE:
[fd6dc8c8]2717    Positive.
2718
[53bb72e]2719DEFAULT VALUE:
[fd6dc8c8]2720    The default value is 250 milliseconds.
2721
[53bb72e]2722DESCRIPTION:
2723    Defines the swapout task swap period in milliseconds.
[fd6dc8c8]2724
[53bb72e]2725NOTES:
2726    None.
[fd6dc8c8]2727
[6c56401]2728.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
[9aafb39]2729
[0e8f08d]2730.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
[3384994]2731
[0e8f08d]2732CONFIGURE_SWAPOUT_BLOCK_HOLD
2733----------------------------
[fd6dc8c8]2734
[53bb72e]2735CONSTANT:
[fd6dc8c8]2736    ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
2737
[53bb72e]2738DATA TYPE:
[fd6dc8c8]2739    Unsigned integer (``uint32_t``).
2740
[53bb72e]2741RANGE:
[fd6dc8c8]2742    Positive.
2743
[53bb72e]2744DEFAULT VALUE:
[fd6dc8c8]2745    The default value is 1000 milliseconds.
2746
[53bb72e]2747DESCRIPTION:
2748    Defines the swapout task maximum block hold time in milliseconds.
[fd6dc8c8]2749
[53bb72e]2750NOTES:
2751    None.
[fd6dc8c8]2752
[6c56401]2753.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
[9aafb39]2754
[0e8f08d]2755.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
[3384994]2756
[0e8f08d]2757CONFIGURE_SWAPOUT_TASK_PRIORITY
2758-------------------------------
[fd6dc8c8]2759
[53bb72e]2760CONSTANT:
[fd6dc8c8]2761    ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
2762
[53bb72e]2763DATA TYPE:
[fd6dc8c8]2764    Task priority (``rtems_task_priority``).
2765
[53bb72e]2766RANGE:
[fd6dc8c8]2767    Valid task priority.
2768
[53bb72e]2769DEFAULT VALUE:
[fd6dc8c8]2770    The default value is 15.
2771
[53bb72e]2772DESCRIPTION:
2773    Defines the swapout task priority.
[fd6dc8c8]2774
[53bb72e]2775NOTES:
2776    None.
[fd6dc8c8]2777
[6c56401]2778.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
[9aafb39]2779
[0e8f08d]2780.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
[3384994]2781
[0e8f08d]2782CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
[fd6dc8c8]2783-------------------------------------
2784
[53bb72e]2785CONSTANT:
[fd6dc8c8]2786    ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
2787
[53bb72e]2788DATA TYPE:
[fd6dc8c8]2789    Unsigned integer (``uint32_t``).
2790
[53bb72e]2791RANGE:
[fd6dc8c8]2792    Positive.
2793
[53bb72e]2794DEFAULT VALUE:
[fd6dc8c8]2795    The default value is 0.
2796
[53bb72e]2797DESCRIPTION:
2798    Defines the maximum blocks per read-ahead request.
[fd6dc8c8]2799
[53bb72e]2800NOTES:
2801    A value of 0 disables the read-ahead task (default).  The read-ahead task
2802    will issue speculative read transfers if a sequential access pattern is
2803    detected.  This can improve the performance on some systems.
[fd6dc8c8]2804
[6c56401]2805.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
[9aafb39]2806
[0e8f08d]2807.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
[3384994]2808
[0e8f08d]2809CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
[fd6dc8c8]2810--------------------------------
2811
[53bb72e]2812CONSTANT:
[fd6dc8c8]2813    ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
2814
[53bb72e]2815DATA TYPE:
[fd6dc8c8]2816    Unsigned integer (``uint32_t``).
2817
[53bb72e]2818RANGE:
[fd6dc8c8]2819    Positive.
2820
[53bb72e]2821DEFAULT VALUE:
[fd6dc8c8]2822    The default value is 16.
2823
[53bb72e]2824DESCRIPTION:
2825    Defines the maximum blocks per write request.
[fd6dc8c8]2826
[53bb72e]2827NOTES:
2828    None.
[fd6dc8c8]2829
[6c56401]2830.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
[9aafb39]2831
[0e8f08d]2832.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
[3384994]2833
[0e8f08d]2834CONFIGURE_BDBUF_TASK_STACK_SIZE
2835-------------------------------
[fd6dc8c8]2836
[53bb72e]2837CONSTANT:
[fd6dc8c8]2838    ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
2839
[53bb72e]2840DATA TYPE:
[fd6dc8c8]2841    Unsigned integer (``size_t``).
2842
[53bb72e]2843RANGE:
[fd6dc8c8]2844    Zero or positive.
2845
[53bb72e]2846DEFAULT VALUE:
[fd6dc8c8]2847    The default value is RTEMS_MINIMUM_STACK_SIZE.
2848
[53bb72e]2849DESCRIPTION:
2850    Defines the task stack size of the Block Device Cache tasks in bytes.
[fd6dc8c8]2851
[53bb72e]2852NOTES:
2853    None.
[fd6dc8c8]2854
[6c56401]2855.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
[9aafb39]2856
[0e8f08d]2857.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
[3384994]2858
[0e8f08d]2859CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2860----------------------------------------
[fd6dc8c8]2861
[53bb72e]2862CONSTANT:
[fd6dc8c8]2863    ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
2864
[53bb72e]2865DATA TYPE:
[fd6dc8c8]2866    Task priority (``rtems_task_priority``).
2867
[53bb72e]2868RANGE:
[fd6dc8c8]2869    Valid task priority.
2870
[53bb72e]2871DEFAULT VALUE:
[fd6dc8c8]2872    The default value is 15.
2873
[53bb72e]2874DESCRIPTION:
2875    Defines the read-ahead task priority.
[fd6dc8c8]2876
[53bb72e]2877NOTES:
2878    None.
[fd6dc8c8]2879
[6c56401]2880.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
[9aafb39]2881
[0e8f08d]2882.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
[3384994]2883
[0e8f08d]2884CONFIGURE_SWAPOUT_WORKER_TASKS
2885------------------------------
[fd6dc8c8]2886
[53bb72e]2887CONSTANT:
[fd6dc8c8]2888    ``CONFIGURE_SWAPOUT_WORKER_TASKS``
2889
[53bb72e]2890DATA TYPE:
[fd6dc8c8]2891    Unsigned integer (``size_t``).
2892
[53bb72e]2893RANGE:
[fd6dc8c8]2894    Zero or positive.
2895
[53bb72e]2896DEFAULT VALUE:
[fd6dc8c8]2897    The default value is 0.
2898
[53bb72e]2899DESCRIPTION:
2900    Defines the swapout worker task count.
[fd6dc8c8]2901
[53bb72e]2902NOTES:
2903    None.
[fd6dc8c8]2904
[6c56401]2905.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
[9aafb39]2906
[0e8f08d]2907.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
[3384994]2908
[0e8f08d]2909CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2910--------------------------------------
[fd6dc8c8]2911
[53bb72e]2912CONSTANT:
[fd6dc8c8]2913    ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
2914
[53bb72e]2915DATA TYPE:
[fd6dc8c8]2916    Task priority (``rtems_task_priority``).
2917
[53bb72e]2918RANGE:
[fd6dc8c8]2919    Valid task priority.
2920
[53bb72e]2921DEFAULT VALUE:
[fd6dc8c8]2922    The default value is 15.
2923
[53bb72e]2924DESCRIPTION:
2925    Defines the swapout worker task priority.
[fd6dc8c8]2926
[53bb72e]2927NOTES:
2928    None.
[fd6dc8c8]2929
2930BSP Specific Settings
2931=====================
2932
[c9aaf31]2933This section describes BSP specific configuration settings used by
2934``<rtems/confdefs.h>``.  The BSP specific configuration settings are defined in
2935``<bsp.h>``.
[fd6dc8c8]2936
[6c56401]2937.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
[9aafb39]2938
[0e8f08d]2939.. _CONFIGURE_DISABLE_BSP_SETTINGS:
[3384994]2940
[0e8f08d]2941CONFIGURE_DISABLE_BSP_SETTINGS
2942------------------------------
[fd6dc8c8]2943
[53bb72e]2944CONSTANT:
[fd6dc8c8]2945    ``CONFIGURE_DISABLE_BSP_SETTINGS``
2946
[53bb72e]2947DATA TYPE:
[fd6dc8c8]2948    Boolean feature macro.
2949
[53bb72e]2950RANGE:
[fd6dc8c8]2951    Defined or undefined.
2952
[53bb72e]2953DEFAULT VALUE:
[fd6dc8c8]2954    This is not defined by default.
2955
[53bb72e]2956DESCRIPTION:
2957    All BSP specific configuration settings can be disabled by the application
2958    with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
[fd6dc8c8]2959
[53bb72e]2960NOTES:
2961    None.
[fd6dc8c8]2962
[6c56401]2963.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
[9aafb39]2964
[0e8f08d]2965.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
[3384994]2966
[0e8f08d]2967CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2968----------------------------------
[fd6dc8c8]2969
[53bb72e]2970CONSTANT:
[fd6dc8c8]2971    ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
2972
[53bb72e]2973DATA TYPE:
[fd6dc8c8]2974    Boolean feature macro.
2975
[53bb72e]2976RANGE:
[fd6dc8c8]2977    Defined or undefined.
2978
[53bb72e]2979DEFAULT VALUE:
[fd6dc8c8]2980    This option is BSP specific.
2981
[53bb72e]2982DESCRIPTION:
2983    This configuration parameter is defined by a BSP to indicate that it does
2984    not allocate all available memory to the C Program Heap used by the Malloc
2985    Family of routines.
[fd6dc8c8]2986
[53bb72e]2987    If defined, when ``malloc()`` is unable to allocate memory, it will call
2988    the BSP supplied ``sbrk()`` to obtain more memory.
[fd6dc8c8]2989
[53bb72e]2990NOTES:
2991    This parameter should not be defined by the application. Only the BSP knows
2992    how it allocates memory to the C Program Heap.
[fd6dc8c8]2993
[6c56401]2994.. index:: BSP_IDLE_TASK_BODY
[9aafb39]2995
[0e8f08d]2996.. _BSP_IDLE_TASK_BODY:
[3384994]2997
[0e8f08d]2998BSP_IDLE_TASK_BODY
2999------------------
[fd6dc8c8]3000
[53bb72e]3001CONSTANT:
[fd6dc8c8]3002    ``BSP_IDLE_TASK_BODY``
3003
[53bb72e]3004DATA TYPE:
[fd6dc8c8]3005    Function pointer.
3006
[53bb72e]3007RANGE:
[fd6dc8c8]3008    Undefined or valid function pointer.
3009
[53bb72e]3010DEFAULT VALUE:
[fd6dc8c8]3011    This option is BSP specific.
3012
[53bb72e]3013DESCRIPTION:
3014    If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
3015    ``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
3016    BSP specific idle task body will be used.
[fd6dc8c8]3017
[53bb72e]3018NOTES:
3019    As it has knowledge of the specific CPU model, system controller logic, and
3020    peripheral buses, a BSP specific IDLE task may be capable of turning
3021    components off to save power during extended periods of no task activity
[fd6dc8c8]3022
[6c56401]3023.. index:: BSP_IDLE_TASK_STACK_SIZE
[9aafb39]3024
[0e8f08d]3025.. _BSP_IDLE_TASK_STACK_SIZE:
[3384994]3026
[0e8f08d]3027BSP_IDLE_TASK_STACK_SIZE
3028------------------------
[fd6dc8c8]3029
[53bb72e]3030CONSTANT:
[fd6dc8c8]3031    ``BSP_IDLE_TASK_STACK_SIZE``
3032
[53bb72e]3033DATA TYPE:
[fd6dc8c8]3034    Unsigned integer (``size_t``).
3035
[53bb72e]3036RANGE:
[fd6dc8c8]3037    Undefined or positive.
3038
[53bb72e]3039DEFAULT VALUE:
[fd6dc8c8]3040    This option is BSP specific.
3041
[53bb72e]3042DESCRIPTION:
3043    If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
3044    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
3045    this BSP suggested idle task stack size will be used.
[fd6dc8c8]3046
[53bb72e]3047NOTES:
3048    The order of precedence for configuring the IDLE task stack size is:
[fd6dc8c8]3049
[53bb72e]3050    - RTEMS default minimum stack size.
[fd6dc8c8]3051
[53bb72e]3052    - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
[fd6dc8c8]3053
[53bb72e]3054    - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
[fd6dc8c8]3055
[53bb72e]3056    - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
[fd6dc8c8]3057
3058.. COMMENT: XXX - add cross references to other related values.
3059
[6c56401]3060.. index:: BSP_INITIAL_EXTENSION
[9aafb39]3061
[0e8f08d]3062.. _BSP_INITIAL_EXTENSION:
[3384994]3063
[0e8f08d]3064BSP_INITIAL_EXTENSION
3065---------------------
[fd6dc8c8]3066
[53bb72e]3067CONSTANT:
[fd6dc8c8]3068    ``BSP_INITIAL_EXTENSION``
3069
[53bb72e]3070DATA TYPE:
[fd6dc8c8]3071    List of user extension initializers (``rtems_extensions_table``).
3072
[53bb72e]3073RANGE:
[fd6dc8c8]3074    Undefined or a list of user extension initializers.
3075
[53bb72e]3076DEFAULT VALUE:
[fd6dc8c8]3077    This option is BSP specific.
3078
[53bb72e]3079DESCRIPTION:
3080    If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
3081    initial extension will be placed as the last entry in the initial extension
3082    table.
[fd6dc8c8]3083
[53bb72e]3084NOTES:
3085    None.
[fd6dc8c8]3086
[6c56401]3087.. index:: BSP_INTERRUPT_STACK_SIZE
[9aafb39]3088
[0e8f08d]3089.. _BSP_INTERRUPT_STACK_SIZE:
[3384994]3090
[0e8f08d]3091BSP_INTERRUPT_STACK_SIZE
3092------------------------
[fd6dc8c8]3093
[53bb72e]3094CONSTANT:
[fd6dc8c8]3095    ``BSP_INTERRUPT_STACK_SIZE``
3096
[53bb72e]3097DATA TYPE:
[fd6dc8c8]3098    Unsigned integer (``size_t``).
3099
[53bb72e]3100RANGE:
[fd6dc8c8]3101    Undefined or positive.
3102
[53bb72e]3103DEFAULT VALUE:
[fd6dc8c8]3104    This option is BSP specific.
3105
[53bb72e]3106DESCRIPTION:
3107    If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
3108    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
3109    this BSP specific interrupt stack size will be used.
[fd6dc8c8]3110
[53bb72e]3111NOTES:
3112    None.
[fd6dc8c8]3113
[6c56401]3114.. index:: BSP_MAXIMUM_DEVICES
[9aafb39]3115
[0e8f08d]3116.. _BSP_MAXIMUM_DEVICES:
[3384994]3117
[0e8f08d]3118BSP_MAXIMUM_DEVICES
3119-------------------
[fd6dc8c8]3120
[53bb72e]3121CONSTANT:
[fd6dc8c8]3122    ``BSP_MAXIMUM_DEVICES``
3123
[53bb72e]3124DATA TYPE:
[fd6dc8c8]3125    Unsigned integer (``size_t``).
3126
[53bb72e]3127RANGE:
[fd6dc8c8]3128    Undefined or positive.
3129
[53bb72e]3130DEFAULT VALUE:
[fd6dc8c8]3131    This option is BSP specific.
3132
[53bb72e]3133DESCRIPTION:
3134    If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
3135    ``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
3136    BSP specific maximum device count will be used.
[fd6dc8c8]3137
[53bb72e]3138NOTES:
3139    This option is specific to the device file system (devFS) and should not be
3140    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
3141    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
3142    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
[fd6dc8c8]3143
[6c56401]3144.. index:: BSP_ZERO_WORKSPACE_AUTOMATICALLY
[9aafb39]3145
[0e8f08d]3146.. _BSP_ZERO_WORKSPACE_AUTOMATICALLY:
[3384994]3147
[0e8f08d]3148BSP_ZERO_WORKSPACE_AUTOMATICALLY
3149--------------------------------
[fd6dc8c8]3150
[53bb72e]3151CONSTANT:
[fd6dc8c8]3152    ``BSP_ZERO_WORKSPACE_AUTOMATICALLY``
3153
[53bb72e]3154DATA TYPE:
[fd6dc8c8]3155    Boolean feature macro.
3156
[53bb72e]3157RANGE:
[fd6dc8c8]3158    Defined or undefined.
3159
[53bb72e]3160DEFAULT VALUE:
[fd6dc8c8]3161    This option is BSP specific.
3162
[53bb72e]3163DESCRIPTION:
3164    If ``BSP_ZERO_WORKSPACE_AUTOMATICALLY`` is defined by the BSP and
3165    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY`` is not defined by the
3166    application, then the workspace will be zeroed automatically.
[fd6dc8c8]3167
[53bb72e]3168NOTES:
3169    Zeroing memory can add significantly to system boot time. It is not
3170    necessary for RTEMS but is often assumed by support libraries.
[fd6dc8c8]3171
[6c56401]3172.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
[9aafb39]3173
[0e8f08d]3174.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
[3384994]3175
[0e8f08d]3176CONFIGURE_BSP_PREREQUISITE_DRIVERS
3177----------------------------------
[fd6dc8c8]3178
[53bb72e]3179CONSTANT:
[fd6dc8c8]3180    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
3181
[53bb72e]3182DATA TYPE:
[fd6dc8c8]3183    List of device driver initializers (``rtems_driver_address_table``).
3184
[53bb72e]3185RANGE:
[fd6dc8c8]3186    Undefined or array of device drivers.
3187
[53bb72e]3188DEFAULT VALUE:
[fd6dc8c8]3189    This option is BSP specific.
3190
[53bb72e]3191DESCRIPTION:
3192    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
3193    drivers it needs to include in the Device Driver Table.  This should be
3194    defined to the set of device driver entries that will be placed in the
3195    table at the *FRONT* of the Device Driver Table and initialized before any
3196    other drivers *INCLUDING* any application prerequisite drivers.
[fd6dc8c8]3197
[53bb72e]3198NOTES:
3199    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
3200    configure common infrastructure such as bus controllers or probe for
3201    devices.
[fd6dc8c8]3202
3203Idle Task Configuration
3204=======================
3205
[c9aaf31]3206This section defines the IDLE task related configuration parameters supported
3207by ``<rtems/confdefs.h>``.
[fd6dc8c8]3208
[6c56401]3209.. index:: CONFIGURE_IDLE_TASK_BODY
[9aafb39]3210
[0e8f08d]3211.. _CONFIGURE_IDLE_TASK_BODY:
[3384994]3212
[0e8f08d]3213CONFIGURE_IDLE_TASK_BODY
3214------------------------
[fd6dc8c8]3215
[53bb72e]3216CONSTANT:
[fd6dc8c8]3217    ``CONFIGURE_IDLE_TASK_BODY``
3218
[53bb72e]3219DATA TYPE:
[fd6dc8c8]3220    Function pointer.
3221
[53bb72e]3222RANGE:
[fd6dc8c8]3223    Undefined or valid function pointer.
3224
[53bb72e]3225DEFAULT VALUE:
[fd6dc8c8]3226    This is not defined by default.
3227
[53bb72e]3228DESCRIPTION:
3229    ``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
3230    the application specific IDLE thread body.  If not specified, the BSP or
3231    RTEMS default IDLE thread body will be used.
[fd6dc8c8]3232
[53bb72e]3233NOTES:
3234    None.
[fd6dc8c8]3235
[6c56401]3236.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
[9aafb39]3237
[0e8f08d]3238.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
[3384994]3239
[0e8f08d]3240CONFIGURE_IDLE_TASK_STACK_SIZE
3241------------------------------
[fd6dc8c8]3242
[53bb72e]3243CONSTANT:
[fd6dc8c8]3244    ``CONFIGURE_IDLE_TASK_STACK_SIZE``
3245
[53bb72e]3246DATA TYPE:
[fd6dc8c8]3247    Unsigned integer (``size_t``).
3248
[53bb72e]3249RANGE:
[fd6dc8c8]3250    Undefined or positive.
3251
[53bb72e]3252DEFAULT VALUE:
[fd6dc8c8]3253    The default value is RTEMS_MINIMUM_STACK_SIZE.
3254
[53bb72e]3255DESCRIPTION:
3256    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
3257    IDLE task.
[fd6dc8c8]3258
[53bb72e]3259NOTES:
3260    None.
[fd6dc8c8]3261
[6c56401]3262.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
[9aafb39]3263
[0e8f08d]3264.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
[3384994]3265
[0e8f08d]3266CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3267-------------------------------------------
[fd6dc8c8]3268
[53bb72e]3269CONSTANT:
[fd6dc8c8]3270    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
3271
[53bb72e]3272DATA TYPE:
[fd6dc8c8]3273    Boolean feature macro.
3274
[53bb72e]3275RANGE:
[fd6dc8c8]3276    Defined or undefined.
3277
[53bb72e]3278DEFAULT VALUE:
3279    This is not defined by default, the user is assumed to provide one or more
3280    initialization tasks.
[fd6dc8c8]3281
[53bb72e]3282DESCRIPTION:
3283    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`` is set to indicate that the
3284    user has configured *NO* user initialization tasks or threads and that the
3285    user provided IDLE task will perform application initialization and then
3286    transform itself into an IDLE task.
[fd6dc8c8]3287
[53bb72e]3288NOTES:
3289    If you use this option be careful, the user IDLE task *CANNOT* block at all
3290    during the initialization sequence.  Further, once application
3291    initialization is complete, it must make itself preemptible and enter an
3292    IDLE body loop.
[fd6dc8c8]3293
[53bb72e]3294    The IDLE task must run at the lowest priority of all tasks in the system.
[fd6dc8c8]3295
3296Scheduler Algorithm Configuration
3297=================================
3298
3299This section defines the configuration parameters related to selecting a
[c9aaf31]3300scheduling algorithm for an application.  For the schedulers built into RTEMS,
3301the configuration is straightforward.  All that is required is to define the
3302configuration macro which specifies which scheduler you want for in your
3303application.  The currently available schedulers are:
[fd6dc8c8]3304
[c9aaf31]3305The pluggable scheduler interface also enables the user to provide their own
3306scheduling algorithm.  If you choose to do this, you must define multiple
3307configuration macros.
[fd6dc8c8]3308
[6c56401]3309.. index:: CONFIGURE_SCHEDULER_PRIORITY
[9aafb39]3310
[0e8f08d]3311.. _CONFIGURE_SCHEDULER_PRIORITY:
[3384994]3312
[0e8f08d]3313CONFIGURE_SCHEDULER_PRIORITY
3314----------------------------
[fd6dc8c8]3315
[53bb72e]3316CONSTANT:
[fd6dc8c8]3317    ``CONFIGURE_SCHEDULER_PRIORITY``
3318
[53bb72e]3319DATA TYPE:
[fd6dc8c8]3320    Boolean feature macro.
3321
[53bb72e]3322RANGE:
[fd6dc8c8]3323    Defined or undefined.
3324
[53bb72e]3325DEFAULT VALUE:
[c9aaf31]3326    This is defined by default.  This is the default scheduler and specifying
3327    this configuration parameter is redundant.
[fd6dc8c8]3328
[53bb72e]3329DESCRIPTION:
3330    The Deterministic Priority Scheduler is the default scheduler in RTEMS for
3331    uni-processor applications and is designed for predictable performance
3332    under the highest loads.  It can block or unblock a thread in a constant
3333    amount of time.  This scheduler requires a variable amount of memory based
3334    upon the number of priorities configured in the system.
[fd6dc8c8]3335
[53bb72e]3336NOTES:
3337    This scheduler may be explicitly selected by defining
3338    ``CONFIGURE_SCHEDULER_PRIORITY`` although this is equivalent to the default
3339    behavior.
[fd6dc8c8]3340
[6c56401]3341.. index:: CONFIGURE_SCHEDULER_SIMPLE
[9aafb39]3342
[0e8f08d]3343.. _CONFIGURE_SCHEDULER_SIMPLE:
[3384994]3344
[0e8f08d]3345CONFIGURE_SCHEDULER_SIMPLE
3346--------------------------
[fd6dc8c8]3347
[53bb72e]3348CONSTANT:
[fd6dc8c8]3349    ``CONFIGURE_SCHEDULER_SIMPLE``
3350
[53bb72e]3351DATA TYPE:
[fd6dc8c8]3352    Boolean feature macro.
3353
[53bb72e]3354RANGE:
[fd6dc8c8]3355    Defined or undefined.
3356
[53bb72e]3357DEFAULT VALUE:
[fd6dc8c8]3358    This is not defined by default.
3359
[53bb72e]3360DESCRIPTION:
3361    When defined, the Simple Priority Scheduler is used at the thread
3362    scheduling algorithm. This is an alternative scheduler in RTEMS.  It is
3363    designed to provide the same task scheduling behaviour as the Deterministic
3364    Priority Scheduler while being simpler in implementation and uses less
3365    memory for data management.  It maintains a single sorted list of all ready
3366    threads.  Thus blocking or unblocking a thread is not a constant time
3367    operation with this scheduler.
[fd6dc8c8]3368
[53bb72e]3369    This scheduler may be explicitly selected by defining
3370    ``CONFIGURE_SCHEDULER_SIMPLE``.
[fd6dc8c8]3371
[53bb72e]3372NOTES:
3373    This scheduler is appropriate for use in small systems where RAM is limited.
[fd6dc8c8]3374
[6c56401]3375.. index:: CONFIGURE_SCHEDULER_EDF
[9aafb39]3376
[0e8f08d]3377.. _CONFIGURE_SCHEDULER_EDF:
[3384994]3378
[0e8f08d]3379CONFIGURE_SCHEDULER_EDF
3380-----------------------
[fd6dc8c8]3381
[53bb72e]3382CONSTANT:
[fd6dc8c8]3383    ``CONFIGURE_SCHEDULER_EDF``
3384
[53bb72e]3385DATA TYPE:
[fd6dc8c8]3386    Boolean feature macro.
3387
[53bb72e]3388RANGE:
[fd6dc8c8]3389    Defined or undefined.
3390
[53bb72e]3391DEFAULT VALUE:
[fd6dc8c8]3392    This is not defined by default.
3393
[53bb72e]3394DESCRIPTION:
3395    The Earliest Deadline First Scheduler (EDF) is an alternative scheduler in
3396    RTEMS for uni-processor applications. The EDF schedules tasks with dynamic
3397    priorities equal to deadlines. The deadlines are declared using only Rate
3398    Monotonic manager which handles periodic behavior.  Period is always equal
3399    to deadline. If a task does not have any deadline declared or the deadline
3400    is cancelled, the task is considered a background task which is scheduled
3401    in case no deadline-driven tasks are ready to run.  Moreover, multiple
3402    background tasks are scheduled according their priority assigned upon
3403    initialization. All ready tasks reside in a single ready queue.
[fd6dc8c8]3404
[53bb72e]3405    This scheduler may be explicitly selected by defining
3406    ``CONFIGURE_SCHEDULER_EDF``.
[fd6dc8c8]3407
[53bb72e]3408NOTES:
3409    None.
[fd6dc8c8]3410
[6c56401]3411.. index:: CONFIGURE_SCHEDULER_EDF_SMP
[8cf3d75]3412
[0e8f08d]3413.. _CONFIGURE_SCHEDULER_EDF_SMP:
[3384994]3414
[0e8f08d]3415CONFIGURE_SCHEDULER_EDF_SMP
3416---------------------------
[8cf3d75]3417
3418CONSTANT:
3419    ``CONFIGURE_SCHEDULER_EDF_SMP``
3420
3421DATA TYPE:
3422    Boolean feature macro.
3423
3424RANGE:
3425    Defined or undefined.
3426
3427DEFAULT VALUE:
3428    This is not defined by default.
3429
3430DESCRIPTION:
3431    If defined, then the Earliest Deadline First (EDF) SMP Scheduler is
3432    selected as the default scheduler.
3433
3434NOTES:
3435    None.
3436
[6c56401]3437.. index:: CONFIGURE_SCHEDULER_CBS
[9aafb39]3438
[0e8f08d]3439.. _CONFIGURE_SCHEDULER_CBS:
[3384994]3440
[0e8f08d]3441CONFIGURE_SCHEDULER_CBS
3442-----------------------
[fd6dc8c8]3443
[53bb72e]3444CONSTANT:
[fd6dc8c8]3445    ``CONFIGURE_SCHEDULER_CBS``
3446
[53bb72e]3447DATA TYPE:
[fd6dc8c8]3448    Boolean feature macro.
3449
[53bb72e]3450RANGE:
[fd6dc8c8]3451    Defined or undefined.
3452
[53bb72e]3453DEFAULT VALUE:
[fd6dc8c8]3454    This is not defined by default.
3455
[53bb72e]3456DESCRIPTION:
3457    The Constant Bandwidth Server Scheduler (CBS) is an alternative scheduler
3458    in RTEMS for uni-processor applications. The CBS is a budget aware
3459    extension of EDF scheduler. The goal of this scheduler is to ensure
3460    temporal isolation of tasks. The CBS is equipped with a set of additional
3461    rules and provides with an extensive API.
[fd6dc8c8]3462
[53bb72e]3463    This scheduler may be explicitly selected by defining
3464    ``CONFIGURE_SCHEDULER_CBS``.
[fd6dc8c8]3465
[53bb72e]3466NOTES:
3467    None.
[fd6dc8c8]3468
[6c56401]3469.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
[9aafb39]3470
[0e8f08d]3471.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
[3384994]3472
[0e8f08d]3473CONFIGURE_SCHEDULER_PRIORITY_SMP
3474--------------------------------
[fd6dc8c8]3475
[53bb72e]3476CONSTANT:
[fd6dc8c8]3477    ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
3478
[53bb72e]3479DATA TYPE:
[fd6dc8c8]3480    Boolean feature macro.
3481
[53bb72e]3482RANGE:
[fd6dc8c8]3483    Defined or undefined.
3484
[53bb72e]3485DEFAULT VALUE:
[fd6dc8c8]3486    This is not defined by default.
3487
[53bb72e]3488DESCRIPTION:
3489    The Deterministic Priority SMP Scheduler is derived from the Deterministic
3490    Priority Scheduler but is capable of scheduling threads across multiple
3491    processors.
[fd6dc8c8]3492
[53bb72e]3493    In a configuration with SMP enabled at configure time, it may be explicitly
3494    selected by defining ``CONFIGURE_SCHEDULER_PRIORITY_SMP``.
[fd6dc8c8]3495
[53bb72e]3496NOTES:
3497    This scheduler is only available when RTEMS is configured with SMP support
3498    enabled.
[fd6dc8c8]3499
[53bb72e]3500    This scheduler is currently the default in SMP configurations and is only
[1d073c5]3501    selected when ``CONFIGURE_MAXIMUM_PROCESSORS`` is greater than one.
[fd6dc8c8]3502
[6c56401]3503.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
[9aafb39]3504
[0e8f08d]3505.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
[3384994]3506
[0e8f08d]3507CONFIGURE_SCHEDULER_SIMPLE_SMP
3508------------------------------
[fd6dc8c8]3509
[53bb72e]3510CONSTANT:
[fd6dc8c8]3511    ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
3512
[53bb72e]3513DATA TYPE:
[fd6dc8c8]3514    Boolean feature macro.
3515
[53bb72e]3516RANGE:
[fd6dc8c8]3517    Defined or undefined.
3518
[53bb72e]3519DEFAULT VALUE:
[fd6dc8c8]3520    This is not defined by default.
3521
[53bb72e]3522DESCRIPTION:
3523    The Simple SMP Priority Scheduler is derived from the Simple Priority
3524    Scheduler but is capable of scheduling threads across multiple processors.
3525    It is designed to provide the same task scheduling behaviour as the
3526    Deterministic Priority Scheduler while distributing threads across multiple
3527    processors.  Being based upon the Simple Priority Scheduler, it also
3528    maintains a single sorted list of all ready threads.  Thus blocking or
3529    unblocking a thread is not a constant time operation with this scheduler.
[fd6dc8c8]3530
[53bb72e]3531    In addition, when allocating threads to processors, the algorithm is not
3532    constant time. This algorithm was not designed with efficiency as a primary
3533    design goal.  Its primary design goal was to provide an SMP-aware
3534    scheduling algorithm that is simple to understand.
[fd6dc8c8]3535
[53bb72e]3536    In a configuration with SMP enabled at configure time, it may be explicitly
3537    selected by defining ``CONFIGURE_SCHEDULER_SIMPLE_SMP``.
[fd6dc8c8]3538
[53bb72e]3539NOTES:
3540    This scheduler is only available when RTEMS is configured with SMP support
3541    enabled.
[fd6dc8c8]3542
[6c56401]3543.. index:: CONFIGURE_SCHEDULER_NAME
[9aafb39]3544
[0e8f08d]3545.. _CONFIGURE_SCHEDULER_NAME:
[3384994]3546
[0e8f08d]3547CONFIGURE_SCHEDULER_NAME
3548------------------------
[fd6dc8c8]3549
[53bb72e]3550CONSTANT:
[fd6dc8c8]3551    ``CONFIGURE_SCHEDULER_NAME``
3552
[53bb72e]3553DATA TYPE:
[fd6dc8c8]3554    RTEMS Name (``rtems_name``).
3555
[53bb72e]3556RANGE:
[fd6dc8c8]3557    Any value.
3558
[53bb72e]3559DEFAULT VALUE:
[fd6dc8c8]3560    The default name is
[c9aaf31]3561      - ``"UCBS"`` for the Uni-Processor CBS scheduler,
3562      - ``"UEDF"`` for the Uni-Processor EDF scheduler,
3563      - ``"UPD "`` for the Uni-Processor Deterministic Priority scheduler,
3564      - ``"UPS "`` for the Uni-Processor Simple Priority scheduler,
3565      - ``"MPA "`` for the Multi-Processor Priority Affinity scheduler, and
3566      - ``"MPD "`` for the Multi-Processor Deterministic Priority scheduler, and
3567      - ``"MPS "`` for the Multi-Processor Simple Priority scheduler.
[fd6dc8c8]3568
[53bb72e]3569DESCRIPTION:
3570    Schedulers can be identified via ``rtems_scheduler_ident``.  The name of
3571    the scheduler is determined by the configuration.
[fd6dc8c8]3572
[53bb72e]3573NOTES:
3574    None.
[fd6dc8c8]3575
[6c56401]3576.. index:: CONFIGURE_SCHEDULER_USER
[9aafb39]3577
[0e8f08d]3578.. _CONFIGURE_SCHEDULER_USER:
[3384994]3579
[0e8f08d]3580CONFIGURE_SCHEDULER_USER
3581------------------------
[fd6dc8c8]3582
[53bb72e]3583CONSTANT:
[fd6dc8c8]3584    ``CONFIGURE_SCHEDULER_USER``
3585
[53bb72e]3586DATA TYPE:
[fd6dc8c8]3587    Boolean feature macro.
3588
[53bb72e]3589RANGE:
[fd6dc8c8]3590    Defined or undefined.
3591
[53bb72e]3592DEFAULT VALUE:
[fd6dc8c8]3593    This is not defined by default.
3594
[53bb72e]3595DESCRIPTION:
3596    RTEMS allows the application to provide its own task/thread scheduling
3597    algorithm. In order to do this, one must define
3598    ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
3599    scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
3600    following additional macros must be defined:
[fd6dc8c8]3601
[53bb72e]3602    - ``CONFIGURE_SCHEDULER_CONTEXT`` must be defined to a static definition of
3603      the scheduler context of the user scheduler.
[fd6dc8c8]3604
[53bb72e]3605    - ``CONFIGURE_SCHEDULER_CONTROLS`` must be defined to a scheduler control
3606      initializer for the user scheduler.
[fd6dc8c8]3607
[53bb72e]3608    - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
3609      the per-thread information of the user scheduler.
[fd6dc8c8]3610
[53bb72e]3611NOTES:
3612    At this time, the mechanics and requirements for writing a new scheduler
3613    are evolving and not fully documented.  It is recommended that you look at
3614    the existing Deterministic Priority Scheduler in
3615    ``cpukit/score/src/schedulerpriority*.c`` for guidance.  For guidance on
3616    the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
3617    for how these are defined for the Deterministic Priority Scheduler.
[fd6dc8c8]3618
[9aafb39]3619.. _Configuring Clustered Schedulers:
[fd6dc8c8]3620
3621Configuring Clustered Schedulers
3622--------------------------------
3623
3624Clustered scheduling helps to control the worst-case latencies in a
3625multi-processor system.  The goal is to reduce the amount of shared state in
3626the system and thus prevention of lock contention.  Modern multi-processor
3627systems tend to have several layers of data and instruction caches.  With
3628clustered scheduling it is possible to honour the cache topology of a system
3629and thus avoid expensive cache synchronization traffic.
3630
3631We have clustered scheduling in case the set of processors of a system is
3632partitioned into non-empty pairwise-disjoint subsets.  These subsets are called
3633clusters.  Clusters with a cardinality of one are partitions.  Each cluster is
[c9aaf31]3634owned by exactly one scheduler instance.  In order to use clustered scheduling
3635the application designer has to answer two questions.
[fd6dc8c8]3636
[01a36ee]3637#. How is the set of processors partitioned into clusters?
[fd6dc8c8]3638
[01a36ee]3639#. Which scheduler is used for which cluster?
[fd6dc8c8]3640
[53bb72e]3641CONFIGURATION:
3642    The schedulers in an SMP system are statically configured on RTEMS.
3643    Firstly the application must select which scheduling algorithms are
3644    available with the following defines
3645
3646    - ``CONFIGURE_SCHEDULER_PRIORITY_SMP``,
3647
3648    - ``CONFIGURE_SCHEDULER_SIMPLE_SMP``, and
3649
3650    - ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``.
3651
3652    This is necessary to calculate the per-thread overhead introduced by the
3653    schedulers.  After these definitions the configuration file must ``#include
3654    <rtems/scheduler.h>`` to have access to scheduler specific configuration
3655    macros.  Each scheduler needs a context to store state information at
3656    run-time.  To provide a context for each scheduler is the next step.  Use
3657    the following macros to create scheduler contexts
3658
3659    - ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(name, prio_count)``,
3660
3661    - ``RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(name)``, and
3662
3663    - ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(name, prio_count)``.
3664
3665    The ``name`` parameter is used as part of a designator for a global
3666    variable, so the usual C/C++ designator rules apply.  Additional parameters
3667    are scheduler specific.  The schedulers are registered in the system via
3668    the scheduler table.  To create the scheduler table define
3669    ``CONFIGURE_SCHEDULER_CONTROLS`` to a list of the following scheduler
3670    control initializers
3671
3672    - ``RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(name, obj_name)``,
3673
3674    - ``RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(name, obj_name)``, and
3675
3676    - ``RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(name, obj_name)``.
3677
3678    The ``name`` parameter must correspond to the parameter defining the
3679    scheduler context.  The ``obj_name`` determines the scheduler object name
3680    and can be used in ``rtems_scheduler_ident()`` to get the scheduler object
3681    identifier.
3682
3683    The last step is to define which processor uses which scheduler.  For this
3684    purpose a scheduler assignment table must be defined.  The entry count of
3685    this table must be equal to the configured maximum processors
[1d073c5]3686    (``CONFIGURE_MAXIMUM_PROCESSORS``).  A processor assignment to a
[53bb72e]3687    scheduler can be optional or mandatory.  The boot processor must have a
3688    scheduler assigned.  In case the system needs more mandatory processors
3689    than available then a fatal run-time error will occur.  To specify the
3690    scheduler assignments define ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` to a
3691    list of ``RTEMS_SCHEDULER_ASSIGN(index, attr)`` and
3692    ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER`` macros.  The ``index`` parameter
3693    must be a valid index into the scheduler table.  The ``attr`` parameter
3694    defines the scheduler assignment attributes.  By default a scheduler
3695    assignment to a processor is optional.  For the scheduler assignment
3696    attribute use one of the mutually exclusive variants
3697
3698    - ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
3699
3700    - ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
3701
3702    - ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
3703
[bcdca5d]3704    It is possible to add/remove processors to/from scheduler instances at
3705    run-time, see :ref:`rtems_scheduler_add_processor` and
3706    :ref:`rtems_scheduler_remove_processor`.
3707
[53bb72e]3708ERRORS:
3709    In case one of the scheduler indices
3710    in``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` is invalid a link-time error will
3711    occur with an undefined reference to ``RTEMS_SCHEDULER_INVALID_INDEX``.
3712
3713    Some fatal errors may occur in case of scheduler configuration
3714    inconsistencies or a lack of processors on the system.  The fatal source is
3715    ``RTEMS_FATAL_SOURCE_SMP``.  None of the errors is internal.
3716
3717    - ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot
3718      processor must have a scheduler assigned.
3719
3720    - ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
3721      processor beyond the range of physically or virtually available
3722      processors.  The processor demand must be reduced for this system.
3723
3724    - ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a
3725      mandatory processor failed during system initialization.  The system may
3726      not have this processor at all or it could be a problem with a boot
3727      loader for example.  Check the ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS``
3728      definition.
3729
3730    - ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not
3731      allowed to start multitasking on a processor with no scheduler assigned.
3732
3733EXAMPLE:
3734    The following example shows a scheduler configuration for a hypothetical
3735    product using two chip variants.  One variant has four processors which is
3736    used for the normal product line and another provides eight processors for
3737    the high-performance product line.  The first processor performs hard-real
3738    time control of actuators and sensors.  The second processor is not used by
3739    RTEMS at all and runs a Linux instance to provide a graphical user
3740    interface.  The additional processors are used for a worker thread pool to
3741    perform data processing operations.
3742
3743    The processors managed by RTEMS use two Deterministic Priority scheduler
3744    instances capable of dealing with 256 priority levels.  The scheduler with
3745    index zero has the name ``"IO "``.  The scheduler with index one has the
3746    name ``"WORK"``.  The scheduler assignments of the first, third and fourth
3747    processor are mandatory, so the system must have at least four processors,
3748    otherwise a fatal run-time error will occur during system startup.  The
3749    processor assignments for the fifth up to the eighth processor are optional
3750    so that the same application can be used for the normal and
3751    high-performance product lines.  The second processor has no scheduler
3752    assigned and runs Linux.  A hypervisor will ensure that the two systems
3753    cannot interfere in an undesirable way.
3754
3755    .. code-block:: c
3756
[1d073c5]3757        #define CONFIGURE_MAXIMUM_PROCESSORS 8
[53bb72e]3758        #define CONFIGURE_MAXIMUM_PRIORITY 255
[bcdca5d]3759
[53bb72e]3760        /* Make the scheduler algorithm available */
3761        #define CONFIGURE_SCHEDULER_PRIORITY_SMP
3762        #include <rtems/scheduler.h>
[bcdca5d]3763
[53bb72e]3764        /* Create contexts for the two scheduler instances */
3765        RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
3766        RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
[bcdca5d]3767
[53bb72e]3768        /* Define the scheduler table */
3769        #define CONFIGURE_SCHEDULER_CONTROLS \\
[bcdca5d]3770            RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
3771                io, \
3772                rtems_build_name('I', 'O', ' ', ' ') \
3773            ), \
3774            RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
3775                work, \
3776                rtems_build_name('W', 'O', 'R', 'K') \
3777            )
3778
3779        /* Define the initial processor to scheduler assignments */
[53bb72e]3780        #define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
[bcdca5d]3781            RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3782            RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
3783            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3784            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3785            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3786            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3787            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3788            RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
[fd6dc8c8]3789
3790Device Driver Table
3791===================
3792
[c9aaf31]3793This section defines the configuration parameters related to the automatic
3794generation of a Device Driver Table.  As ``<rtems/confdefs.h>`` only is aware
3795of a small set of standard device drivers, the generated Device Driver Table is
3796suitable for simple applications with no custom device drivers.
[fd6dc8c8]3797
3798Note that network device drivers are not configured in the Device Driver Table.
3799
[6c56401]3800.. index:: CONFIGURE_MAXIMUM_DRIVERS
[9aafb39]3801
[0e8f08d]3802.. _CONFIGURE_MAXIMUM_DRIVERS:
[3384994]3803
[0e8f08d]3804CONFIGURE_MAXIMUM_DRIVERS
3805-------------------------
[fd6dc8c8]3806
[53bb72e]3807CONSTANT:
3808
[fd6dc8c8]3809    ``CONFIGURE_MAXIMUM_DRIVERS``
3810
[53bb72e]3811DATA TYPE:
[fd6dc8c8]3812    Unsigned integer (``uint32_t``).
3813
[53bb72e]3814RANGE:
[fd6dc8c8]3815    Zero or positive.
3816
[53bb72e]3817DEFAULT VALUE:
[fd6dc8c8]3818    This is computed by default, and is set to the number of device drivers
3819    configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
3820    configuration parameters.
3821
[53bb72e]3822DESCRIPTION:
3823    ``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
3824    per node.
[fd6dc8c8]3825
[53bb72e]3826NOTES:
3827    If the application will dynamically install device drivers, then this
3828    configuration parameter must be larger than the number of statically
3829    configured device drivers. Drivers configured using the
3830    ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
3831    statically installed.
[fd6dc8c8]3832
[6c56401]3833.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
[9aafb39]3834
[0e8f08d]3835.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
[3384994]3836
[0e8f08d]3837CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3838------------------------------------------
[fd6dc8c8]3839
[53bb72e]3840CONSTANT:
[fd6dc8c8]3841    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
3842
[53bb72e]3843DATA TYPE:
[fd6dc8c8]3844    Boolean feature macro.
3845
[53bb72e]3846RANGE:
[fd6dc8c8]3847    Defined or undefined.
3848
[53bb72e]3849DEFAULT VALUE:
[fd6dc8c8]3850    This is not defined by default.
3851
[53bb72e]3852DESCRIPTION:
3853    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
3854    application wishes to include the Console Device Driver.
[fd6dc8c8]3855
[53bb72e]3856NOTES:
3857    This device driver is responsible for providing standard input and output
3858    using */dev/console*.
[fd6dc8c8]3859
[53bb72e]3860    BSPs should be constructed in a manner that allows ``printk()`` to work
3861    properly without the need for the console driver to be configured.
[fd6dc8c8]3862
[6c56401]3863.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[9aafb39]3864
[0e8f08d]3865.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
[3384994]3866
[0e8f08d]3867CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
3868----------------------------------------
[fd6dc8c8]3869
[53bb72e]3870CONSTANT:
[fd6dc8c8]3871    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
3872
[53bb72e]3873DATA TYPE:
[fd6dc8c8]3874    Boolean feature macro.
3875
[53bb72e]3876RANGE:
[fd6dc8c8]3877    Defined or undefined.
3878
[53bb72e]3879DEFAULT VALUE:
[fd6dc8c8]3880    This is not defined by default.
3881
[53bb72e]3882DESCRIPTION:
3883    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
3884    wishes to include the Clock Device Driver.
[fd6dc8c8]3885
[53bb72e]3886NOTES:
3887    This device driver is responsible for providing a regular interrupt which
3888    invokes a clock tick directive.
[fd6dc8c8]3889
[53bb72e]3890    If neither the Clock Driver not Benchmark Timer is enabled and the
3891    configuration parameter
3892    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
3893    compile time error will occur.
[fd6dc8c8]3894
[6c56401]3895.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
[9aafb39]3896
[0e8f08d]3897.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
[3384994]3898
[0e8f08d]3899CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
3900----------------------------------------
[fd6dc8c8]3901
[53bb72e]3902CONSTANT:
[fd6dc8c8]3903    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
3904
[53bb72e]3905DATA TYPE:
[fd6dc8c8]3906    Boolean feature macro.
3907
[53bb72e]3908RANGE:
[fd6dc8c8]3909    Defined or undefined.
3910
[53bb72e]3911DEFAULT VALUE:
[fd6dc8c8]3912    This is not defined by default.
3913
[53bb72e]3914DESCRIPTION:
3915    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
3916    wishes to include the Timer Driver.  This device driver is used to
3917    benchmark execution times by the RTEMS Timing Test Suites.
[fd6dc8c8]3918
[53bb72e]3919NOTES:
3920    If neither the Clock Driver not Benchmark Timer is enabled and the
3921    configuration parameter
3922    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
3923    compile time error will occur.
[fd6dc8c8]3924
[6c56401]3925.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
[9aafb39]3926
[0e8f08d]3927.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
[3384994]3928
[0e8f08d]3929CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
3930------------------------------------------------
[fd6dc8c8]3931
[53bb72e]3932CONSTANT:
[fd6dc8c8]3933    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
3934
[53bb72e]3935DATA TYPE:
[fd6dc8c8]3936    Boolean feature macro.
3937
[53bb72e]3938RANGE:
[fd6dc8c8]3939    Defined or undefined.
3940
[53bb72e]3941DEFAULT VALUE:
[fd6dc8c8]3942    This is not defined by default.
3943
[53bb72e]3944DESCRIPTION:
3945    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
3946    application does *NOT* want the Clock Device Driver and is *NOT* using the
3947    Timer Driver.  The inclusion or exclusion of the Clock Driver must be
3948    explicit in user applications.
[fd6dc8c8]3949
[53bb72e]3950NOTES:
3951    This configuration parameter is intended to prevent the common user error
3952    of using the Hello World example as the baseline for an application and
3953    leaving out a clock tick source.
[fd6dc8c8]3954
[6c56401]3955.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
[9aafb39]3956
[0e8f08d]3957.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
[3384994]3958
[0e8f08d]3959CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
3960--------------------------------------
[fd6dc8c8]3961
[53bb72e]3962CONSTANT:
[fd6dc8c8]3963    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
3964
[53bb72e]3965DATA TYPE:
[fd6dc8c8]3966    Boolean feature macro.
3967
[53bb72e]3968RANGE:
[fd6dc8c8]3969    Defined or undefined.
3970
[53bb72e]3971DEFAULT VALUE:
[fd6dc8c8]3972    This is not defined by default.
3973
[53bb72e]3974DESCRIPTION:
3975    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
3976    wishes to include the Real-Time Clock Driver.
[fd6dc8c8]3977
[53bb72e]3978NOTES:
3979    Most BSPs do not include support for a real-time clock. This is because
3980    many boards do not include the required hardware.
[fd6dc8c8]3981
[53bb72e]3982    If this is defined and the BSP does not have this device driver, then the
3983    user will get a link time error for an undefined symbol.
[fd6dc8c8]3984
[6c56401]3985.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
[9aafb39]3986
[0e8f08d]3987.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
[3384994]3988
[0e8f08d]3989CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
3990-------------------------------------------
[fd6dc8c8]3991
[53bb72e]3992CONSTANT:
[fd6dc8c8]3993    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
3994
[53bb72e]3995DATA TYPE:
[fd6dc8c8]3996    Boolean feature macro.
3997
[53bb72e]3998RANGE:
[fd6dc8c8]3999    Defined or undefined.
4000
[53bb72e]4001DEFAULT VALUE:
[fd6dc8c8]4002    This is not defined by default.
4003
[53bb72e]4004DESCRIPTION:
4005    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
4006    application wishes to include the Watchdog Driver.
[fd6dc8c8]4007
[53bb72e]4008NOTES:
4009    Most BSPs do not include support for a watchdog device driver. This is
4010    because many boards do not include the required hardware.
[fd6dc8c8]4011
[53bb72e]4012    If this is defined and the BSP does not have this device driver, then the
4013    user will get a link time error for an undefined symbol.
[fd6dc8c8]4014
[6c56401]4015.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
[9aafb39]4016
[0e8f08d]4017.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
[3384994]4018
[0e8f08d]4019CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4020-----------------------------------------------
[fd6dc8c8]4021
[53bb72e]4022CONSTANT:
[fd6dc8c8]4023    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
4024
[53bb72e]4025DATA TYPE:
[fd6dc8c8]4026    Boolean feature macro.
4027
[53bb72e]4028RANGE:
[fd6dc8c8]4029    Defined or undefined.
4030
[53bb72e]4031DEFAULT VALUE:
[fd6dc8c8]4032    This is not defined by default.
4033
[53bb72e]4034DESCRIPTION:
4035    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
4036    application wishes to include the BSP's Frame Buffer Device Driver.
[fd6dc8c8]4037
[53bb72e]4038NOTES:
4039    Most BSPs do not include support for a Frame Buffer Device Driver. This is
4040    because many boards do not include the required hardware.
[fd6dc8c8]4041
[53bb72e]4042    If this is defined and the BSP does not have this device driver, then the
4043    user will get a link time error for an undefined symbol.
[fd6dc8c8]4044
[6c56401]4045.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
[9aafb39]4046
[0e8f08d]4047.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
[3384994]4048
[0e8f08d]4049CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4050---------------------------------------
[fd6dc8c8]4051
[53bb72e]4052CONSTANT:
[fd6dc8c8]4053    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
4054
[53bb72e]4055DATA TYPE:
[fd6dc8c8]4056    Boolean feature macro.
4057
[53bb72e]4058RANGE:
[fd6dc8c8]4059    Defined or undefined.
4060
[53bb72e]4061DEFAULT VALUE:
[fd6dc8c8]4062    This is not defined by default.
4063
[53bb72e]4064DESCRIPTION:
4065    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
4066    wishes to include the Stub Device Driver.
[fd6dc8c8]4067
[53bb72e]4068NOTES:
4069    This device driver simply provides entry points that return successful and
4070    is primarily a test fixture. It is supported by all BSPs.
[fd6dc8c8]4071
[6c56401]4072.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
[9aafb39]4073
[0e8f08d]4074.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
[3384994]4075
[0e8f08d]4076CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4077------------------------------------------
[fd6dc8c8]4078
[53bb72e]4079CONSTANT:
[fd6dc8c8]4080    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
4081
[53bb72e]4082DATA TYPE:
[fd6dc8c8]4083    device driver entry structures
4084
[53bb72e]4085RANGE:
[fd6dc8c8]4086    Undefined or set of device driver entry structures
4087
[53bb72e]4088DEFAULT VALUE:
[fd6dc8c8]4089    This is not defined by default.
4090
[53bb72e]4091DESCRIPTION:
4092    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
4093    application has device drivers it needs to include in the Device Driver
4094    Table.  This should be defined to the set of device driver entries that
4095    will be placed in the table at the *FRONT* of the Device Driver Table and
4096    initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
[fd6dc8c8]4097
[53bb72e]4098NOTES:
4099    In some cases, it is used by System On Chip BSPs to support peripheral
4100    buses beyond those normally found on the System On Chip. For example, this
4101    is used by one RTEMS system which has implemented a SPARC/ERC32 based board
4102    with VMEBus. The VMEBus Controller initialization is performed by a device
4103    driver configured via this configuration parameter.
[fd6dc8c8]4104
4105.. COMMENT: XXX Add example
4106
[6c56401]4107.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
[9aafb39]4108
[0e8f08d]4109.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
[3384994]4110
[0e8f08d]4111CONFIGURE_APPLICATION_EXTRA_DRIVERS
4112-----------------------------------
[fd6dc8c8]4113
[53bb72e]4114CONSTANT:
[fd6dc8c8]4115    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
4116
[53bb72e]4117DATA TYPE:
[fd6dc8c8]4118    device driver entry structures
4119
[53bb72e]4120RANGE:
[fd6dc8c8]4121    Undefined or set of device driver entry structures
4122
[53bb72e]4123DEFAULT VALUE:
[fd6dc8c8]4124    This is not defined by default.
4125
[53bb72e]4126DESCRIPTION:
4127    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
4128    device drivers it needs to include in the Device Driver Table.  This should
4129    be defined to the set of device driver entries that will be placed in the
4130    table at the *END* of the Device Driver Table.
[fd6dc8c8]4131
[53bb72e]4132NOTES:
4133    None.
[fd6dc8c8]4134
[6c56401]4135.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4136.. index:: /dev/null
[9aafb39]4137
[0e8f08d]4138.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
[3384994]4139
[0e8f08d]4140CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4141---------------------------------------
[fd6dc8c8]4142
[53bb72e]4143CONSTANT:
[fd6dc8c8]4144    ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
4145
[53bb72e]4146DATA TYPE:
[fd6dc8c8]4147    Boolean feature macro.
4148
[53bb72e]4149RANGE:
[fd6dc8c8]4150    Defined or undefined.
4151
[53bb72e]4152DEFAULT VALUE:
[fd6dc8c8]4153    This is not defined by default.
4154
[53bb72e]4155DESCRIPTION:
4156    This configuration variable is specified to enable ``/dev/null`` device driver.
[fd6dc8c8]4157
[53bb72e]4158NOTES:
4159    This device driver is supported by all BSPs.
[fd6dc8c8]4160
[6c56401]4161.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4162.. index:: /dev/zero
[9aafb39]4163
[0e8f08d]4164.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
[3384994]4165
[0e8f08d]4166CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4167---------------------------------------
[fd6dc8c8]4168
[53bb72e]4169CONSTANT:
[fd6dc8c8]4170    ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
4171
[53bb72e]4172DATA TYPE:
[fd6dc8c8]4173    Boolean feature macro.
4174
[53bb72e]4175RANGE:
[fd6dc8c8]4176    Defined or undefined.
4177
[53bb72e]4178DEFAULT VALUE:
[fd6dc8c8]4179    This is not defined by default.
4180
[53bb72e]4181DESCRIPTION:
4182    This configuration variable is specified to enable ``/dev/zero`` device driver.
[fd6dc8c8]4183
[53bb72e]4184NOTES:
4185    This device driver is supported by all BSPs.
[fd6dc8c8]4186
[6c56401]4187.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
[9aafb39]4188
[0e8f08d]4189.. _CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE:
[3384994]4190
[0e8f08d]4191CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4192-------------------------------------
[fd6dc8c8]4193
[53bb72e]4194CONSTANT:
[fd6dc8c8]4195    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE``
4196
[53bb72e]4197DATA TYPE:
[fd6dc8c8]4198    Boolean feature macro.
4199
[53bb72e]4200RANGE:
[fd6dc8c8]4201    Defined or undefined.
4202
[53bb72e]4203DEFAULT VALUE:
[c9aaf31]4204    This is not defined by default, indicating the ``<rtems/confdefs.h>`` is
4205    providing the device driver table.
[fd6dc8c8]4206
[53bb72e]4207DESCRIPTION:
4208    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE`` is defined if the application
4209    wishes to provide their own Device Driver Table.
[fd6dc8c8]4210
[53bb72e]4211    The table must be an array of ``rtems_driver_address_table`` entries
4212    named`` _IO_Driver_address_table``.  The application must also provide a
4213    const variable ``_IO_Number_of_drivers`` of type ``size_t`` indicating the
4214    number of entries in the ``_IO_Driver_address_table``.
[fd6dc8c8]4215
[53bb72e]4216NOTES:
4217    It is expected that there the application would only rarely need to do this.
[fd6dc8c8]4218
4219Multiprocessing Configuration
4220=============================
4221
4222This section defines the multiprocessing related system configuration
[c9aaf31]4223parameters supported by ``<rtems/confdefs.h>``.  They are only used if the
4224Multiprocessing Support (distinct from the SMP support) is enabled at configure
4225time using the ``--enable-multiprocessing`` option.
[fd6dc8c8]4226
[c9aaf31]4227Additionally, this class of Configuration Constants are only applicable if
4228``CONFIGURE_MP_APPLICATION`` is defined.
[fd6dc8c8]4229
[6c56401]4230.. index:: CONFIGURE_MP_APPLICATION
[9aafb39]4231
[0e8f08d]4232.. _CONFIGURE_MP_APPLICATION:
[3384994]4233
[0e8f08d]4234CONFIGURE_MP_APPLICATION
4235------------------------
[fd6dc8c8]4236
[53bb72e]4237CONSTANT:
[fd6dc8c8]4238    ``CONFIGURE_MP_APPLICATION``
4239
[53bb72e]4240DATA TYPE:
[fd6dc8c8]4241    Boolean feature macro.
4242
[53bb72e]4243RANGE:
[fd6dc8c8]4244    Defined or undefined.
4245
[53bb72e]4246DEFAULT VALUE:
[fd6dc8c8]4247    This is not defined by default.
4248
[53bb72e]4249DESCRIPTION:
4250    This configuration parameter must be defined to indicate that the
4251    application intends to be part of a multiprocessing
4252    configuration. Additional configuration parameters are assumed to be
4253    provided.
[fd6dc8c8]4254
[53bb72e]4255NOTES:
4256    This has no impact unless RTEMS was configured and built using the
4257    ``--enable-multiprocessing`` option.
[fd6dc8c8]4258
[6c56401]4259.. index:: CONFIGURE_MP_NODE_NUMBER
[9aafb39]4260
[0e8f08d]4261.. _CONFIGURE_MP_NODE_NUMBER:
[3384994]4262
[0e8f08d]4263CONFIGURE_MP_NODE_NUMBER
4264------------------------
[fd6dc8c8]4265
[53bb72e]4266CONSTANT:
[fd6dc8c8]4267    ``CONFIGURE_MP_NODE_NUMBER``
4268
[53bb72e]4269DATA TYPE:
[fd6dc8c8]4270    Unsigned integer (``uint32_t``).
4271
[53bb72e]4272RANGE:
[fd6dc8c8]4273    Positive.
4274
[53bb72e]4275DEFAULT VALUE:
[c9aaf31]4276    The default value is ``NODE_NUMBER``, which is assumed to be set by the
4277    compilation environment.
[fd6dc8c8]4278
[53bb72e]4279DESCRIPTION:
4280    ``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
4281    multiprocessor system.
[fd6dc8c8]4282
[53bb72e]4283NOTES:
4284    In the RTEMS Multiprocessing Test Suite, the node number is derived from
4285    the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
4286    ``NODE_NUMBER`` set to different values. The test programs behave
4287    differently based upon their node number.
[fd6dc8c8]4288
[6c56401]4289.. index:: CONFIGURE_MP_MAXIMUM_NODES
[9aafb39]4290
[0e8f08d]4291.. _CONFIGURE_MP_MAXIMUM_NODES:
[3384994]4292
[0e8f08d]4293CONFIGURE_MP_MAXIMUM_NODES
4294--------------------------
[fd6dc8c8]4295
[53bb72e]4296CONSTANT:
[fd6dc8c8]4297    ``CONFIGURE_MP_MAXIMUM_NODES``
4298
[53bb72e]4299DATA TYPE:
[fd6dc8c8]4300    Unsigned integer (``uint32_t``).
4301
[53bb72e]4302RANGE:
[fd6dc8c8]4303    Positive.
4304
[53bb72e]4305DEFAULT VALUE:
[fd6dc8c8]4306    The default value is 2.
4307
[53bb72e]4308DESCRIPTION:
4309    ``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
4310    multiprocessor system.
[fd6dc8c8]4311
[53bb72e]4312NOTES:
4313    None.
[fd6dc8c8]4314
[6c56401]4315.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
[9aafb39]4316
[0e8f08d]4317.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
[3384994]4318
[0e8f08d]4319CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4320-----------------------------------
[fd6dc8c8]4321
[53bb72e]4322CONSTANT:
[fd6dc8c8]4323    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
4324
[53bb72e]4325DATA TYPE:
[fd6dc8c8]4326    Unsigned integer (``uint32_t``).
4327
[53bb72e]4328RANGE:
[fd6dc8c8]4329    Positive.
4330
[53bb72e]4331DEFAULT VALUE:
[fd6dc8c8]4332    The default value is 32.
4333
[53bb72e]4334DESCRIPTION:
4335    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
4336    concurrently active global objects in a multiprocessor system.
[fd6dc8c8]4337
[53bb72e]4338NOTES:
4339    This value corresponds to the total number of objects which can be created
4340    with the ``RTEMS_GLOBAL`` attribute.
[fd6dc8c8]4341
[6c56401]4342.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
[9aafb39]4343
[0e8f08d]4344.. _CONFIGURE_MP_MAXIMUM_PROXIES:
[3384994]4345
[0e8f08d]4346CONFIGURE_MP_MAXIMUM_PROXIES
4347----------------------------
[fd6dc8c8]4348
[53bb72e]4349CONSTANT:
[fd6dc8c8]4350    ``CONFIGURE_MP_MAXIMUM_PROXIES``
4351
[53bb72e]4352DATA TYPE:
[fd6dc8c8]4353    Unsigned integer (``uint32_t``).
4354
[53bb72e]4355RANGE:
[fd6dc8c8]4356    Undefined or positive.
4357
[53bb72e]4358DEFAULT VALUE:
[fd6dc8c8]4359    The default value is 32.
4360
[53bb72e]4361DESCRIPTION:
4362    ``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
4363    active thread/task proxies on this node in a multiprocessor system.
[fd6dc8c8]4364
[53bb72e]4365NOTES:
4366    Since a proxy is used to represent a remote task/thread which is blocking
4367    on this node. This configuration parameter reflects the maximum number of
4368    remote tasks/threads which can be blocked on objects on this node.
[fd6dc8c8]4369
4370.. COMMENT: XXX - add xref to proxy discussion in MP chapter
4371
[6c56401]4372.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
[9aafb39]4373
[0e8f08d]4374.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
[3384994]4375
[0e8f08d]4376CONFIGURE_MP_MPCI_TABLE_POINTER
4377-------------------------------
[fd6dc8c8]4378
[53bb72e]4379CONSTANT:
[fd6dc8c8]4380    ``CONFIGURE_MP_MPCI_TABLE_POINTER``
4381
[53bb72e]4382DATA TYPE:
[fd6dc8c8]4383    pointer to ``rtems_mpci_table``
4384
[53bb72e]4385RANGE:
[fd6dc8c8]4386    undefined or valid pointer
4387
[53bb72e]4388DEFAULT VALUE:
[fd6dc8c8]4389    This is not defined by default.
4390
[53bb72e]4391DESCRIPTION:
4392    ``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
4393    Configuration Table.  The default value of this field is``&MPCI_table``.
[fd6dc8c8]4394
[53bb72e]4395NOTES:
4396    RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
4397    Multiprocessor System assuming the BSP provides the proper set of
4398    supporting methods.
[fd6dc8c8]4399
[6c56401]4400.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
[9aafb39]4401
[0e8f08d]4402.. _CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE:
[3384994]4403
[0e8f08d]4404CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4405---------------------------------------
[fd6dc8c8]4406
[53bb72e]4407CONSTANT:
[fd6dc8c8]4408    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE``
4409
[53bb72e]4410DATA TYPE:
[fd6dc8c8]4411    Boolean feature macro.
4412
[53bb72e]4413RANGE:
[fd6dc8c8]4414    Defined or undefined.
4415
[53bb72e]4416DEFAULT VALUE:
[fd6dc8c8]4417    This is not defined by default.
4418
[53bb72e]4419DESCRIPTION:
4420    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE`` is defined if the application
4421    wishes to provide their own Multiprocessing Configuration Table.  The
4422    generated table is named ``Multiprocessing_configuration``.
[fd6dc8c8]4423
[53bb72e]4424NOTES:
4425    This is a configuration parameter which is very unlikely to be used by an
4426    application. If you find yourself wanting to use it in an application,
4427    please reconsider and discuss this on the RTEMS Users mailing list.
[fd6dc8c8]4428
4429Ada Tasks
4430=========
4431
[c9aaf31]4432This section defines the system configuration parameters supported by
4433``<rtems/confdefs.h>`` related to configuring RTEMS to support a task using Ada
4434tasking with GNAT/RTEMS.
[fd6dc8c8]4435
[c9aaf31]4436These configuration parameters are only available when RTEMS is built with the
4437``--enable-ada`` configure option and the application specifies
4438``CONFIGURE_GNAT_RTEMS``.
[fd6dc8c8]4439
[c9aaf31]4440Additionally RTEMS includes an Ada language binding to the Classic API which
4441has a test suite. This test suite is enabled only when``--enable-tests`` and
4442``--enable-expada`` are specified on the configure command.
[fd6dc8c8]4443
[6c56401]4444.. index:: CONFIGURE_GNAT_RTEMS
[9aafb39]4445
[0e8f08d]4446.. _CONFIGURE_GNAT_RTEMS:
[3384994]4447
[0e8f08d]4448CONFIGURE_GNAT_RTEMS
4449--------------------
[fd6dc8c8]4450
[53bb72e]4451CONSTANT:
[fd6dc8c8]4452    ``CONFIGURE_GNAT_RTEMS``
4453
[53bb72e]4454DATA TYPE:
[fd6dc8c8]4455    Boolean feature macro.
4456
[53bb72e]4457RANGE:
[fd6dc8c8]4458    Defined or undefined.
4459
[53bb72e]4460DEFAULT VALUE:
[fd6dc8c8]4461    This is not defined by default.
4462
[53bb72e]4463DESCRIPTION:
4464    ``CONFIGURE_GNAT_RTEMS`` is defined to inform RTEMS that the GNAT Ada
4465    run-time is to be used by the application.
[fd6dc8c8]4466
[53bb72e]4467NOTES:
4468    This configuration parameter is critical as it makes``<rtems/confdefs.h>``
4469    configure the resources (POSIX API Threads, Mutexes, Condition Variables,
4470    and Keys) used implicitly by the GNAT run-time.
[fd6dc8c8]4471
[6c56401]4472.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
[9aafb39]4473
[0e8f08d]4474.. _CONFIGURE_MAXIMUM_ADA_TASKS:
[3384994]4475
[0e8f08d]4476CONFIGURE_MAXIMUM_ADA_TASKS
4477---------------------------
[fd6dc8c8]4478
[53bb72e]4479CONSTANT:
[fd6dc8c8]4480    ``CONFIGURE_MAXIMUM_ADA_TASKS``
4481
[53bb72e]4482DATA TYPE:
[fd6dc8c8]4483    Unsigned integer (``uint32_t``).
4484
[53bb72e]4485RANGE:
[fd6dc8c8]4486    Undefined or positive.
4487
[53bb72e]4488DEFAULT VALUE:
[c9aaf31]4489    If ``CONFIGURE_GNAT_RTEMS`` is defined, then the default value is 20,
4490    otherwise the default value is 0.
[fd6dc8c8]4491
[53bb72e]4492DESCRIPTION:
4493    ``CONFIGURE_MAXIMUM_ADA_TASKS`` is the number of Ada tasks that can be
4494    concurrently active in the system.
[fd6dc8c8]4495
[53bb72e]4496NOTES:
4497    None.
[fd6dc8c8]4498
[6c56401]4499.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
[9aafb39]4500
[0e8f08d]4501.. _CONFIGURE_MAXIMUM_FAKE_ADA_TASKS:
[3384994]4502
[0e8f08d]4503CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4504--------------------------------
[fd6dc8c8]4505
[53bb72e]4506CONSTANT:
[6c56401]4507    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS``
[fd6dc8c8]4508
[53bb72e]4509DATA TYPE:
[fd6dc8c8]4510    Unsigned integer (``uint32_t``).
4511
[53bb72e]4512RANGE:
[fd6dc8c8]4513    Zero or positive.
4514
[53bb72e]4515DEFAULT VALUE:
[fd6dc8c8]4516    The default value is 0.
4517
[53bb72e]4518DESCRIPTION:
4519    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS`` is the number of *fake* Ada tasks that
4520    can be concurrently active in the system.  A *fake* Ada task is a non-Ada
4521    task that makes calls back into Ada code and thus implicitly uses the Ada
4522    run-time.
[fd6dc8c8]4523
[53bb72e]4524NOTES:
4525    None.
[fd6dc8c8]4526
4527PCI Library
4528===========
4529
[c9aaf31]4530This section defines the system configuration parameters supported by
4531``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
4532
4533The PCI Library startup behaviour can be configured in four different ways
4534depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
4535
4536.. index:: PCI_LIB_AUTO
4537
4538``PCI_LIB_AUTO``
4539  Used to enable the PCI auto configuration software. PCI will be automatically
4540  probed, PCI buses enumerated, all devices and bridges will be initialized
4541  using Plug & Play software routines. The PCI device tree will be populated
4542  based on the PCI devices found in the system, PCI devices will be configured
4543  by allocating address region resources automatically in PCI space according
4544  to the BSP or host bridge driver set up.
4545
4546.. index:: PCI_LIB_READ
4547
4548``PCI_LIB_READ``
4549  Used to enable the PCI read configuration software. The current PCI
4550  configuration is read to create the RAM representation (the PCI device tree)
4551  of the PCI devices present. PCI devices are assumed to already have been
4552  initialized and PCI buses enumerated, it is therefore required that a BIOS or
4553  a boot loader has set up configuration space prior to booting into RTEMS.
4554
4555.. index:: PCI_LIB_STATIC
4556
4557``PCI_LIB_STATIC``
4558  Used to enable the PCI static configuration software. The user provides a PCI
4559  tree with information how all PCI devices are to be configured at compile
4560  time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
4561  library will not probe PCI for devices, instead it will assume that all
4562  devices defined by the user are present, it will enumerate the PCI buses and
4563  configure all PCI devices in static configuration accordingly. Since probe
4564  and allocation software is not needed the startup is faster, has smaller
4565  footprint and does not require dynamic memory allocation.
4566
4567.. index:: PCI_LIB_PERIPHERAL
4568
4569``PCI_LIB_PERIPHERAL``
4570  Used to enable the PCI peripheral configuration. It is similar to
4571  ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
4572  devices since PCI peripherals are not allowed to access PCI configuration
4573  space.
4574
4575Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
4576defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
[fd6dc8c8]4577Plug & Play is not performed.
4578
4579Go Tasks
4580========
4581
[6c56401]4582.. index:: CONFIGURE_ENABLE_GO
[9aafb39]4583
[0e8f08d]4584.. _CONFIGURE_ENABLE_GO:
[3384994]4585
[0e8f08d]4586CONFIGURE_ENABLE_GO
4587-------------------
[fd6dc8c8]4588
[53bb72e]4589CONSTANT:
[fd6dc8c8]4590    ``CONFIGURE_ENABLE_GO``
4591
[53bb72e]4592DATA TYPE:
[fd6dc8c8]4593    Boolean feature macro.
4594
[53bb72e]4595RANGE:
[fd6dc8c8]4596    Defined or undefined.
4597
[53bb72e]4598DEFAULT VALUE:
[fd6dc8c8]4599    This is not defined by default.
4600
[53bb72e]4601DESCRIPTION:
4602    ``CONFIGURE_ENABLE_GO`` is defined to inform RTEMS that the Go run-time is
4603    to be used by the application.
[fd6dc8c8]4604
[53bb72e]4605NOTES:
4606    The Go language support is experimental
[fd6dc8c8]4607
[6c56401]4608.. index:: CONFIGURE_MAXIMUM_GOROUTINES
[9aafb39]4609
[0e8f08d]4610.. _CONFIGURE_MAXIMUM_GOROUTINES:
[3384994]4611
[0e8f08d]4612CONFIGURE_MAXIMUM_GOROUTINES
4613----------------------------
[fd6dc8c8]4614
[53bb72e]4615CONSTANT:
[fd6dc8c8]4616    ``CONFIGURE_MAXIMUM_GOROUTINES``
4617
[53bb72e]4618DATA TYPE:
[fd6dc8c8]4619    Unsigned integer (``uint32_t``).
4620
[53bb72e]4621RANGE:
[fd6dc8c8]4622    Zero or positive.
4623
[53bb72e]4624DEFAULT VALUE:
[fd6dc8c8]4625    The default value is 400
4626
[53bb72e]4627DESCRIPTION:
4628    ``CONFIGURE_MAXIMUM_GOROUTINES`` is defined to specify the maximum number
4629    of Go routines.
[fd6dc8c8]4630
[53bb72e]4631NOTES:
4632    The Go language support is experimental
[fd6dc8c8]4633
[6c56401]4634.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
[9aafb39]4635
[0e8f08d]4636.. _CONFIGURE_MAXIMUM_GO_CHANNELS:
[3384994]4637
[0e8f08d]4638CONFIGURE_MAXIMUM_GO_CHANNELS
4639-----------------------------
[fd6dc8c8]4640
[53bb72e]4641CONSTANT:
[fd6dc8c8]4642    ``CONFIGURE_MAXIMUM_GO_CHANNELS``
4643
[53bb72e]4644DATA TYPE:
[fd6dc8c8]4645    Unsigned integer (``uint32_t``).
4646
[53bb72e]4647RANGE:
[fd6dc8c8]4648    Zero or positive.
4649
[53bb72e]4650DEFAULT VALUE:
[fd6dc8c8]4651    The default value is 500
4652
[53bb72e]4653DESCRIPTION:
4654    ``CONFIGURE_MAXIMUM_GO_CHANNELS`` is defined to specify the maximum number
4655    of Go channels.
[fd6dc8c8]4656
[53bb72e]4657NOTES:
4658    The Go language support is experimental
[d8f7bdc]4659
4660Obsolete Configuration Options
4661==============================
[13debfb]4662
[6c56401]4663.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
[d8f7bdc]4664
4665CONFIGURE_BDBUF_BUFFER_COUNT
4666----------------------------
4667
[60a6d6e]4668This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4669RTEMS 4.10.0.
[13debfb]4670
[6c56401]4671.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
[d8f7bdc]4672
4673CONFIGURE_BDBUF_BUFFER_SIZE
4674---------------------------
4675
[60a6d6e]4676This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4677RTEMS 4.10.0.
[13debfb]4678
[6c56401]4679.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
[d8f7bdc]4680
4681CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
4682--------------------------------------
4683
[60a6d6e]4684This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
4685RTEMS 5.1.
[13debfb]4686
[6c56401]4687.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
[d8f7bdc]4688
4689CONFIGURE_HAS_OWN_BDBUF_TABLE
4690-----------------------------
4691
[60a6d6e]4692This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4693RTEMS 4.10.0.
[0851404]4694
4695.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4696
4697CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4698---------------------------------
4699
4700This configuration option is obsolete since RTEMS 5.1.
4701
[6c56401]4702.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
[d8f7bdc]4703
4704CONFIGURE_MAXIMUM_POSIX_BARRIERS
4705--------------------------------
4706
[60a6d6e]4707This configuration option is obsolete since RTEMS 5.1.
[13debfb]4708
[6c56401]4709.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
[d8f7bdc]4710
4711CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
4712-------------------------------------------
4713
[60a6d6e]4714This configuration option is obsolete since RTEMS 5.1.
[13debfb]4715
[6c56401]4716.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
[d8f7bdc]4717
4718CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
4719-------------------------------
4720
[60a6d6e]4721This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
4722RTEMS 5.1.
[13debfb]4723
[6c56401]4724.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
[d8f7bdc]4725
4726CONFIGURE_MAXIMUM_POSIX_MUTEXES
4727-------------------------------
4728
[60a6d6e]4729This configuration option is obsolete since RTEMS 5.1.
[13debfb]4730
[6c56401]4731.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
[d8f7bdc]4732
4733CONFIGURE_MAXIMUM_POSIX_RWLOCKS
4734-------------------------------
4735
[60a6d6e]4736This configuration option is obsolete since RTEMS 5.1.
[13debfb]4737
[6c56401]4738.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
[d8f7bdc]4739
4740CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
4741---------------------------------
4742
[60a6d6e]4743This configuration option is obsolete since RTEMS 5.1.
[0851404]4744
4745.. index:: CONFIGURE_TERMIOS_DISABLED
4746
4747CONFIGURE_TERMIOS_DISABLED
4748--------------------------
4749
4750This configuration option is obsolete since RTEMS 5.1.
4751
[6c56401]4752.. index:: CONFIGURE_SMP_APPLICATION
[d8f7bdc]4753
4754CONFIGURE_SMP_APPLICATION
4755-------------------------
4756
[60a6d6e]4757This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4758RTEMS 5.1.
[13debfb]4759
[6c56401]4760.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
[d8f7bdc]4761
4762CONFIGURE_SMP_MAXIMUM_PROCESSORS
4763--------------------------------
4764
[60a6d6e]4765This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4766RTEMS 5.1.  See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
Note: See TracBrowser for help on using the repository browser.