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

5am
Last change on this file since bf78123 was bf78123, checked in by Sebastian Huber <sebastian.huber@…>, on 03/08/18 at 06:44:08

c-user: Rework scheduler alogrithm config defs

Update #3325.

  • Property mode set to 100644
File size: 130.8 KB
Line 
1.. comment SPDX-License-Identifier: CC-BY-SA-4.0
2
3.. COMMENT: COPYRIGHT (c) 1988-2008.
4.. COMMENT: On-Line Applications Research Corporation (OAR).
5.. COMMENT: All rights reserved.
6
7.. index:: configuring a system
8.. _Configuring a System:
9
10Configuring a System
11********************
12
13Introduction
14============
15
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
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.
26
27.. index:: confdefs.h
28.. index:: <rtems/confdefs.h>
29
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.
49
50For each configuration parameter in the configuration tables, the macro
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.
55
56Default Value Selection Philosophy
57==================================
58
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.
64
65.. _Sizing the RTEMS Workspace:
66
67Sizing the RTEMS Workspace
68==========================
69
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.
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
89The file ``<rtems/confdefs.h>`` will calculate the value of the
90``work_space_size`` parameter of the Configuration Table. There are many
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:
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
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:
140
141- All tasks/threads are assumed to be floating point.
142
143Conversely, there are many more reasons that the resource estimate could be too
144low:
145
146- Task/thread stacks greater than minimum size must be accounted for explicitly
147  by developer.
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
158information.  However, it is quite easy to use a library and forget to account
159for its resources.
160
161Format to be followed for making changes in this file
162=====================================================
163
164MACRO NAME:
165  Should be alphanumeric. Can have '_' (underscore).
166
167DATA TYPE:
168  Please refer to all existing formats.
169
170RANGE:
171  The range depends on the Data Type of the macro.
172
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
178    (+, -, \*, /).
179
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.
182
183  - If the data type is RTEMS Attributes or RTEMS Mode then the string should
184    be alphanumeric.
185
186  - If the data type is RTEMS NAME then the value should be an integer>=0 or
187    ``RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )``
188
189DEFAULT VALUE:
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.
194
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
199DESCRIPTION:
200  The description of the macro. (No specific format)
201
202NOTES:
203  Any further notes. (No specific format)
204
205Configuration Example
206=====================
207
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
212.. code-block:: c
213
214    #include <bsp.h>
215    #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
216    #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
217    #define CONFIGURE_MICROSECONDS_PER_TICK   1000 /* 1 millisecond */
218    #define CONFIGURE_TICKS_PER_TIMESLICE       50 /* 50 milliseconds */
219    #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
220    #define CONFIGURE_MAXIMUM_TASKS 4
221    #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
222    #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
223               CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
224    #define CONFIGURE_INIT
225    #include <rtems/confdefs.h>
226
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).
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
284- The minimum task stack size will be that recommended by RTEMS for the target
285  architecture.
286
287.. _Unlimited Objects:
288
289Unlimited Objects
290=================
291
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
299the new software to run; later they can tune the workspace size as needed.
300
301The following object classes in the Classic API can be configured in unlimited
302mode:
303
304- Barriers
305
306- Message Queues
307
308- Partitions
309
310- Periods
311
312- Ports
313
314- Regions
315
316- Semaphores
317
318- Tasks
319
320- Timers
321
322Additionally, the following object classes from the POSIX API can be configured
323in unlimited mode:
324
325- Keys -- :c:func:`pthread_key_create`
326
327- Key Value Pairs -- :c:func:`pthread_setspecific`
328
329- Message Queues -- :c:func:`mq_open`
330
331- Named Semaphores -- :c:func:`sem_open`
332
333- Shared Memory -- :c:func:`shm_open`
334
335- Threads -- :c:func:`pthread_create`
336
337- Timers -- :c:func:`timer_create`
338
339.. warning::
340
341    The following object classes can *not* be configured in unlimited mode:
342
343    - Drivers
344
345    - File Descriptors
346
347    - POSIX Queued Signals
348
349    - User Extensions
350
351Due to the memory requirements of unlimited objects it is strongly recommended
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.
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:
358
359.. code-block:: c
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
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.
374
375.. _Per Object Class Unlimited Object Instances:
376
377.. index:: rtems_resource_unlimited
378
379Per Object Class Unlimited Object Instances
380-------------------------------------------
381
382When the number of objects is not known ahead of time, RTEMS provides an
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
394.. code-block:: c
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
401Object maximum specifications can be evaluated with the
402``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
403macros.
404
405.. _Unlimited Object Instances:
406
407Unlimited Object Instances
408--------------------------
409
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.
414
415.. index:: CONFIGURE_UNLIMITED_OBJECTS
416
417.. _CONFIGURE_UNLIMITED_OBJECTS:
418
419CONFIGURE_UNLIMITED_OBJECTS
420---------------------------
421
422CONSTANT:
423    ``CONFIGURE_UNLIMITED_OBJECTS``
424
425DATA TYPE:
426    Boolean feature macro.
427
428RANGE:
429    Defined or undefined.
430
431DEFAULT VALUE:
432    This is not defined by default.
433
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.
438
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.
443
444.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
445
446CONFIGURE_UNLIMITED_ALLOCATION_SIZE
447-----------------------------------
448
449CONSTANT:
450    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
451
452DATA TYPE:
453    Unsigned integer (``uint32_t``).
454
455RANGE:
456    Positive.
457
458DEFAULT VALUE:
459    If not defined and ``CONFIGURE_UNLIMITED_OBJECTS`` is defined, the default
460    value is eight (8).
461
462DESCRIPTION:
463    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE`` provides an allocation size to use
464    for ``rtems_resource_unlimited`` when using
465    ``CONFIGURE_UNLIMITED_OBJECTS``.
466
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.
473
474.. code-block:: c
475
476    #define CONFIGURE_UNLIMITED_OBJECTS
477    #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
478
479Classic API Configuration
480=========================
481
482This section defines the Classic API related system configuration parameters
483supported by ``<rtems/confdefs.h>``.
484
485.. index:: CONFIGURE_MAXIMUM_TASKS
486
487.. _CONFIGURE_MAXIMUM_TASKS:
488
489CONFIGURE_MAXIMUM_TASKS
490-----------------------
491
492CONSTANT:
493    ``CONFIGURE_MAXIMUM_TASKS``
494
495DATA TYPE:
496    Unsigned integer (``uint32_t``).
497
498RANGE:
499    Zero or positive.
500
501DEFAULT VALUE:
502    The default value is ``0``.
503
504DESCRIPTION:
505    ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
506    can be concurrently active.
507
508NOTES:
509    This object class can be configured in unlimited allocation mode.
510
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``.
518
519    The maximum number of POSIX threads is specified by
520    ``CONFIGURE_MAXIMUM_POSIX_THREADS``.
521
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.
526
527.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
528
529.. index:: CONFIGURE_MAXIMUM_TIMERS
530
531.. _CONFIGURE_MAXIMUM_TIMERS:
532
533CONFIGURE_MAXIMUM_TIMERS
534------------------------
535
536CONSTANT:
537    ``CONFIGURE_MAXIMUM_TIMERS``
538
539DATA TYPE:
540    Unsigned integer (``uint32_t``).
541
542RANGE:
543    Zero or positive.
544
545DEFAULT VALUE:
546    The default value is 0.
547
548DESCRIPTION:
549    ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
550    that can be concurrently active.
551
552NOTES:
553    This object class can be configured in unlimited allocation mode.
554
555.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
556
557.. _CONFIGURE_MAXIMUM_SEMAPHORES:
558
559CONFIGURE_MAXIMUM_SEMAPHORES
560----------------------------
561
562CONSTANT:
563    ``CONFIGURE_MAXIMUM_SEMAPHORES``
564
565DATA TYPE:
566    Unsigned integer (``uint32_t``).
567
568RANGE:
569    Zero or positive.
570
571DEFAULT VALUE:
572    The default value is 0.
573
574DESCRIPTION:
575    ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
576    Semaphores that can be concurrently active.
577
578NOTES:
579    This object class can be configured in unlimited allocation mode.
580
581.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
582
583.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
584
585CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
586---------------------------------
587
588CONSTANT:
589    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
590
591DATA TYPE:
592    Unsigned integer (``uint32_t``).
593
594RANGE:
595    Zero or positive.
596
597DEFAULT VALUE:
598    The default value is 0.
599
600DESCRIPTION:
601    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
602    Semaphores using the :ref:`MrsP` that can be concurrently active.
603
604NOTES:
605    This configuration option is only used in SMP configurations.  In
606    uniprocessor configurations, the :ref:`PriorityCeiling` is used for MrsP
607    semaphores and thus no extra memory is necessary.
608
609.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
610
611.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
612
613CONFIGURE_MAXIMUM_MESSAGE_QUEUES
614--------------------------------
615
616CONSTANT:
617    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
618
619DATA TYPE:
620    Unsigned integer (``uint32_t``).
621
622RANGE:
623    Zero or positive.
624
625DEFAULT VALUE:
626    The default value is 0.
627
628DESCRIPTION:
629    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
630    Message Queues that can be concurrently active.
631
632NOTES:
633    This object class can be configured in unlimited allocation mode.
634
635.. index:: CONFIGURE_MAXIMUM_BARRIERS
636
637.. _CONFIGURE_MAXIMUM_BARRIERS:
638
639CONFIGURE_MAXIMUM_BARRIERS
640--------------------------
641
642CONSTANT:
643    ``CONFIGURE_MAXIMUM_BARRIERS``
644
645DATA TYPE:
646    Unsigned integer (``uint32_t``).
647
648RANGE:
649    Zero or positive.
650
651DEFAULT VALUE:
652    The default value is 0.
653
654DESCRIPTION:
655    ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
656    Barriers that can be concurrently active.
657
658NOTES:
659    This object class can be configured in unlimited allocation mode.
660
661.. index:: CONFIGURE_MAXIMUM_PERIODS
662
663.. _CONFIGURE_MAXIMUM_PERIODS:
664
665CONFIGURE_MAXIMUM_PERIODS
666-------------------------
667
668CONSTANT:
669    ``CONFIGURE_MAXIMUM_PERIODS``
670
671DATA TYPE:
672    Unsigned integer (``uint32_t``).
673
674RANGE:
675    Zero or positive.
676
677DEFAULT VALUE:
678    The default value is 0.
679
680DESCRIPTION:
681    ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
682    that can be concurrently active.
683
684NOTES:
685    This object class can be configured in unlimited allocation mode.
686
687.. index:: CONFIGURE_MAXIMUM_PARTITIONS
688
689.. _CONFIGURE_MAXIMUM_PARTITIONS:
690
691CONFIGURE_MAXIMUM_PARTITIONS
692----------------------------
693
694CONSTANT:
695    ``CONFIGURE_MAXIMUM_PARTITIONS``
696
697DATA TYPE:
698    Unsigned integer (``uint32_t``).
699
700RANGE:
701    Zero or positive.
702
703DEFAULT VALUE:
704    The default value is 0.
705
706DESCRIPTION:
707    ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
708    Partitions that can be concurrently active.
709
710NOTES:
711    This object class can be configured in unlimited allocation mode.
712
713.. index:: CONFIGURE_MAXIMUM_REGIONS
714
715.. _CONFIGURE_MAXIMUM_REGIONS:
716
717CONFIGURE_MAXIMUM_REGIONS
718-------------------------
719
720CONSTANT:
721    ``CONFIGURE_MAXIMUM_REGIONS``
722
723DATA TYPE:
724    Unsigned integer (``uint32_t``).
725
726RANGE:
727    Zero or positive.
728
729DEFAULT VALUE:
730    The default value is 0.
731
732DESCRIPTION:
733    ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
734    that can be concurrently active.
735
736NOTES:
737    None.
738
739.. index:: CONFIGURE_MAXIMUM_PORTS
740
741.. _CONFIGURE_MAXIMUM_PORTS:
742
743CONFIGURE_MAXIMUM_PORTS
744-----------------------
745
746CONSTANT:
747    ``CONFIGURE_MAXIMUM_PORTS``
748
749DATA TYPE:
750    Unsigned integer (``uint32_t``).
751
752RANGE:
753    Zero or positive.
754
755DEFAULT VALUE:
756    The default value is 0.
757
758DESCRIPTION:
759    ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
760    can be concurrently active.
761
762NOTES:
763    This object class can be configured in unlimited allocation mode.
764
765.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
766
767.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
768
769CONFIGURE_MAXIMUM_USER_EXTENSIONS
770---------------------------------
771
772CONSTANT:
773    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
774
775DATA TYPE:
776    Unsigned integer (``uint32_t``).
777
778RANGE:
779    Zero or positive.
780
781DEFAULT VALUE:
782    The default value is 0.
783
784DESCRIPTION:
785    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
786    User Extensions that can be concurrently active.
787
788NOTES:
789    This object class can be configured in unlimited allocation mode.
790
791Classic API Initialization Tasks Table Configuration
792====================================================
793
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.
797
798.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
799
800.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
801
802CONFIGURE_RTEMS_INIT_TASKS_TABLE
803--------------------------------
804
805CONSTANT:
806    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
807
808DATA TYPE:
809    Boolean feature macro.
810
811RANGE:
812    Defined or undefined.
813
814DEFAULT VALUE:
815    This is not defined by default.
816
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.
823
824    By default, this field is not defined as the user MUST select their own API
825    for initialization tasks.
826
827NOTES:
828    The application may choose to use the initialization tasks or threads table
829    from another API.
830
831    A compile time error will be generated if the user does not configure any
832    initialization tasks or threads.
833
834.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
835
836.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
837
838CONFIGURE_INIT_TASK_ENTRY_POINT
839-------------------------------
840
841CONSTANT:
842    ``CONFIGURE_INIT_TASK_ENTRY_POINT``
843
844DATA TYPE:
845    Task entry function pointer (``rtems_task_entry``).
846
847RANGE:
848    Valid task entry function pointer.
849
850DEFAULT VALUE:
851    The default value is ``Init``.
852
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.
857
858NOTES:
859    The user must implement the function ``Init`` or the function name provided
860    in this configuration parameter.
861
862.. index:: CONFIGURE_INIT_TASK_NAME
863
864.. _CONFIGURE_INIT_TASK_NAME:
865
866CONFIGURE_INIT_TASK_NAME
867------------------------
868
869CONSTANT:
870    ``CONFIGURE_INIT_TASK_NAME``
871
872DATA TYPE:
873    RTEMS Name (``rtems_name``).
874
875RANGE:
876    Any value.
877
878DEFAULT VALUE:
879    The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
880
881DESCRIPTION:
882    ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
883    defined by the Classic API Initialization Tasks Table.
884
885NOTES:
886    None.
887
888.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
889
890.. _CONFIGURE_INIT_TASK_STACK_SIZE:
891
892CONFIGURE_INIT_TASK_STACK_SIZE
893------------------------------
894
895CONSTANT:
896    ``CONFIGURE_INIT_TASK_STACK_SIZE``
897
898DATA TYPE:
899    Unsigned integer (``size_t``).
900
901RANGE:
902    Zero or positive.
903
904DEFAULT VALUE:
905    The default value is RTEMS_MINIMUM_STACK_SIZE.
906
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.
910
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``.
916
917.. index:: CONFIGURE_INIT_TASK_PRIORITY
918
919.. _CONFIGURE_INIT_TASK_PRIORITY:
920
921CONFIGURE_INIT_TASK_PRIORITY
922----------------------------
923
924CONSTANT:
925    ``CONFIGURE_INIT_TASK_PRIORITY``
926
927DATA TYPE:
928    RTEMS Task Priority (``rtems_task_priority``).
929
930RANGE:
931    One (1) to CONFIGURE_MAXIMUM_PRIORITY.
932
933DEFAULT VALUE:
934    The default value is 1, which is the highest priority in the Classic API.
935
936DESCRIPTION:
937    ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
938    initialization task defined by the Classic API Initialization Tasks Table.
939
940NOTES:
941    None.
942
943
944.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
945
946.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
947
948CONFIGURE_INIT_TASK_ATTRIBUTES
949------------------------------
950
951CONSTANT:
952    ``CONFIGURE_INIT_TASK_ATTRIBUTES``
953
954DATA TYPE:
955    RTEMS Attributes (``rtems_attribute``).
956
957RANGE:
958    Valid task attribute sets.
959
960DEFAULT VALUE:
961    The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
962
963DESCRIPTION:
964    ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
965    initialization task defined by the Classic API Initialization Tasks Table.
966
967NOTES:
968    None.
969
970.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
971
972.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
973
974CONFIGURE_INIT_TASK_INITIAL_MODES
975---------------------------------
976
977CONSTANT:
978    ``CONFIGURE_INIT_TASK_INITIAL_MODES``
979
980DATA TYPE:
981    RTEMS Mode (``rtems_mode``).
982
983RANGE:
984    Valid task mode sets.
985
986DEFAULT VALUE:
987    The default value is ``RTEMS_NO_PREEMPT``.
988
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.
993
994NOTES:
995    None.
996
997.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
998
999.. _CONFIGURE_INIT_TASK_ARGUMENTS:
1000
1001CONFIGURE_INIT_TASK_ARGUMENTS
1002-----------------------------
1003
1004CONSTANT:
1005    ``CONFIGURE_INIT_TASK_ARGUMENTS``
1006
1007DATA TYPE:
1008    RTEMS Task Argument (``rtems_task_argument``).
1009
1010RANGE:
1011    Complete range of the type.
1012
1013DEFAULT VALUE:
1014    The default value is 0.
1015
1016DESCRIPTION:
1017    ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
1018    initialization task defined by the Classic API Initialization Tasks Table.
1019
1020NOTES:
1021    None.
1022
1023.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1024
1025.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
1026
1027CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1028---------------------------------
1029
1030CONSTANT:
1031    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
1032
1033DATA TYPE:
1034    Boolean feature macro.
1035
1036RANGE:
1037    Defined or undefined.
1038
1039DEFAULT VALUE:
1040    This is not defined by default.
1041
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``.
1046
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.
1050
1051POSIX API Configuration
1052=======================
1053
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.
1057
1058.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
1059
1060.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
1061
1062CONFIGURE_MAXIMUM_POSIX_THREADS
1063-------------------------------
1064
1065CONSTANT:
1066    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
1067
1068DATA TYPE:
1069    Unsigned integer (``uint32_t``).
1070
1071RANGE:
1072    Zero or positive.
1073
1074DEFAULT VALUE:
1075    The default value is 0.
1076
1077DESCRIPTION:
1078    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
1079    Threads that can be concurrently active.
1080
1081NOTES:
1082    This object class can be configured in unlimited allocation mode.
1083
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``.
1091
1092    The maximum number of Classic API Tasks is specified by
1093    ``CONFIGURE_MAXIMUM_TASKS``.
1094
1095    All POSIX threads have floating point enabled.
1096
1097.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
1098
1099.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
1100
1101CONFIGURE_MAXIMUM_POSIX_KEYS
1102----------------------------
1103
1104CONSTANT:
1105    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
1106
1107DATA TYPE:
1108    Unsigned integer (``uint32_t``).
1109
1110RANGE:
1111    Zero or positive.
1112
1113DEFAULT VALUE:
1114    The default value is 0.
1115
1116DESCRIPTION:
1117    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
1118    that can be concurrently active.
1119
1120NOTES:
1121    This object class can be configured in unlimited allocation mode.
1122
1123.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
1124
1125.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
1126
1127CONFIGURE_MAXIMUM_POSIX_TIMERS
1128------------------------------
1129
1130CONSTANT:
1131    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
1132
1133DATA TYPE:
1134    Unsigned integer (``uint32_t``).
1135
1136RANGE:
1137    Zero or positive.
1138
1139DEFAULT VALUE:
1140    The default value is 0.
1141
1142DESCRIPTION:
1143    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
1144    Timers that can be concurrently active.
1145
1146NOTES:
1147    This object class can be configured in unlimited allocation mode.
1148
1149.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1150
1151.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
1152
1153CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1154--------------------------------------
1155
1156CONSTANT:
1157    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
1158
1159DATA TYPE:
1160    Unsigned integer (``uint32_t``).
1161
1162RANGE:
1163    Zero or positive.
1164
1165DEFAULT VALUE:
1166    The default value is 0.
1167
1168DESCRIPTION:
1169    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
1170    API Queued Signals that can be concurrently active.
1171
1172NOTES:
1173    None.
1174
1175.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1176
1177.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
1178
1179CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1180--------------------------------------
1181
1182CONSTANT:
1183    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
1184
1185DATA TYPE:
1186    Unsigned integer (``uint32_t``).
1187
1188RANGE:
1189    Zero or positive.
1190
1191DEFAULT VALUE:
1192    The default value is 0.
1193
1194DESCRIPTION:
1195    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
1196    API Message Queues that can be concurrently active.
1197
1198NOTES:
1199    This object class can be configured in unlimited allocation mode.
1200
1201.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1202
1203.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
1204
1205CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1206----------------------------------
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
1230POSIX Initialization Threads Table Configuration
1231================================================
1232
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.
1236
1237.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
1238
1239.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
1240
1241CONFIGURE_POSIX_INIT_THREAD_TABLE
1242---------------------------------
1243
1244CONSTANT:
1245
1246    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
1247
1248DATA TYPE:
1249    Boolean feature macro.
1250
1251RANGE:
1252    Defined or undefined.
1253
1254DEFAULT VALUE:
1255    This field is not defined by default, as the user MUST select their own API
1256    for initialization tasks.
1257
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.
1264
1265    By default, this field is not defined as the user MUST select their own API
1266    for initialization tasks.
1267
1268NOTES:
1269    The application may choose to use the initialization tasks or threads table
1270    from another API.
1271
1272    A compile time error will be generated if the user does not configure any
1273    initialization tasks or threads.
1274
1275.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1276
1277.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
1278
1279CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1280---------------------------------------
1281
1282CONSTANT:
1283    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
1284
1285DATA TYPE:
1286    POSIX thread function pointer (``void *(*entry_point)(void *)``).
1287
1288RANGE:
1289    Undefined or a valid POSIX thread function pointer.
1290
1291DEFAULT VALUE:
1292    The default value is ``POSIX_Init``.
1293
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.
1298
1299NOTES:
1300    The user must implement the function ``POSIX_Init`` or the function name
1301    provided in this configuration parameter.
1302
1303.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1304
1305.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
1306
1307CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1308--------------------------------------
1309
1310CONSTANT:
1311    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
1312
1313DATA TYPE:
1314    Unsigned integer (``size_t``).
1315
1316RANGE:
1317    Zero or positive.
1318
1319DEFAULT VALUE:
1320    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
1321
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.
1326
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``.
1332
1333.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1334
1335.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
1336
1337CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1338-----------------------------------------
1339
1340CONSTANT:
1341    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
1342
1343DATA TYPE:
1344    Boolean feature macro.
1345
1346RANGE:
1347    Defined or undefined.
1348
1349DEFAULT VALUE:
1350    This is not defined by default.
1351
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``.
1356
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.
1360
1361Basic System Information
1362========================
1363
1364This section defines the general system configuration parameters supported by
1365``<rtems/confdefs.h>``.
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
1373.. _CONFIGURE_UNIFIED_WORK_AREAS:
1374
1375CONFIGURE_UNIFIED_WORK_AREAS
1376----------------------------
1377
1378CONSTANT:
1379    ``CONFIGURE_UNIFIED_WORK_AREAS``
1380
1381DATA TYPE:
1382    Boolean feature macro.
1383
1384RANGE:
1385    Defined or undefined.
1386
1387DEFAULT VALUE:
1388    This is not defined by default, which specifies that the C Program Heap and
1389    the RTEMS Workspace will be separate.
1390
1391DESCRIPTION:
1392    When defined, the C Program Heap and the RTEMS Workspace will be one pool
1393    of memory.
1394
1395    When not defined, there will be separate memory pools for the RTEMS
1396    Workspace and C Program Heap.
1397
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.
1403
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.
1408
1409.. index:: CONFIGURE_MAXIMUM_PROCESSORS
1410
1411.. _CONFIGURE_MAXIMUM_PROCESSORS:
1412
1413CONFIGURE_MAXIMUM_PROCESSORS
1414----------------------------
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 uniprocessor
1439    configurations.
1440
1441.. index:: CONFIGURE_MICROSECONDS_PER_TICK
1442.. index:: tick quantum
1443
1444.. _CONFIGURE_MICROSECONDS_PER_TICK:
1445
1446CONFIGURE_MICROSECONDS_PER_TICK
1447-------------------------------
1448
1449CONSTANT:
1450    ``CONFIGURE_MICROSECONDS_PER_TICK``
1451
1452DATA TYPE:
1453    Unsigned integer (``uint32_t``).
1454
1455RANGE:
1456    Positive.
1457
1458DEFAULT VALUE:
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.
1461
1462DESCRIPTION:
1463    This constant is  used to specify the length of time between clock ticks.
1464
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.
1469
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.
1474
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.
1479
1480NOTES:
1481    This configuration parameter has no impact if the Clock Tick Device driver
1482    is not configured.
1483
1484    There may be BSP specific limits on the resolution or maximum value of a
1485    clock tick quantum.
1486
1487.. index:: CONFIGURE_TICKS_PER_TIMESLICE
1488.. index:: ticks per timeslice
1489
1490.. _CONFIGURE_TICKS_PER_TIMESLICE:
1491
1492CONFIGURE_TICKS_PER_TIMESLICE
1493-----------------------------
1494
1495CONSTANT:
1496    ``CONFIGURE_TICKS_PER_TIMESLICE``
1497
1498DATA TYPE:
1499    Unsigned integer (``uint32_t``).
1500
1501RANGE:
1502    Positive.
1503
1504DEFAULT VALUE:
1505    The default value is 50.
1506
1507DESCRIPTION:
1508    This configuration parameter specifies the length of the timeslice quantum
1509    in ticks for each task.
1510
1511NOTES:
1512    This configuration parameter has no impact if the Clock Tick Device driver
1513    is not configured.
1514
1515.. index:: CONFIGURE_MAXIMUM_PRIORITY
1516.. index:: maximum priority
1517.. index:: number of priority levels
1518
1519.. _CONFIGURE_MAXIMUM_PRIORITY:
1520
1521CONFIGURE_MAXIMUM_PRIORITY
1522--------------------------
1523
1524CONSTANT:
1525    ``CONFIGURE_MAXIMUM_PRIORITY``
1526
1527DATA TYPE:
1528    Unsigned integer (``uint8_t``).
1529
1530RANGE:
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
1535DEFAULT VALUE:
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.
1539
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.
1544
1545   Reducing the number of priorities in the system reduces the amount of memory
1546   allocated from the RTEMS Workspace.
1547
1548NOTES:
1549   The numerically greatest priority is the logically lowest priority in the
1550   system and will thus be used by the IDLE task.
1551
1552   Priority zero (0) is reserved for internal use by RTEMS and is not available
1553   to applications.
1554
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.
1560
1561.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1562.. index:: maximum thread name size
1563
1564.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
1565
1566CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1567----------------------------------
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
1589   size.  This configuration option is available since RTEMS 5.1.
1590
1591.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
1592.. index:: minimum task stack size
1593
1594.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
1595
1596CONFIGURE_MINIMUM_TASK_STACK_SIZE
1597---------------------------------
1598
1599CONSTANT:
1600    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
1601
1602DATA TYPE:
1603    Unsigned integer (``uint32_t``).
1604
1605RANGE:
1606    Positive.
1607
1608DEFAULT VALUE:
1609    This is not defined by default, which sets the executive to the recommended
1610    minimum stack size for this processor.
1611
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.
1615
1616    Adjusting this parameter should be done with caution. Examining the actual
1617    usage using the Stack Checker Usage Reporting facility is recommended.
1618
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.
1624
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.
1628
1629.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
1630.. index:: interrupt stack size
1631
1632.. _CONFIGURE_INTERRUPT_STACK_SIZE:
1633
1634CONFIGURE_INTERRUPT_STACK_SIZE
1635------------------------------
1636
1637CONSTANT:
1638    ``CONFIGURE_INTERRUPT_STACK_SIZE``
1639
1640DATA TYPE:
1641    Unsigned integer (``uint32_t``).
1642
1643RANGE:
1644    Positive.
1645
1646DEFAULT VALUE:
1647    The default value is CONFIGURE_MINIMUM_TASK_STACK_SIZE, which is the
1648    minimum interrupt stack size.
1649
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.
1654
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.
1658
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.
1662
1663.. index:: CONFIGURE_EXTRA_TASK_STACKS
1664.. index:: memory for task tasks
1665
1666.. _CONFIGURE_EXTRA_TASK_STACKS:
1667
1668CONFIGURE_EXTRA_TASK_STACKS
1669---------------------------
1670
1671CONSTANT:
1672    ``CONFIGURE_EXTRA_TASK_STACKS``
1673
1674DATA TYPE:
1675    Unsigned integer (``size_t``).
1676
1677RANGE:
1678    Undefined or positive.
1679
1680DEFAULT VALUE:
1681    The default value is 0.
1682
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>``.
1687
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>``.
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
1699.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
1700
1701CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1702--------------------------------------
1703
1704CONSTANT:
1705    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
1706
1707DATA TYPE:
1708    Boolean feature macro.
1709
1710RANGE:
1711    Defined or undefined.
1712
1713DEFAULT VALUE:
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.
1716
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.
1721
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.
1725
1726.. index:: CONFIGURE_STACK_CHECKER_ENABLED
1727
1728.. _CONFIGURE_STACK_CHECKER_ENABLED:
1729
1730CONFIGURE_STACK_CHECKER_ENABLED
1731-------------------------------
1732
1733CONSTANT:
1734    ``CONFIGURE_STACK_CHECKER_ENABLED``
1735
1736DATA TYPE:
1737    Boolean feature macro.
1738
1739RANGE:
1740    Defined or undefined.
1741
1742DEFAULT VALUE:
1743    This is not defined by default, and thus stack checking is disabled.
1744
1745DESCRIPTION:
1746    This configuration parameter is defined when the application wishes to
1747    enable run-time stack bounds checking.
1748
1749NOTES:
1750    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
1751
1752    This increases the time required to create tasks as well as adding overhead
1753    to each context switch.
1754
1755.. index:: CONFIGURE_INITIAL_EXTENSIONS
1756
1757.. _CONFIGURE_INITIAL_EXTENSIONS:
1758
1759CONFIGURE_INITIAL_EXTENSIONS
1760----------------------------
1761
1762CONSTANT:
1763    ``CONFIGURE_INITIAL_EXTENSIONS``
1764
1765DATA TYPE:
1766    List of user extension initializers (``rtems_extensions_table``).
1767
1768RANGE:
1769    Undefined or a list of one or more user extensions.
1770
1771DEFAULT VALUE:
1772    This is not defined by default.
1773
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.
1778
1779NOTES:
1780    None.
1781
1782Configuring Custom Task Stack Allocation
1783========================================
1784
1785RTEMS allows the application or BSP to define its own allocation and
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.
1789
1790.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1791
1792.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
1793
1794CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1795-----------------------------------
1796
1797CONSTANT:
1798    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1799
1800DATA TYPE:
1801    Function pointer.
1802
1803RANGE:
1804    Undefined, NULL or valid function pointer.
1805
1806DEFAULT VALUE:
1807    The default value is NULL, which indicates that task stacks will be
1808    allocated from the RTEMS Workspace.
1809
1810DESCRIPTION:
1811    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
1812    method for an application or BSP specific task stack allocation
1813    implementation.
1814
1815NOTES:
1816    A correctly configured system must configure the following to be consistent:
1817
1818- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1819
1820- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1821
1822- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1823
1824.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
1825.. index:: task stack allocator
1826
1827.. _CONFIGURE_TASK_STACK_ALLOCATOR:
1828
1829CONFIGURE_TASK_STACK_ALLOCATOR
1830------------------------------
1831
1832CONSTANT:
1833    ``CONFIGURE_TASK_STACK_ALLOCATOR``
1834
1835DATA TYPE:
1836    Function pointer.
1837
1838RANGE:
1839    Undefined or valid function pointer.
1840
1841DEFAULT VALUE:
1842    The default value is ``_Workspace_Allocate``, which indicates that task
1843    stacks will be allocated from the RTEMS Workspace.
1844
1845DESCRIPTION:
1846    ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
1847    allocate task stacks.
1848
1849NOTES:
1850    A correctly configured system must configure the following to be consistent:
1851
1852- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1853
1854- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1855
1856- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1857
1858.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
1859.. index:: task stack deallocator
1860
1861.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
1862
1863CONFIGURE_TASK_STACK_DEALLOCATOR
1864--------------------------------
1865
1866CONSTANT:
1867    ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1868
1869DATA TYPE:
1870    Function pointer.
1871
1872RANGE:
1873    Undefined or valid function pointer.
1874
1875DEFAULT VALUE:
1876    The default value is ``_Workspace_Free``, which indicates that task stacks
1877    will be allocated from the RTEMS Workspace.
1878
1879DESCRIPTION:
1880    ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
1881    to free task stacks.
1882
1883NOTES:
1884    A correctly configured system must configure the following to be consistent:
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
1895This section describes the configuration parameters related to specifying the
1896amount of memory reserved for Classic API Message Buffers.
1897
1898.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1899.. index:: memory for a single message queue's buffers
1900
1901.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
1902
1903CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1904-----------------------------------
1905
1906CONSTANT:
1907    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
1908
1909DATA TYPE:
1910    Unsigned integer (``size_t``).
1911
1912RANGE:
1913    Positive.
1914
1915DEFAULT VALUE:
1916    The default value is None.
1917
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.
1923
1924    The interface for this macro is as follows:
1925
1926    .. code-block:: c
1927
1928        CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
1929
1930    Where ``max_messages`` is the maximum number of pending messages and
1931    ``size_per`` is the size in bytes of the user message.
1932
1933NOTES:
1934
1935    This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
1936
1937.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
1938.. index:: configure message queue buffer memory
1939
1940.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
1941
1942CONFIGURE_MESSAGE_BUFFER_MEMORY
1943-------------------------------
1944
1945CONSTANT:
1946    ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
1947
1948DATA TYPE:
1949    integer summation macro
1950
1951RANGE:
1952    undefined (zero) or calculation resulting in a positive integer
1953
1954DEFAULT VALUE:
1955    This is not defined by default, and zero (0) memory is reserved.
1956
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                     )
1980
1981Seldom Used Configuration Parameters
1982====================================
1983
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.
1988
1989.. index:: CONFIGURE_MEMORY_OVERHEAD
1990
1991.. _CONFIGURE_MEMORY_OVERHEAD:
1992
1993CONFIGURE_MEMORY_OVERHEAD
1994-------------------------
1995
1996CONSTANT:
1997    ``CONFIGURE_MEMORY_OVERHEAD``
1998
1999DATA TYPE:
2000    Unsigned integer (``size_t``).
2001
2002RANGE:
2003    Zero or positive.
2004
2005DEFAULT VALUE:
2006    The default value is 0.
2007
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>``.
2011
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.
2017
2018.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
2019
2020.. _CONFIGURE_HAS_OWN_CONFIGURATION_TABLE:
2021
2022CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
2023-------------------------------------
2024
2025CONSTANT:
2026    ``CONFIGURE_HAS_OWN_CONFIGURATION_TABLE``
2027
2028DATA TYPE:
2029    Boolean feature macro.
2030
2031RANGE:
2032    Defined or undefined.
2033
2034DEFAULT VALUE:
2035    This is not defined by default.
2036
2037DESCRIPTION:
2038    This configuration parameter should only be defined if the application is
2039    providing their own complete set of configuration tables.
2040
2041NOTES:
2042    None.
2043
2044C Library Support Configuration
2045===============================
2046
2047This section defines the file system and IO library related configuration
2048parameters supported by ``<rtems/confdefs.h>``.
2049
2050.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2051.. index:: maximum file descriptors
2052
2053.. _CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS:
2054
2055CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2056----------------------------------------
2057
2058CONSTANT:
2059    ``CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS``
2060
2061DATA TYPE:
2062    Unsigned integer (``uint32_t``).
2063
2064RANGE:
2065    Zero or positive.
2066
2067DEFAULT VALUE:
2068    If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
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``.
2072
2073DESCRIPTION:
2074    This configuration parameter is set to the maximum number of file like
2075    objects that can be concurrently open.
2076
2077NOTES:
2078    None.
2079
2080File System Configuration Parameters
2081====================================
2082
2083This section defines File System related configuration parameters.
2084
2085.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
2086
2087.. _CONFIGURE_HAS_OWN_MOUNT_TABLE:
2088
2089CONFIGURE_HAS_OWN_MOUNT_TABLE
2090-----------------------------
2091
2092CONSTANT:
2093    ``CONFIGURE_HAS_OWN_MOUNT_TABLE``
2094
2095DATA TYPE:
2096    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2097
2098RANGE:
2099    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2100
2101DEFAULT VALUE:
2102    This is not defined by default.
2103
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``.
2110
2111.. COMMENT: XXX - is the variable name for the count right?
2112
2113NOTES:
2114    None.
2115
2116.. COMMENT: XXX - Please provide an example
2117
2118.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2119
2120.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
2121
2122CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2123--------------------------------------
2124
2125CONSTANT:
2126    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
2127
2128DATA TYPE:
2129    Boolean feature macro.
2130
2131RANGE:
2132    Defined or undefined.
2133
2134DEFAULT VALUE:
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.
2137
2138DESCRIPTION:
2139    This configuration parameter is defined if the application wishes to use
2140    the device-only filesytem as the root file system.
2141
2142NOTES:
2143    The device-only filesystem supports only device nodes and is smaller in
2144    executable code size than the full IMFS and miniIMFS.
2145
2146    The devFS is comparable in functionality to the pseudo-filesystem name
2147    space provided before RTEMS release 4.5.0.
2148
2149.. index:: CONFIGURE_MAXIMUM_DEVICES
2150
2151.. _CONFIGURE_MAXIMUM_DEVICES:
2152
2153CONFIGURE_MAXIMUM_DEVICES
2154-------------------------
2155
2156CONSTANT:
2157    ``CONFIGURE_MAXIMUM_DEVICES``
2158
2159DATA TYPE:
2160    Unsigned integer (``uint32_t``).
2161
2162RANGE:
2163    Positive.
2164
2165DEFAULT VALUE:
2166    If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
2167    ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
2168
2169DESCRIPTION:
2170    ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
2171    devices that may be registered in the device file system (devFS).
2172
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.
2178
2179.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2180
2181.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
2182
2183CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2184----------------------------------------
2185
2186CONSTANT:
2187    ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
2188
2189DATA TYPE:
2190    Boolean feature macro.
2191
2192RANGE:
2193    Defined or undefined.
2194
2195DEFAULT VALUE:
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.
2198
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()``.
2203
2204NOTES:
2205    None.
2206
2207.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2208
2209.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
2210
2211CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2212-----------------------------------------
2213
2214CONSTANT:
2215    ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
2216
2217DATA TYPE:
2218    Boolean feature macro.
2219
2220RANGE:
2221    Defined or undefined.
2222
2223DEFAULT VALUE:
2224    This is not defined by default.
2225
2226DESCRIPTION:
2227    In case this configuration option is defined, then the following
2228    configuration options will be defined as well
2229
2230    - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
2231
2232    - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
2233
2234    - ``CONFIGURE_IMFS_DISABLE_UTIME``,
2235
2236    - ``CONFIGURE_IMFS_DISABLE_LINK``,
2237
2238    - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
2239
2240    - ``CONFIGURE_IMFS_DISABLE_READLINK``,
2241
2242    - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
2243
2244    - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
2245
2246.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2247
2248.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
2249
2250CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2251--------------------------------------
2252
2253CONSTANT:
2254    ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
2255
2256DATA TYPE:
2257    Boolean feature macro.
2258
2259RANGE:
2260    Valid values for this configuration parameter are a power of two (2)
2261    between 16 and 512 inclusive.  In other words, valid values are 16, 32, 64,
2262    128, 256,and 512.
2263
2264DEFAULT VALUE:
2265    The default IMFS block size is 128 bytes.
2266
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.
2276
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:
2281
2282    - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
2283
2284    - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
2285
2286    - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
2287
2288    - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
2289
2290    - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
2291
2292    - when the block size is 512 bytes, the maximum file size is 1,082,195,456
2293      bytes.
2294
2295.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
2296
2297.. _CONFIGURE_IMFS_DISABLE_CHOWN:
2298
2299CONFIGURE_IMFS_DISABLE_CHOWN
2300----------------------------
2301
2302CONSTANT:
2303    ``CONFIGURE_IMFS_DISABLE_CHOWN``
2304
2305DATA TYPE:
2306    Boolean feature macro.
2307
2308RANGE:
2309    Defined or undefined.
2310
2311DEFAULT VALUE:
2312    This is not defined by default.
2313
2314DESCRIPTION:
2315    In case this configuration option is defined, then the support to change
2316    the owner is disabled in the root IMFS.
2317
2318.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
2319
2320.. _CONFIGURE_IMFS_DISABLE_CHMOD:
2321
2322CONFIGURE_IMFS_DISABLE_CHMOD
2323----------------------------
2324
2325CONSTANT:
2326    ``CONFIGURE_IMFS_DISABLE_CHMOD``
2327
2328DATA TYPE:
2329    Boolean feature macro.
2330
2331RANGE:
2332    Defined or undefined.
2333
2334DEFAULT VALUE:
2335    This is not defined by default.
2336
2337DESCRIPTION:
2338    In case this configuration option is defined, then the support to change
2339    the mode is disabled in the root IMFS.
2340
2341.. index:: CONFIGURE_IMFS_DISABLE_UTIME
2342
2343.. _CONFIGURE_IMFS_DISABLE_UTIME:
2344
2345CONFIGURE_IMFS_DISABLE_UTIME
2346----------------------------
2347
2348CONSTANT:
2349    ``CONFIGURE_IMFS_DISABLE_UTIME``
2350
2351DATA TYPE:
2352    Boolean feature macro.
2353
2354RANGE:
2355    Defined or undefined.
2356
2357DEFAULT VALUE:
2358    This is not defined by default.
2359
2360DESCRIPTION:
2361    In case this configuration option is defined, then the support to change
2362    times is disabled in the root IMFS.
2363
2364.. index:: CONFIGURE_IMFS_DISABLE_LINK
2365
2366.. _CONFIGURE_IMFS_DISABLE_LINK:
2367
2368CONFIGURE_IMFS_DISABLE_LINK
2369---------------------------
2370
2371CONSTANT:
2372    ``CONFIGURE_IMFS_DISABLE_LINK``
2373
2374DATA TYPE:
2375    Boolean feature macro.
2376
2377RANGE:
2378    Defined or undefined.
2379
2380DEFAULT VALUE:
2381    This is not defined by default.
2382
2383DESCRIPTION:
2384    In case this configuration option is defined, then the support to create
2385    hard links is disabled in the root IMFS.
2386
2387.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
2388
2389.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
2390
2391CONFIGURE_IMFS_DISABLE_SYMLINK
2392------------------------------
2393
2394CONSTANT:
2395    ``CONFIGURE_IMFS_DISABLE_SYMLINK``
2396
2397DATA TYPE:
2398    Boolean feature macro.
2399
2400RANGE:
2401    Defined or undefined.
2402
2403DEFAULT VALUE:
2404    This is not defined by default.
2405
2406DESCRIPTION:
2407    In case this configuration option is defined, then the support to create
2408    symbolic links is disabled in the root IMFS.
2409
2410.. index:: CONFIGURE_IMFS_DISABLE_READLINK
2411
2412.. _CONFIGURE_IMFS_DISABLE_READLINK:
2413
2414CONFIGURE_IMFS_DISABLE_READLINK
2415-------------------------------
2416
2417CONSTANT:
2418    ``CONFIGURE_IMFS_DISABLE_READLINK``
2419
2420DATA TYPE:
2421    Boolean feature macro.
2422
2423RANGE:
2424    Defined or undefined.
2425
2426DEFAULT VALUE:
2427    This is not defined by default.
2428
2429DESCRIPTION:
2430    In case this configuration option is defined, then the support to read
2431    symbolic links is disabled in the root IMFS.
2432
2433.. index:: CONFIGURE_IMFS_DISABLE_RENAME
2434
2435.. _CONFIGURE_IMFS_DISABLE_RENAME:
2436
2437CONFIGURE_IMFS_DISABLE_RENAME
2438-----------------------------
2439
2440CONSTANT:
2441    ``CONFIGURE_IMFS_DISABLE_RENAME``
2442
2443DATA TYPE:
2444    Boolean feature macro.
2445
2446RANGE:
2447    Defined or undefined.
2448
2449DEFAULT VALUE:
2450    This is not defined by default.
2451
2452DESCRIPTION:
2453    In case this configuration option is defined, then the support to rename
2454    nodes is disabled in the root IMFS.
2455
2456.. index:: CONFIGURE_IMFS_DISABLE_READDIR
2457
2458.. _CONFIGURE_IMFS_DISABLE_READDIR:
2459
2460CONFIGURE_IMFS_DISABLE_READDIR
2461------------------------------
2462
2463CONSTANT:
2464    ``CONFIGURE_IMFS_DISABLE_READDIR``
2465
2466DATA TYPE:
2467    Boolean feature macro.
2468
2469RANGE:
2470    Defined or undefined.
2471
2472DEFAULT VALUE:
2473    This is not defined by default.
2474
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.
2479
2480.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
2481
2482.. _CONFIGURE_IMFS_DISABLE_MOUNT:
2483
2484CONFIGURE_IMFS_DISABLE_MOUNT
2485----------------------------
2486
2487CONSTANT:
2488    ``CONFIGURE_IMFS_DISABLE_MOUNT``
2489
2490DATA TYPE:
2491    Boolean feature macro.
2492
2493RANGE:
2494    Defined or undefined.
2495
2496DEFAULT VALUE:
2497    This is not defined by default.
2498
2499DESCRIPTION:
2500    In case this configuration option is defined, then the support to mount
2501    other file systems is disabled in the root IMFS.
2502
2503.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
2504
2505.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
2506
2507CONFIGURE_IMFS_DISABLE_UNMOUNT
2508------------------------------
2509
2510CONSTANT:
2511    ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
2512
2513DATA TYPE:
2514    Boolean feature macro.
2515
2516RANGE:
2517    Defined or undefined.
2518
2519DEFAULT VALUE:
2520    This is not defined by default.
2521
2522DESCRIPTION:
2523    In case this configuration option is defined, then the support to unmount
2524    file systems is disabled in the root IMFS.
2525
2526.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
2527
2528.. _CONFIGURE_IMFS_DISABLE_MKNOD:
2529
2530CONFIGURE_IMFS_DISABLE_MKNOD
2531----------------------------
2532
2533CONSTANT:
2534    ``CONFIGURE_IMFS_DISABLE_MKNOD``
2535
2536DATA TYPE:
2537    Boolean feature macro.
2538
2539RANGE:
2540    Defined or undefined.
2541
2542DEFAULT VALUE:
2543    This is not defined by default.
2544
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.
2548
2549.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2550
2551.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
2552
2553CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2554---------------------------------
2555
2556CONSTANT:
2557    ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
2558
2559DATA TYPE:
2560    Boolean feature macro.
2561
2562RANGE:
2563    Defined or undefined.
2564
2565DEFAULT VALUE:
2566    This is not defined by default.
2567
2568DESCRIPTION:
2569    In case this configuration option is defined, then the support to make
2570    regular files is disabled in the root IMFS.
2571
2572.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
2573
2574.. _CONFIGURE_IMFS_DISABLE_RMNOD:
2575
2576CONFIGURE_IMFS_DISABLE_RMNOD
2577----------------------------
2578
2579CONSTANT:
2580    ``CONFIGURE_IMFS_DISABLE_RMNOD``
2581
2582DATA TYPE:
2583    Boolean feature macro.
2584
2585RANGE:
2586    Defined or undefined.
2587
2588DEFAULT VALUE:
2589    This is not defined by default.
2590
2591DESCRIPTION:
2592    In case this configuration option is defined, then the support to remove
2593    nodes is disabled in the root IMFS.
2594
2595Block Device Cache Configuration
2596================================
2597
2598This section defines Block Device Cache (bdbuf) related configuration
2599parameters.
2600
2601.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2602
2603.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
2604
2605CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2606------------------------------------
2607
2608CONSTANT:
2609    ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
2610
2611DATA TYPE:
2612    Boolean feature macro.
2613
2614RANGE:
2615    Defined or undefined.
2616
2617DEFAULT VALUE:
2618    This is not defined by default.
2619
2620DESCRIPTION:
2621    Provides a Block Device Cache configuration.
2622
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.
2627
2628.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2629
2630.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
2631
2632CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2633---------------------------------
2634
2635CONSTANT:
2636    ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
2637
2638DATA TYPE:
2639    Unsigned integer (``size_t``).
2640
2641RANGE:
2642    Positive.
2643
2644DEFAULT VALUE:
2645    The default value is 32768 bytes.
2646
2647DESCRIPTION:
2648    Size of the cache memory in bytes.
2649
2650NOTES:
2651    None.
2652
2653.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2654
2655.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
2656
2657CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2658-------------------------------
2659
2660CONSTANT:
2661    ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
2662
2663DATA TYPE:
2664    Unsigned integer (``uint32_t``).
2665
2666RANGE:
2667    Positive.
2668
2669DEFAULT VALUE:
2670    The default value is 512 bytes.
2671
2672DESCRIPTION:
2673    Defines the minimum size of a buffer in bytes.
2674
2675NOTES:
2676    None.
2677
2678.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2679
2680.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
2681
2682CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2683-------------------------------
2684
2685CONSTANT:
2686    ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
2687
2688DATA TYPE:
2689    Unsigned integer (``uint32_t``).
2690
2691RANGE:
2692    It must be positive and an integral multiple of the buffer minimum size.
2693
2694DEFAULT VALUE:
2695    The default value is 4096 bytes.
2696
2697DESCRIPTION:
2698    Defines the maximum size of a buffer in bytes.
2699
2700NOTES:
2701    None.
2702
2703.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
2704
2705.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
2706
2707CONFIGURE_SWAPOUT_SWAP_PERIOD
2708-----------------------------
2709
2710CONSTANT:
2711    ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
2712
2713DATA TYPE:
2714    Unsigned integer (``uint32_t``).
2715
2716RANGE:
2717    Positive.
2718
2719DEFAULT VALUE:
2720    The default value is 250 milliseconds.
2721
2722DESCRIPTION:
2723    Defines the swapout task swap period in milliseconds.
2724
2725NOTES:
2726    None.
2727
2728.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
2729
2730.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
2731
2732CONFIGURE_SWAPOUT_BLOCK_HOLD
2733----------------------------
2734
2735CONSTANT:
2736    ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
2737
2738DATA TYPE:
2739    Unsigned integer (``uint32_t``).
2740
2741RANGE:
2742    Positive.
2743
2744DEFAULT VALUE:
2745    The default value is 1000 milliseconds.
2746
2747DESCRIPTION:
2748    Defines the swapout task maximum block hold time in milliseconds.
2749
2750NOTES:
2751    None.
2752
2753.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
2754
2755.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
2756
2757CONFIGURE_SWAPOUT_TASK_PRIORITY
2758-------------------------------
2759
2760CONSTANT:
2761    ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
2762
2763DATA TYPE:
2764    Task priority (``rtems_task_priority``).
2765
2766RANGE:
2767    Valid task priority.
2768
2769DEFAULT VALUE:
2770    The default value is 15.
2771
2772DESCRIPTION:
2773    Defines the swapout task priority.
2774
2775NOTES:
2776    None.
2777
2778.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
2779
2780.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
2781
2782CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
2783-------------------------------------
2784
2785CONSTANT:
2786    ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
2787
2788DATA TYPE:
2789    Unsigned integer (``uint32_t``).
2790
2791RANGE:
2792    Positive.
2793
2794DEFAULT VALUE:
2795    The default value is 0.
2796
2797DESCRIPTION:
2798    Defines the maximum blocks per read-ahead request.
2799
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.
2804
2805.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
2806
2807.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
2808
2809CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
2810--------------------------------
2811
2812CONSTANT:
2813    ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
2814
2815DATA TYPE:
2816    Unsigned integer (``uint32_t``).
2817
2818RANGE:
2819    Positive.
2820
2821DEFAULT VALUE:
2822    The default value is 16.
2823
2824DESCRIPTION:
2825    Defines the maximum blocks per write request.
2826
2827NOTES:
2828    None.
2829
2830.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
2831
2832.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
2833
2834CONFIGURE_BDBUF_TASK_STACK_SIZE
2835-------------------------------
2836
2837CONSTANT:
2838    ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
2839
2840DATA TYPE:
2841    Unsigned integer (``size_t``).
2842
2843RANGE:
2844    Zero or positive.
2845
2846DEFAULT VALUE:
2847    The default value is RTEMS_MINIMUM_STACK_SIZE.
2848
2849DESCRIPTION:
2850    Defines the task stack size of the Block Device Cache tasks in bytes.
2851
2852NOTES:
2853    None.
2854
2855.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2856
2857.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
2858
2859CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2860----------------------------------------
2861
2862CONSTANT:
2863    ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
2864
2865DATA TYPE:
2866    Task priority (``rtems_task_priority``).
2867
2868RANGE:
2869    Valid task priority.
2870
2871DEFAULT VALUE:
2872    The default value is 15.
2873
2874DESCRIPTION:
2875    Defines the read-ahead task priority.
2876
2877NOTES:
2878    None.
2879
2880.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
2881
2882.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
2883
2884CONFIGURE_SWAPOUT_WORKER_TASKS
2885------------------------------
2886
2887CONSTANT:
2888    ``CONFIGURE_SWAPOUT_WORKER_TASKS``
2889
2890DATA TYPE:
2891    Unsigned integer (``size_t``).
2892
2893RANGE:
2894    Zero or positive.
2895
2896DEFAULT VALUE:
2897    The default value is 0.
2898
2899DESCRIPTION:
2900    Defines the swapout worker task count.
2901
2902NOTES:
2903    None.
2904
2905.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2906
2907.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
2908
2909CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2910--------------------------------------
2911
2912CONSTANT:
2913    ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
2914
2915DATA TYPE:
2916    Task priority (``rtems_task_priority``).
2917
2918RANGE:
2919    Valid task priority.
2920
2921DEFAULT VALUE:
2922    The default value is 15.
2923
2924DESCRIPTION:
2925    Defines the swapout worker task priority.
2926
2927NOTES:
2928    None.
2929
2930BSP Specific Settings
2931=====================
2932
2933This section describes BSP specific configuration settings used by
2934``<rtems/confdefs.h>``.  The BSP specific configuration settings are defined in
2935``<bsp.h>``.
2936
2937.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
2938
2939.. _CONFIGURE_DISABLE_BSP_SETTINGS:
2940
2941CONFIGURE_DISABLE_BSP_SETTINGS
2942------------------------------
2943
2944CONSTANT:
2945    ``CONFIGURE_DISABLE_BSP_SETTINGS``
2946
2947DATA TYPE:
2948    Boolean feature macro.
2949
2950RANGE:
2951    Defined or undefined.
2952
2953DEFAULT VALUE:
2954    This is not defined by default.
2955
2956DESCRIPTION:
2957    All BSP specific configuration settings can be disabled by the application
2958    with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
2959
2960NOTES:
2961    None.
2962
2963.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2964
2965.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
2966
2967CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2968----------------------------------
2969
2970CONSTANT:
2971    ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
2972
2973DATA TYPE:
2974    Boolean feature macro.
2975
2976RANGE:
2977    Defined or undefined.
2978
2979DEFAULT VALUE:
2980    This option is BSP specific.
2981
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.
2986
2987    If defined, when ``malloc()`` is unable to allocate memory, it will call
2988    the BSP supplied ``sbrk()`` to obtain more memory.
2989
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.
2993
2994.. index:: BSP_IDLE_TASK_BODY
2995
2996.. _BSP_IDLE_TASK_BODY:
2997
2998BSP_IDLE_TASK_BODY
2999------------------
3000
3001CONSTANT:
3002    ``BSP_IDLE_TASK_BODY``
3003
3004DATA TYPE:
3005    Function pointer.
3006
3007RANGE:
3008    Undefined or valid function pointer.
3009
3010DEFAULT VALUE:
3011    This option is BSP specific.
3012
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.
3017
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
3022
3023.. index:: BSP_IDLE_TASK_STACK_SIZE
3024
3025.. _BSP_IDLE_TASK_STACK_SIZE:
3026
3027BSP_IDLE_TASK_STACK_SIZE
3028------------------------
3029
3030CONSTANT:
3031    ``BSP_IDLE_TASK_STACK_SIZE``
3032
3033DATA TYPE:
3034    Unsigned integer (``size_t``).
3035
3036RANGE:
3037    Undefined or positive.
3038
3039DEFAULT VALUE:
3040    This option is BSP specific.
3041
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.
3046
3047NOTES:
3048    The order of precedence for configuring the IDLE task stack size is:
3049
3050    - RTEMS default minimum stack size.
3051
3052    - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
3053
3054    - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
3055
3056    - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
3057
3058.. COMMENT: XXX - add cross references to other related values.
3059
3060.. index:: BSP_INITIAL_EXTENSION
3061
3062.. _BSP_INITIAL_EXTENSION:
3063
3064BSP_INITIAL_EXTENSION
3065---------------------
3066
3067CONSTANT:
3068    ``BSP_INITIAL_EXTENSION``
3069
3070DATA TYPE:
3071    List of user extension initializers (``rtems_extensions_table``).
3072
3073RANGE:
3074    Undefined or a list of user extension initializers.
3075
3076DEFAULT VALUE:
3077    This option is BSP specific.
3078
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.
3083
3084NOTES:
3085    None.
3086
3087.. index:: BSP_INTERRUPT_STACK_SIZE
3088
3089.. _BSP_INTERRUPT_STACK_SIZE:
3090
3091BSP_INTERRUPT_STACK_SIZE
3092------------------------
3093
3094CONSTANT:
3095    ``BSP_INTERRUPT_STACK_SIZE``
3096
3097DATA TYPE:
3098    Unsigned integer (``size_t``).
3099
3100RANGE:
3101    Undefined or positive.
3102
3103DEFAULT VALUE:
3104    This option is BSP specific.
3105
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.
3110
3111NOTES:
3112    None.
3113
3114.. index:: BSP_MAXIMUM_DEVICES
3115
3116.. _BSP_MAXIMUM_DEVICES:
3117
3118BSP_MAXIMUM_DEVICES
3119-------------------
3120
3121CONSTANT:
3122    ``BSP_MAXIMUM_DEVICES``
3123
3124DATA TYPE:
3125    Unsigned integer (``size_t``).
3126
3127RANGE:
3128    Undefined or positive.
3129
3130DEFAULT VALUE:
3131    This option is BSP specific.
3132
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.
3137
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.
3143
3144.. index:: BSP_ZERO_WORKSPACE_AUTOMATICALLY
3145
3146.. _BSP_ZERO_WORKSPACE_AUTOMATICALLY:
3147
3148BSP_ZERO_WORKSPACE_AUTOMATICALLY
3149--------------------------------
3150
3151CONSTANT:
3152    ``BSP_ZERO_WORKSPACE_AUTOMATICALLY``
3153
3154DATA TYPE:
3155    Boolean feature macro.
3156
3157RANGE:
3158    Defined or undefined.
3159
3160DEFAULT VALUE:
3161    This option is BSP specific.
3162
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.
3167
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.
3171
3172.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
3173
3174.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
3175
3176CONFIGURE_BSP_PREREQUISITE_DRIVERS
3177----------------------------------
3178
3179CONSTANT:
3180    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
3181
3182DATA TYPE:
3183    List of device driver initializers (``rtems_driver_address_table``).
3184
3185RANGE:
3186    Undefined or array of device drivers.
3187
3188DEFAULT VALUE:
3189    This option is BSP specific.
3190
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.
3197
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.
3202
3203Idle Task Configuration
3204=======================
3205
3206This section defines the IDLE task related configuration parameters supported
3207by ``<rtems/confdefs.h>``.
3208
3209.. index:: CONFIGURE_IDLE_TASK_BODY
3210
3211.. _CONFIGURE_IDLE_TASK_BODY:
3212
3213CONFIGURE_IDLE_TASK_BODY
3214------------------------
3215
3216CONSTANT:
3217    ``CONFIGURE_IDLE_TASK_BODY``
3218
3219DATA TYPE:
3220    Function pointer.
3221
3222RANGE:
3223    Undefined or valid function pointer.
3224
3225DEFAULT VALUE:
3226    This is not defined by default.
3227
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.
3232
3233NOTES:
3234    None.
3235
3236.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
3237
3238.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
3239
3240CONFIGURE_IDLE_TASK_STACK_SIZE
3241------------------------------
3242
3243CONSTANT:
3244    ``CONFIGURE_IDLE_TASK_STACK_SIZE``
3245
3246DATA TYPE:
3247    Unsigned integer (``size_t``).
3248
3249RANGE:
3250    Undefined or positive.
3251
3252DEFAULT VALUE:
3253    The default value is RTEMS_MINIMUM_STACK_SIZE.
3254
3255DESCRIPTION:
3256    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
3257    IDLE task.
3258
3259NOTES:
3260    None.
3261
3262.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3263
3264.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
3265
3266CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3267-------------------------------------------
3268
3269CONSTANT:
3270    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
3271
3272DATA TYPE:
3273    Boolean feature macro.
3274
3275RANGE:
3276    Defined or undefined.
3277
3278DEFAULT VALUE:
3279    This is not defined by default, the user is assumed to provide one or more
3280    initialization tasks.
3281
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.
3287
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.
3293
3294    The IDLE task must run at the lowest priority of all tasks in the system.
3295
3296General Scheduler Configuration
3297===============================
3298
3299This section defines the configuration parameters related to selecting a
3300scheduling algorithm for an application.  For the :ref:`schedulers built into
3301RTEMS <SchedulingConcepts>`, the configuration is straightforward.  All that is
3302required is to define the configuration macro which specifies which scheduler
3303you want for in your application.
3304
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.
3308
3309.. index:: CONFIGURE_SCHEDULER_CBS
3310
3311.. _CONFIGURE_SCHEDULER_CBS:
3312
3313CONFIGURE_SCHEDULER_CBS
3314-----------------------
3315
3316CONSTANT:
3317    ``CONFIGURE_SCHEDULER_CBS``
3318
3319DATA TYPE:
3320    Boolean feature macro.
3321
3322RANGE:
3323    Defined or undefined.
3324
3325DEFAULT VALUE:
3326    This is not defined by default.
3327
3328DESCRIPTION:
3329    If defined, then the :ref:`Constant Bandwidth Server (CBS) Scheduler
3330    <SchedulerCBS>` algorithm is made available to the application.
3331
3332NOTES:
3333    In case no explicit :ref:`clustered scheduler configuration
3334    <ConfigurationSchedulersClustered>` is present, then it is used as the
3335    scheduler for exactly one processor.
3336
3337.. index:: CONFIGURE_SCHEDULER_EDF
3338
3339.. _CONFIGURE_SCHEDULER_EDF:
3340
3341CONFIGURE_SCHEDULER_EDF
3342-----------------------
3343
3344CONSTANT:
3345    ``CONFIGURE_SCHEDULER_EDF``
3346
3347DATA TYPE:
3348    Boolean feature macro.
3349
3350RANGE:
3351    Defined or undefined.
3352
3353DEFAULT VALUE:
3354    This is not defined by default.
3355
3356DESCRIPTION:
3357    If defined, then the :ref:`Earliest Deadline First (EDF) Scheduler
3358    <SchedulerEDF>` algorithm is made available to the application.
3359
3360NOTES:
3361    In case no explicit :ref:`clustered scheduler configuration
3362    <ConfigurationSchedulersClustered>` is present, then it is used as the
3363    scheduler for exactly one processor.
3364
3365.. index:: CONFIGURE_SCHEDULER_EDF_SMP
3366
3367.. _CONFIGURE_SCHEDULER_EDF_SMP:
3368
3369CONFIGURE_SCHEDULER_EDF_SMP
3370---------------------------
3371
3372CONSTANT:
3373    ``CONFIGURE_SCHEDULER_EDF_SMP``
3374
3375DATA TYPE:
3376    Boolean feature macro.
3377
3378RANGE:
3379    Defined or undefined.
3380
3381DEFAULT VALUE:
3382    This is not defined by default.
3383
3384DESCRIPTION:
3385    If defined, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
3386    <SchedulerSMPEDF>` algorithm is made available to the application.
3387
3388NOTES:
3389    This scheduler algorithm is only available when RTEMS is built with SMP
3390    support enabled.
3391
3392    In case no explicit :ref:`clustered scheduler configuration
3393    <ConfigurationSchedulersClustered>` is present, then it is used as the
3394    scheduler for up to 32 processors.
3395
3396    This scheduler algorithm is the default in SMP configurations and is only
3397    selected when :ref:`CONFIGURE_MAXIMUM_PROCESSORS
3398    <CONFIGURE_MAXIMUM_PROCESSORS>` is greater than one.
3399
3400.. index:: CONFIGURE_SCHEDULER_NAME
3401
3402.. _CONFIGURE_SCHEDULER_NAME:
3403
3404CONFIGURE_SCHEDULER_NAME
3405------------------------
3406
3407CONSTANT:
3408    ``CONFIGURE_SCHEDULER_NAME``
3409
3410DATA TYPE:
3411    RTEMS Name (``rtems_name``).
3412
3413RANGE:
3414    Any value.
3415
3416DEFAULT VALUE:
3417    The default name is
3418
3419      - ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
3420      - ``"MPA "`` for the :ref:`Aribitary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
3421      - ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
3422      - ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
3423      - ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
3424      - ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
3425      - ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
3426      - ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
3427
3428DESCRIPTION:
3429    Schedulers can be identified via ``rtems_scheduler_ident``.  The name of
3430    the scheduler is determined by the configuration.
3431
3432NOTES:
3433    None.
3434
3435.. index:: CONFIGURE_SCHEDULER_PRIORITY
3436
3437.. _CONFIGURE_SCHEDULER_PRIORITY:
3438
3439CONFIGURE_SCHEDULER_PRIORITY
3440----------------------------
3441
3442CONSTANT:
3443    ``CONFIGURE_SCHEDULER_PRIORITY``
3444
3445DATA TYPE:
3446    Boolean feature macro.
3447
3448RANGE:
3449    Defined or undefined.
3450
3451DEFAULT VALUE:
3452    This is defined by default.  This is the default scheduler and specifying
3453    this configuration parameter is redundant.
3454
3455DESCRIPTION:
3456    If defined, then the :ref:`Deterministic Priority Scheduler
3457    <SchedulerPriority>` algorithm is made available to the application.
3458
3459NOTES:
3460    In case no explicit :ref:`clustered scheduler configuration
3461    <ConfigurationSchedulersClustered>` is present, then it is used as the
3462    scheduler for exactly one processor.
3463
3464    This scheduler algorithm is the default when
3465    :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
3466    exactly one.
3467
3468.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
3469
3470.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
3471
3472CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
3473-----------------------------------------
3474
3475CONSTANT:
3476    ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
3477
3478DATA TYPE:
3479    Boolean feature macro.
3480
3481RANGE:
3482    Defined or undefined.
3483
3484DEFAULT VALUE:
3485    This is not defined by default.
3486
3487DESCRIPTION:
3488    If defined, then the :ref:`Arbitrary Processor Affinity SMP Scheduler
3489    <SchedulerSMPPriorityAffinity>` algorithm is made available to the
3490    application.
3491
3492NOTES:
3493    This scheduler algorithm is only available when RTEMS is built with SMP
3494    support enabled.
3495
3496    In case no explicit :ref:`clustered scheduler configuration
3497    <ConfigurationSchedulersClustered>` is present, then it is used as the
3498    scheduler for up to 32 processors.
3499
3500.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
3501
3502.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
3503
3504CONFIGURE_SCHEDULER_PRIORITY_SMP
3505--------------------------------
3506
3507CONSTANT:
3508    ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
3509
3510DATA TYPE:
3511    Boolean feature macro.
3512
3513RANGE:
3514    Defined or undefined.
3515
3516DEFAULT VALUE:
3517    This is not defined by default.
3518
3519DESCRIPTION:
3520    If defined, then the :ref:`Deterministic Priority SMP Scheduler
3521    <SchedulerSMPPriority>` algorithm is made available to the application.
3522
3523NOTES:
3524    This scheduler algorithm is only available when RTEMS is built with SMP
3525    support enabled.
3526
3527    In case no explicit :ref:`clustered scheduler configuration
3528    <ConfigurationSchedulersClustered>` is present, then it is used as the
3529    scheduler for up to 32 processors.
3530
3531.. index:: CONFIGURE_SCHEDULER_SIMPLE
3532
3533.. _CONFIGURE_SCHEDULER_SIMPLE:
3534
3535CONFIGURE_SCHEDULER_SIMPLE
3536--------------------------
3537
3538CONSTANT:
3539    ``CONFIGURE_SCHEDULER_SIMPLE``
3540
3541DATA TYPE:
3542    Boolean feature macro.
3543
3544RANGE:
3545    Defined or undefined.
3546
3547DEFAULT VALUE:
3548    This is not defined by default.
3549
3550DESCRIPTION:
3551    If defined, then the :ref:`Simple Priority Scheduler
3552    <SchedulerPrioritySimple>` algorithm is made available to the application.
3553
3554NOTES:
3555    In case no explicit :ref:`clustered scheduler configuration
3556    <ConfigurationSchedulersClustered>` is present, then it is used as the
3557    scheduler for exactly one processor.
3558
3559.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
3560
3561.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
3562
3563CONFIGURE_SCHEDULER_SIMPLE_SMP
3564------------------------------
3565
3566CONSTANT:
3567    ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
3568
3569DATA TYPE:
3570    Boolean feature macro.
3571
3572RANGE:
3573    Defined or undefined.
3574
3575DEFAULT VALUE:
3576    This is not defined by default.
3577
3578DESCRIPTION:
3579    If defined, then the :ref:`Simple Priority SMP Scheduler
3580    <SchedulerSMPPrioritySimple>` algorithm is made available to the
3581    application.
3582
3583NOTES:
3584    This scheduler algorithm is only available when RTEMS is built with SMP
3585    support enabled.
3586
3587    In case no explicit :ref:`clustered scheduler configuration
3588    <ConfigurationSchedulersClustered>` is present, then it is used as the
3589    scheduler for up to 32 processors.
3590
3591.. index:: CONFIGURE_SCHEDULER_USER
3592
3593.. _CONFIGURE_SCHEDULER_USER:
3594
3595CONFIGURE_SCHEDULER_USER
3596------------------------
3597
3598CONSTANT:
3599    ``CONFIGURE_SCHEDULER_USER``
3600
3601DATA TYPE:
3602    Boolean feature macro.
3603
3604RANGE:
3605    Defined or undefined.
3606
3607DEFAULT VALUE:
3608    This is not defined by default.
3609
3610DESCRIPTION:
3611    RTEMS allows the application to provide its own task/thread scheduling
3612    algorithm. In order to do this, one must define
3613    ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
3614    scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
3615    following additional macros must be defined:
3616
3617    - ``CONFIGURE_SCHEDULER_CONTEXT`` must be defined to a static definition of
3618      the scheduler context of the user scheduler.
3619
3620    - ``CONFIGURE_SCHEDULER_CONTROLS`` must be defined to a scheduler control
3621      initializer for the user scheduler.
3622
3623    - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
3624      the per-thread information of the user scheduler.
3625
3626NOTES:
3627    At this time, the mechanics and requirements for writing a new scheduler
3628    are evolving and not fully documented.  It is recommended that you look at
3629    the existing Deterministic Priority Scheduler in
3630    ``cpukit/score/src/schedulerpriority*.c`` for guidance.  For guidance on
3631    the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
3632    for how these are defined for the Deterministic Priority Scheduler.
3633
3634.. _ConfigurationSchedulersClustered:
3635
3636Clustered Scheduler Configuration
3637=================================
3638
3639Clustered scheduling helps to control the worst-case latencies in a
3640multi-processor system (SMP).  The goal is to reduce the amount of shared state
3641in the system and thus prevention of lock contention.  Modern multi-processor
3642systems tend to have several layers of data and instruction caches.  With
3643clustered scheduling it is possible to honour the cache topology of a system
3644and thus avoid expensive cache synchronization traffic.
3645
3646We have clustered scheduling in case the set of processors of a system is
3647partitioned into non-empty pairwise-disjoint subsets.  These subsets are called
3648clusters.  Clusters with a cardinality of one are partitions.  Each cluster is
3649owned by exactly one scheduler instance.
3650
3651A clustered scheduler configuration is optional.  By default, up to 32
3652processors are managed by the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`.  In
3653order to use clustered scheduling the application designer has to answer two
3654questions.
3655
3656#. How is the set of processors partitioned into clusters?
3657
3658#. Which scheduler algorithm is used for which cluster?
3659
3660The schedulers are statically configured.
3661
3662Configuration Step 1 - Scheduler Algorithms
3663-------------------------------------------
3664
3665Firstly, the application must select which scheduling algorithms are available
3666with the following defines
3667
3668- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
3669
3670- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
3671
3672- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
3673
3674- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
3675
3676This is necessary to calculate the per-thread overhead introduced by the
3677schedulers.  After these definitions the configuration file must ``#include
3678<rtems/scheduler.h>`` to have access to scheduler-specific configuration
3679macros.
3680
3681Configuration Step 2 - Schedulers
3682---------------------------------
3683
3684Each scheduler needs a context to store state information at run-time.  Use the
3685following macros to create scheduler contexts
3686
3687- ``RTEMS_SCHEDULER_CONTEXT_EDF_SMP(name, max_cpu_count)``,
3688
3689- ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(name, prio_count)``,
3690
3691- ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(name, prio_count)``, and
3692
3693- ``RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(name)``.
3694
3695The ``name`` parameter is used as part of a designator for a global variable,
3696so the usual C/C++ designator rules apply.  This ``name`` is not the scheduler
3697object name.  Additional parameters are scheduler-specific.
3698
3699.. _ConfigurationSchedulerTable:
3700
3701Configuration Step 3 - Scheduler Table
3702--------------------------------------
3703
3704The schedulers are registered in the system via the scheduler table.
3705To create the scheduler table define ``CONFIGURE_SCHEDULER_CONTROLS`` to a list
3706of the following scheduler control initializers
3707
3708- ``RTEMS_SCHEDULER_CONTROL_EDF_SMP(name, obj_name)``,
3709
3710- ``RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(name, obj_name)``,
3711
3712- ``RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(name, obj_name)``, and
3713
3714- ``RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(name, obj_name)``.
3715
3716The ``name`` parameter must correspond to the parameter defining the scheduler
3717context.  The ``obj_name`` determines the scheduler object name and can be used
3718in :ref:`rtems_scheduler_ident() <rtems_scheduler_ident>` to get the scheduler
3719object identifier.  The scheduler index is defined by the index of the
3720scheduler table.  It is a configuration error to add a scheduler multiple times
3721to the scheduler table.
3722
3723Configuration Step 4 - Processor to Scheduler Assignment
3724--------------------------------------------------------
3725
3726The last step is to define which processor uses which scheduler.  For this
3727purpose a scheduler assignment table must be defined.  The entry count of this
3728table must be equal to the configured maximum processors
3729(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).  A
3730processor assignment to a scheduler can be optional or mandatory.  The boot
3731processor must have a scheduler assigned.  In case the system needs more
3732mandatory processors than available then a fatal run-time error will occur.  To
3733specify the scheduler assignments define
3734``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` to a list of
3735
3736- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
3737
3738- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
3739
3740macros.  The ``scheduler_index`` parameter must
3741be a valid index into the scheduler table.  The ``attr`` parameter defines the
3742scheduler assignment attributes.  By default, a scheduler assignment to a
3743processor is optional.  For the scheduler assignment attribute use one of the
3744mutually exclusive variants
3745
3746- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
3747
3748- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
3749
3750- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
3751
3752It is possible to add/remove processors to/from schedulers at run-time, see
3753:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
3754:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
3755
3756Configuration Example
3757---------------------
3758
3759The following example shows a scheduler configuration for a hypothetical
3760product using two chip variants.  One variant has four processors which is used
3761for the normal product line and another provides eight processors for the
3762high-performance product line.  The first processor performs hard-real time
3763control of actuators and sensors.  The second processor is not used by RTEMS at
3764all and runs a Linux instance to provide a graphical user interface.  The
3765additional processors are used for a worker thread pool to perform data
3766processing operations.
3767
3768The processors managed by RTEMS use two Deterministic Priority SMP schedulers
3769capable of dealing with 256 priority levels.  The scheduler with index zero has
3770the name ``"IO "``.  The scheduler with index one has the name ``"WORK"``.  The
3771scheduler assignments of the first, third and fourth processor are mandatory,
3772so the system must have at least four processors, otherwise a fatal run-time
3773error will occur during system startup.  The processor assignments for the
3774fifth up to the eighth processor are optional so that the same application can
3775be used for the normal and high-performance product lines.  The second
3776processor has no scheduler assigned and runs Linux.  A hypervisor will ensure
3777that the two systems cannot interfere in an undesirable way.
3778
3779.. code-block:: c
3780
3781    #define CONFIGURE_MAXIMUM_PROCESSORS 8
3782    #define CONFIGURE_MAXIMUM_PRIORITY 255
3783
3784    /* Configuration Step 1 - Scheduler Algorithms */
3785    #define CONFIGURE_SCHEDULER_PRIORITY_SMP
3786    #include <rtems/scheduler.h>
3787
3788    /* Configuration Step 2 - Schedulers */
3789    RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
3790    RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
3791
3792    /* Configuration Step 3 - Scheduler Table */
3793    #define CONFIGURE_SCHEDULER_CONTROLS \\
3794      RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
3795        io, \
3796         rtems_build_name('I', 'O', ' ', ' ') \
3797      ), \
3798      RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
3799        work, \
3800        rtems_build_name('W', 'O', 'R', 'K') \
3801      )
3802
3803    /* Configuration Step 4 - Processor to Scheduler Assignment */
3804    #define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
3805      RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3806      RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
3807      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3808      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3809      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3810      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3811      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3812      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
3813
3814Configuration Errors
3815--------------------
3816
3817In case one of the scheduler indices in ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS``
3818is invalid a link-time error will occur with an undefined reference to
3819``RTEMS_SCHEDULER_INVALID_INDEX``.
3820
3821Some fatal errors may occur in case of scheduler configuration inconsistencies
3822or a lack of processors on the system.  The fatal source is
3823``RTEMS_FATAL_SOURCE_SMP``.
3824
3825- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
3826  must have a scheduler assigned.
3827
3828- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
3829  processor beyond the range of physically or virtually available processors.
3830  The processor demand must be reduced for this system.
3831
3832- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
3833  processor failed during system initialization.  The system may not have this
3834  processor at all or it could be a problem with a boot loader for example.
3835  Check the ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` definition.
3836
3837- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
3838  to start multitasking on a processor with no scheduler assigned.
3839
3840Device Driver Table
3841===================
3842
3843This section defines the configuration parameters related to the automatic
3844generation of a Device Driver Table.  As ``<rtems/confdefs.h>`` only is aware
3845of a small set of standard device drivers, the generated Device Driver Table is
3846suitable for simple applications with no custom device drivers.
3847
3848Note that network device drivers are not configured in the Device Driver Table.
3849
3850.. index:: CONFIGURE_MAXIMUM_DRIVERS
3851
3852.. _CONFIGURE_MAXIMUM_DRIVERS:
3853
3854CONFIGURE_MAXIMUM_DRIVERS
3855-------------------------
3856
3857CONSTANT:
3858
3859    ``CONFIGURE_MAXIMUM_DRIVERS``
3860
3861DATA TYPE:
3862    Unsigned integer (``uint32_t``).
3863
3864RANGE:
3865    Zero or positive.
3866
3867DEFAULT VALUE:
3868    This is computed by default, and is set to the number of device drivers
3869    configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
3870    configuration parameters.
3871
3872DESCRIPTION:
3873    ``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
3874    per node.
3875
3876NOTES:
3877    If the application will dynamically install device drivers, then this
3878    configuration parameter must be larger than the number of statically
3879    configured device drivers. Drivers configured using the
3880    ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
3881    statically installed.
3882
3883.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3884
3885.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
3886
3887CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3888------------------------------------------
3889
3890CONSTANT:
3891    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
3892
3893DATA TYPE:
3894    Boolean feature macro.
3895
3896RANGE:
3897    Defined or undefined.
3898
3899DEFAULT VALUE:
3900    This is not defined by default.
3901
3902DESCRIPTION:
3903    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
3904    application wishes to include the Console Device Driver.
3905
3906NOTES:
3907    This device driver is responsible for providing the :file:`/dev/console`
3908    device file.  This device is used to initialize the standard input, output,
3909    and error file descriptors.
3910
3911    BSPs should be constructed in a manner that allows ``printk()`` to work
3912    properly without the need for the console driver to be configured.
3913
3914    The
3915
3916    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
3917
3918    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
3919
3920    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3921
3922    configuration options are mutually exclusive.
3923
3924.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
3925
3926.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
3927
3928CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
3929-------------------------------------------------
3930
3931CONSTANT:
3932    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
3933
3934DATA TYPE:
3935    Boolean feature macro.
3936
3937RANGE:
3938    Defined or undefined.
3939
3940DEFAULT VALUE:
3941    This is not defined by default.
3942
3943DESCRIPTION:
3944    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`` is defined if the
3945    application wishes to include the Simple Console Device Driver.
3946
3947NOTES:
3948    This device driver is responsible for providing the :file:`/dev/console`
3949    device file.  This device is used to initialize the standard input, output,
3950    and error file descriptors.
3951
3952    This device driver reads via ``getchark()``.
3953
3954    This device driver writes via ``rtems_putc()``.
3955
3956    The Termios framework is not used.  There is no support to change device
3957    settings, e.g. baud, stop bits, parity, etc.
3958
3959    The
3960
3961    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
3962
3963    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
3964
3965    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3966
3967    configuration options are mutually exclusive.
3968
3969.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
3970
3971.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
3972
3973CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
3974------------------------------------------------------
3975
3976CONSTANT:
3977    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3978
3979DATA TYPE:
3980    Boolean feature macro.
3981
3982RANGE:
3983    Defined or undefined.
3984
3985DEFAULT VALUE:
3986    This is not defined by default.
3987
3988DESCRIPTION:
3989    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`` is defined if
3990    the application wishes to include the Simple Task Console Device Driver.
3991
3992NOTES:
3993    This device driver is responsible for providing the :file:`/dev/console`
3994    device file.  This device is used to initialize the standard input, output,
3995    and error file descriptors.
3996
3997    This device driver reads via ``getchark()``.
3998
3999    This device driver writes into a write buffer.  The count of characters
4000    written into the write buffer is returned.  It might be less than the
4001    requested count, in case the write buffer is full.  The write is
4002    non-blocking and may be called from interrupt context.  A dedicated task
4003    reads from the write buffer and outputs the characters via
4004    ``rtems_putc()``.  This task runs with the least important priority.  The
4005    write buffer size is 2047 characters and it is not configurable.
4006
4007    Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
4008    write buffer.
4009
4010    The Termios framework is not used.  There is no support to change device
4011    settings, e.g.  baud, stop bits, parity, etc.
4012
4013    The
4014
4015    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
4016
4017    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
4018
4019    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
4020
4021    configuration options are mutually exclusive.
4022
4023.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
4024
4025.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
4026
4027CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
4028----------------------------------------
4029
4030CONSTANT:
4031    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
4032
4033DATA TYPE:
4034    Boolean feature macro.
4035
4036RANGE:
4037    Defined or undefined.
4038
4039DEFAULT VALUE:
4040    This is not defined by default.
4041
4042DESCRIPTION:
4043    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
4044    wishes to include the Clock Device Driver.
4045
4046NOTES:
4047    This device driver is responsible for providing a regular interrupt which
4048    invokes a clock tick directive.
4049
4050    If neither the Clock Driver not Benchmark Timer is enabled and the
4051    configuration parameter
4052    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
4053    compile time error will occur.
4054
4055.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
4056
4057.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
4058
4059CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
4060----------------------------------------
4061
4062CONSTANT:
4063    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
4064
4065DATA TYPE:
4066    Boolean feature macro.
4067
4068RANGE:
4069    Defined or undefined.
4070
4071DEFAULT VALUE:
4072    This is not defined by default.
4073
4074DESCRIPTION:
4075    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
4076    wishes to include the Timer Driver.  This device driver is used to
4077    benchmark execution times by the RTEMS Timing Test Suites.
4078
4079NOTES:
4080    If neither the Clock Driver not Benchmark Timer is enabled and the
4081    configuration parameter
4082    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
4083    compile time error will occur.
4084
4085.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
4086
4087.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
4088
4089CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
4090------------------------------------------------
4091
4092CONSTANT:
4093    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
4094
4095DATA TYPE:
4096    Boolean feature macro.
4097
4098RANGE:
4099    Defined or undefined.
4100
4101DEFAULT VALUE:
4102    This is not defined by default.
4103
4104DESCRIPTION:
4105    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
4106    application does *NOT* want the Clock Device Driver and is *NOT* using the
4107    Timer Driver.  The inclusion or exclusion of the Clock Driver must be
4108    explicit in user applications.
4109
4110NOTES:
4111    This configuration parameter is intended to prevent the common user error
4112    of using the Hello World example as the baseline for an application and
4113    leaving out a clock tick source.
4114
4115.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
4116
4117.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
4118
4119CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
4120--------------------------------------
4121
4122CONSTANT:
4123    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
4124
4125DATA TYPE:
4126    Boolean feature macro.
4127
4128RANGE:
4129    Defined or undefined.
4130
4131DEFAULT VALUE:
4132    This is not defined by default.
4133
4134DESCRIPTION:
4135    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
4136    wishes to include the Real-Time Clock Driver.
4137
4138NOTES:
4139    Most BSPs do not include support for a real-time clock. This is because
4140    many boards do not include the required hardware.
4141
4142    If this is defined and the BSP does not have this device driver, then the
4143    user will get a link time error for an undefined symbol.
4144
4145.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
4146
4147.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
4148
4149CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
4150-------------------------------------------
4151
4152CONSTANT:
4153    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
4154
4155DATA TYPE:
4156    Boolean feature macro.
4157
4158RANGE:
4159    Defined or undefined.
4160
4161DEFAULT VALUE:
4162    This is not defined by default.
4163
4164DESCRIPTION:
4165    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
4166    application wishes to include the Watchdog Driver.
4167
4168NOTES:
4169    Most BSPs do not include support for a watchdog device driver. This is
4170    because many boards do not include the required hardware.
4171
4172    If this is defined and the BSP does not have this device driver, then the
4173    user will get a link time error for an undefined symbol.
4174
4175.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4176
4177.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
4178
4179CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4180-----------------------------------------------
4181
4182CONSTANT:
4183    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
4184
4185DATA TYPE:
4186    Boolean feature macro.
4187
4188RANGE:
4189    Defined or undefined.
4190
4191DEFAULT VALUE:
4192    This is not defined by default.
4193
4194DESCRIPTION:
4195    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
4196    application wishes to include the BSP's Frame Buffer Device Driver.
4197
4198NOTES:
4199    Most BSPs do not include support for a Frame Buffer Device Driver. This is
4200    because many boards do not include the required hardware.
4201
4202    If this is defined and the BSP does not have this device driver, then the
4203    user will get a link time error for an undefined symbol.
4204
4205.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4206
4207.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
4208
4209CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4210---------------------------------------
4211
4212CONSTANT:
4213    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
4214
4215DATA TYPE:
4216    Boolean feature macro.
4217
4218RANGE:
4219    Defined or undefined.
4220
4221DEFAULT VALUE:
4222    This is not defined by default.
4223
4224DESCRIPTION:
4225    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
4226    wishes to include the Stub Device Driver.
4227
4228NOTES:
4229    This device driver simply provides entry points that return successful and
4230    is primarily a test fixture. It is supported by all BSPs.
4231
4232.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4233
4234.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
4235
4236CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4237------------------------------------------
4238
4239CONSTANT:
4240    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
4241
4242DATA TYPE:
4243    device driver entry structures
4244
4245RANGE:
4246    Undefined or set of device driver entry structures
4247
4248DEFAULT VALUE:
4249    This is not defined by default.
4250
4251DESCRIPTION:
4252    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
4253    application has device drivers it needs to include in the Device Driver
4254    Table.  This should be defined to the set of device driver entries that
4255    will be placed in the table at the *FRONT* of the Device Driver Table and
4256    initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
4257
4258NOTES:
4259    In some cases, it is used by System On Chip BSPs to support peripheral
4260    buses beyond those normally found on the System On Chip. For example, this
4261    is used by one RTEMS system which has implemented a SPARC/ERC32 based board
4262    with VMEBus. The VMEBus Controller initialization is performed by a device
4263    driver configured via this configuration parameter.
4264
4265.. COMMENT: XXX Add example
4266
4267.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
4268
4269.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
4270
4271CONFIGURE_APPLICATION_EXTRA_DRIVERS
4272-----------------------------------
4273
4274CONSTANT:
4275    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
4276
4277DATA TYPE:
4278    device driver entry structures
4279
4280RANGE:
4281    Undefined or set of device driver entry structures
4282
4283DEFAULT VALUE:
4284    This is not defined by default.
4285
4286DESCRIPTION:
4287    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
4288    device drivers it needs to include in the Device Driver Table.  This should
4289    be defined to the set of device driver entries that will be placed in the
4290    table at the *END* of the Device Driver Table.
4291
4292NOTES:
4293    None.
4294
4295.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4296.. index:: /dev/null
4297
4298.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
4299
4300CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4301---------------------------------------
4302
4303CONSTANT:
4304    ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
4305
4306DATA TYPE:
4307    Boolean feature macro.
4308
4309RANGE:
4310    Defined or undefined.
4311
4312DEFAULT VALUE:
4313    This is not defined by default.
4314
4315DESCRIPTION:
4316    This configuration variable is specified to enable ``/dev/null`` device driver.
4317
4318NOTES:
4319    This device driver is supported by all BSPs.
4320
4321.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4322.. index:: /dev/zero
4323
4324.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
4325
4326CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4327---------------------------------------
4328
4329CONSTANT:
4330    ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
4331
4332DATA TYPE:
4333    Boolean feature macro.
4334
4335RANGE:
4336    Defined or undefined.
4337
4338DEFAULT VALUE:
4339    This is not defined by default.
4340
4341DESCRIPTION:
4342    This configuration variable is specified to enable ``/dev/zero`` device driver.
4343
4344NOTES:
4345    This device driver is supported by all BSPs.
4346
4347.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4348
4349.. _CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE:
4350
4351CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4352-------------------------------------
4353
4354CONSTANT:
4355    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE``
4356
4357DATA TYPE:
4358    Boolean feature macro.
4359
4360RANGE:
4361    Defined or undefined.
4362
4363DEFAULT VALUE:
4364    This is not defined by default, indicating the ``<rtems/confdefs.h>`` is
4365    providing the device driver table.
4366
4367DESCRIPTION:
4368    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE`` is defined if the application
4369    wishes to provide their own Device Driver Table.
4370
4371    The table must be an array of ``rtems_driver_address_table`` entries
4372    named`` _IO_Driver_address_table``.  The application must also provide a
4373    const variable ``_IO_Number_of_drivers`` of type ``size_t`` indicating the
4374    number of entries in the ``_IO_Driver_address_table``.
4375
4376NOTES:
4377    It is expected that there the application would only rarely need to do this.
4378
4379Multiprocessing Configuration
4380=============================
4381
4382This section defines the multiprocessing related system configuration
4383parameters supported by ``<rtems/confdefs.h>``.  They are only used if the
4384Multiprocessing Support (distinct from the SMP support) is enabled at configure
4385time using the ``--enable-multiprocessing`` option.
4386
4387Additionally, this class of Configuration Constants are only applicable if
4388``CONFIGURE_MP_APPLICATION`` is defined.
4389
4390.. index:: CONFIGURE_MP_APPLICATION
4391
4392.. _CONFIGURE_MP_APPLICATION:
4393
4394CONFIGURE_MP_APPLICATION
4395------------------------
4396
4397CONSTANT:
4398    ``CONFIGURE_MP_APPLICATION``
4399
4400DATA TYPE:
4401    Boolean feature macro.
4402
4403RANGE:
4404    Defined or undefined.
4405
4406DEFAULT VALUE:
4407    This is not defined by default.
4408
4409DESCRIPTION:
4410    This configuration parameter must be defined to indicate that the
4411    application intends to be part of a multiprocessing
4412    configuration. Additional configuration parameters are assumed to be
4413    provided.
4414
4415NOTES:
4416    This has no impact unless RTEMS was configured and built using the
4417    ``--enable-multiprocessing`` option.
4418
4419.. index:: CONFIGURE_MP_NODE_NUMBER
4420
4421.. _CONFIGURE_MP_NODE_NUMBER:
4422
4423CONFIGURE_MP_NODE_NUMBER
4424------------------------
4425
4426CONSTANT:
4427    ``CONFIGURE_MP_NODE_NUMBER``
4428
4429DATA TYPE:
4430    Unsigned integer (``uint32_t``).
4431
4432RANGE:
4433    Positive.
4434
4435DEFAULT VALUE:
4436    The default value is ``NODE_NUMBER``, which is assumed to be set by the
4437    compilation environment.
4438
4439DESCRIPTION:
4440    ``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
4441    multiprocessor system.
4442
4443NOTES:
4444    In the RTEMS Multiprocessing Test Suite, the node number is derived from
4445    the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
4446    ``NODE_NUMBER`` set to different values. The test programs behave
4447    differently based upon their node number.
4448
4449.. index:: CONFIGURE_MP_MAXIMUM_NODES
4450
4451.. _CONFIGURE_MP_MAXIMUM_NODES:
4452
4453CONFIGURE_MP_MAXIMUM_NODES
4454--------------------------
4455
4456CONSTANT:
4457    ``CONFIGURE_MP_MAXIMUM_NODES``
4458
4459DATA TYPE:
4460    Unsigned integer (``uint32_t``).
4461
4462RANGE:
4463    Positive.
4464
4465DEFAULT VALUE:
4466    The default value is 2.
4467
4468DESCRIPTION:
4469    ``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
4470    multiprocessor system.
4471
4472NOTES:
4473    None.
4474
4475.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4476
4477.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
4478
4479CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4480-----------------------------------
4481
4482CONSTANT:
4483    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
4484
4485DATA TYPE:
4486    Unsigned integer (``uint32_t``).
4487
4488RANGE:
4489    Positive.
4490
4491DEFAULT VALUE:
4492    The default value is 32.
4493
4494DESCRIPTION:
4495    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
4496    concurrently active global objects in a multiprocessor system.
4497
4498NOTES:
4499    This value corresponds to the total number of objects which can be created
4500    with the ``RTEMS_GLOBAL`` attribute.
4501
4502.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
4503
4504.. _CONFIGURE_MP_MAXIMUM_PROXIES:
4505
4506CONFIGURE_MP_MAXIMUM_PROXIES
4507----------------------------
4508
4509CONSTANT:
4510    ``CONFIGURE_MP_MAXIMUM_PROXIES``
4511
4512DATA TYPE:
4513    Unsigned integer (``uint32_t``).
4514
4515RANGE:
4516    Undefined or positive.
4517
4518DEFAULT VALUE:
4519    The default value is 32.
4520
4521DESCRIPTION:
4522    ``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
4523    active thread/task proxies on this node in a multiprocessor system.
4524
4525NOTES:
4526    Since a proxy is used to represent a remote task/thread which is blocking
4527    on this node. This configuration parameter reflects the maximum number of
4528    remote tasks/threads which can be blocked on objects on this node.
4529
4530.. COMMENT: XXX - add xref to proxy discussion in MP chapter
4531
4532.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
4533
4534.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
4535
4536CONFIGURE_MP_MPCI_TABLE_POINTER
4537-------------------------------
4538
4539CONSTANT:
4540    ``CONFIGURE_MP_MPCI_TABLE_POINTER``
4541
4542DATA TYPE:
4543    pointer to ``rtems_mpci_table``
4544
4545RANGE:
4546    undefined or valid pointer
4547
4548DEFAULT VALUE:
4549    This is not defined by default.
4550
4551DESCRIPTION:
4552    ``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
4553    Configuration Table.  The default value of this field is``&MPCI_table``.
4554
4555NOTES:
4556    RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
4557    Multiprocessor System assuming the BSP provides the proper set of
4558    supporting methods.
4559
4560.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4561
4562.. _CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE:
4563
4564CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4565---------------------------------------
4566
4567CONSTANT:
4568    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE``
4569
4570DATA TYPE:
4571    Boolean feature macro.
4572
4573RANGE:
4574    Defined or undefined.
4575
4576DEFAULT VALUE:
4577    This is not defined by default.
4578
4579DESCRIPTION:
4580    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE`` is defined if the application
4581    wishes to provide their own Multiprocessing Configuration Table.  The
4582    generated table is named ``Multiprocessing_configuration``.
4583
4584NOTES:
4585    This is a configuration parameter which is very unlikely to be used by an
4586    application. If you find yourself wanting to use it in an application,
4587    please reconsider and discuss this on the RTEMS Users mailing list.
4588
4589Ada Tasks
4590=========
4591
4592This section defines the system configuration parameters supported by
4593``<rtems/confdefs.h>`` related to configuring RTEMS to support a task using Ada
4594tasking with GNAT/RTEMS.
4595
4596These configuration parameters are only available when RTEMS is built with the
4597``--enable-ada`` configure option and the application specifies
4598``CONFIGURE_GNAT_RTEMS``.
4599
4600Additionally RTEMS includes an Ada language binding to the Classic API which
4601has a test suite. This test suite is enabled only when``--enable-tests`` and
4602``--enable-expada`` are specified on the configure command.
4603
4604.. index:: CONFIGURE_GNAT_RTEMS
4605
4606.. _CONFIGURE_GNAT_RTEMS:
4607
4608CONFIGURE_GNAT_RTEMS
4609--------------------
4610
4611CONSTANT:
4612    ``CONFIGURE_GNAT_RTEMS``
4613
4614DATA TYPE:
4615    Boolean feature macro.
4616
4617RANGE:
4618    Defined or undefined.
4619
4620DEFAULT VALUE:
4621    This is not defined by default.
4622
4623DESCRIPTION:
4624    ``CONFIGURE_GNAT_RTEMS`` is defined to inform RTEMS that the GNAT Ada
4625    run-time is to be used by the application.
4626
4627NOTES:
4628    This configuration parameter is critical as it makes``<rtems/confdefs.h>``
4629    configure the resources (POSIX API Threads, Mutexes, Condition Variables,
4630    and Keys) used implicitly by the GNAT run-time.
4631
4632.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
4633
4634.. _CONFIGURE_MAXIMUM_ADA_TASKS:
4635
4636CONFIGURE_MAXIMUM_ADA_TASKS
4637---------------------------
4638
4639CONSTANT:
4640    ``CONFIGURE_MAXIMUM_ADA_TASKS``
4641
4642DATA TYPE:
4643    Unsigned integer (``uint32_t``).
4644
4645RANGE:
4646    Undefined or positive.
4647
4648DEFAULT VALUE:
4649    If ``CONFIGURE_GNAT_RTEMS`` is defined, then the default value is 20,
4650    otherwise the default value is 0.
4651
4652DESCRIPTION:
4653    ``CONFIGURE_MAXIMUM_ADA_TASKS`` is the number of Ada tasks that can be
4654    concurrently active in the system.
4655
4656NOTES:
4657    None.
4658
4659.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4660
4661.. _CONFIGURE_MAXIMUM_FAKE_ADA_TASKS:
4662
4663CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4664--------------------------------
4665
4666CONSTANT:
4667    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS``
4668
4669DATA TYPE:
4670    Unsigned integer (``uint32_t``).
4671
4672RANGE:
4673    Zero or positive.
4674
4675DEFAULT VALUE:
4676    The default value is 0.
4677
4678DESCRIPTION:
4679    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS`` is the number of *fake* Ada tasks that
4680    can be concurrently active in the system.  A *fake* Ada task is a non-Ada
4681    task that makes calls back into Ada code and thus implicitly uses the Ada
4682    run-time.
4683
4684NOTES:
4685    None.
4686
4687PCI Library
4688===========
4689
4690This section defines the system configuration parameters supported by
4691``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
4692
4693The PCI Library startup behaviour can be configured in four different ways
4694depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
4695
4696.. index:: PCI_LIB_AUTO
4697
4698``PCI_LIB_AUTO``
4699  Used to enable the PCI auto configuration software. PCI will be automatically
4700  probed, PCI buses enumerated, all devices and bridges will be initialized
4701  using Plug & Play software routines. The PCI device tree will be populated
4702  based on the PCI devices found in the system, PCI devices will be configured
4703  by allocating address region resources automatically in PCI space according
4704  to the BSP or host bridge driver set up.
4705
4706.. index:: PCI_LIB_READ
4707
4708``PCI_LIB_READ``
4709  Used to enable the PCI read configuration software. The current PCI
4710  configuration is read to create the RAM representation (the PCI device tree)
4711  of the PCI devices present. PCI devices are assumed to already have been
4712  initialized and PCI buses enumerated, it is therefore required that a BIOS or
4713  a boot loader has set up configuration space prior to booting into RTEMS.
4714
4715.. index:: PCI_LIB_STATIC
4716
4717``PCI_LIB_STATIC``
4718  Used to enable the PCI static configuration software. The user provides a PCI
4719  tree with information how all PCI devices are to be configured at compile
4720  time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
4721  library will not probe PCI for devices, instead it will assume that all
4722  devices defined by the user are present, it will enumerate the PCI buses and
4723  configure all PCI devices in static configuration accordingly. Since probe
4724  and allocation software is not needed the startup is faster, has smaller
4725  footprint and does not require dynamic memory allocation.
4726
4727.. index:: PCI_LIB_PERIPHERAL
4728
4729``PCI_LIB_PERIPHERAL``
4730  Used to enable the PCI peripheral configuration. It is similar to
4731  ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
4732  devices since PCI peripherals are not allowed to access PCI configuration
4733  space.
4734
4735Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
4736defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
4737Plug & Play is not performed.
4738
4739Go Tasks
4740========
4741
4742.. index:: CONFIGURE_ENABLE_GO
4743
4744.. _CONFIGURE_ENABLE_GO:
4745
4746CONFIGURE_ENABLE_GO
4747-------------------
4748
4749CONSTANT:
4750    ``CONFIGURE_ENABLE_GO``
4751
4752DATA TYPE:
4753    Boolean feature macro.
4754
4755RANGE:
4756    Defined or undefined.
4757
4758DEFAULT VALUE:
4759    This is not defined by default.
4760
4761DESCRIPTION:
4762    ``CONFIGURE_ENABLE_GO`` is defined to inform RTEMS that the Go run-time is
4763    to be used by the application.
4764
4765NOTES:
4766    The Go language support is experimental
4767
4768.. index:: CONFIGURE_MAXIMUM_GOROUTINES
4769
4770.. _CONFIGURE_MAXIMUM_GOROUTINES:
4771
4772CONFIGURE_MAXIMUM_GOROUTINES
4773----------------------------
4774
4775CONSTANT:
4776    ``CONFIGURE_MAXIMUM_GOROUTINES``
4777
4778DATA TYPE:
4779    Unsigned integer (``uint32_t``).
4780
4781RANGE:
4782    Zero or positive.
4783
4784DEFAULT VALUE:
4785    The default value is 400
4786
4787DESCRIPTION:
4788    ``CONFIGURE_MAXIMUM_GOROUTINES`` is defined to specify the maximum number
4789    of Go routines.
4790
4791NOTES:
4792    The Go language support is experimental
4793
4794.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
4795
4796.. _CONFIGURE_MAXIMUM_GO_CHANNELS:
4797
4798CONFIGURE_MAXIMUM_GO_CHANNELS
4799-----------------------------
4800
4801CONSTANT:
4802    ``CONFIGURE_MAXIMUM_GO_CHANNELS``
4803
4804DATA TYPE:
4805    Unsigned integer (``uint32_t``).
4806
4807RANGE:
4808    Zero or positive.
4809
4810DEFAULT VALUE:
4811    The default value is 500
4812
4813DESCRIPTION:
4814    ``CONFIGURE_MAXIMUM_GO_CHANNELS`` is defined to specify the maximum number
4815    of Go channels.
4816
4817NOTES:
4818    The Go language support is experimental
4819
4820Obsolete Configuration Options
4821==============================
4822
4823.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
4824
4825CONFIGURE_BDBUF_BUFFER_COUNT
4826----------------------------
4827
4828This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4829RTEMS 4.10.0.
4830
4831.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
4832
4833CONFIGURE_BDBUF_BUFFER_SIZE
4834---------------------------
4835
4836This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4837RTEMS 4.10.0.
4838
4839.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
4840
4841CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
4842--------------------------------------
4843
4844This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
4845RTEMS 5.1.
4846
4847.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
4848
4849CONFIGURE_HAS_OWN_BDBUF_TABLE
4850-----------------------------
4851
4852This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4853RTEMS 4.10.0.
4854
4855.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4856
4857CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4858---------------------------------
4859
4860This configuration option is obsolete since RTEMS 5.1.
4861
4862.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
4863
4864CONFIGURE_MAXIMUM_POSIX_BARRIERS
4865--------------------------------
4866
4867This configuration option is obsolete since RTEMS 5.1.
4868
4869.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
4870
4871CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
4872-------------------------------------------
4873
4874This configuration option is obsolete since RTEMS 5.1.
4875
4876.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
4877
4878CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
4879-------------------------------
4880
4881This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
4882RTEMS 5.1.
4883
4884.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
4885
4886CONFIGURE_MAXIMUM_POSIX_MUTEXES
4887-------------------------------
4888
4889This configuration option is obsolete since RTEMS 5.1.
4890
4891.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
4892
4893CONFIGURE_MAXIMUM_POSIX_RWLOCKS
4894-------------------------------
4895
4896This configuration option is obsolete since RTEMS 5.1.
4897
4898.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
4899
4900CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
4901---------------------------------
4902
4903This configuration option is obsolete since RTEMS 5.1.
4904
4905.. index:: CONFIGURE_TERMIOS_DISABLED
4906
4907CONFIGURE_TERMIOS_DISABLED
4908--------------------------
4909
4910This configuration option is obsolete since RTEMS 5.1.
4911
4912.. index:: CONFIGURE_SMP_APPLICATION
4913
4914CONFIGURE_SMP_APPLICATION
4915-------------------------
4916
4917This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4918RTEMS 5.1.
4919
4920.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
4921
4922CONFIGURE_SMP_MAXIMUM_PROCESSORS
4923--------------------------------
4924
4925This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4926RTEMS 5.1.  See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
Note: See TracBrowser for help on using the repository browser.