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

5
Last change on this file since 05a5366 was 05a5366, checked in by Sebastian Huber <sebastian.huber@…>, on 10/22/18 at 12:22:45

c-user: Modify CONFIGURE_INTERRUPT_STACK_SIZE

Use CPU_STACK_MINIMUM_SIZE instead of CONFIGURE_MINIMUM_TASK_STACK_SIZE
to set the default value.

Clarify documentation.

Update #3480.

  • Property mode set to 100644
File size: 131.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 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_KEYS
1059
1060.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
1061
1062CONFIGURE_MAXIMUM_POSIX_KEYS
1063----------------------------
1064
1065CONSTANT:
1066    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
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_KEYS`` is the maximum number of POSIX API Keys
1079    that can be concurrently active.
1080
1081NOTES:
1082    This object class can be configured in unlimited allocation mode.
1083
1084.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1085
1086.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
1087
1088CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1089--------------------------------------
1090
1091CONSTANT:
1092    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
1093
1094DATA TYPE:
1095    Unsigned integer (``uint32_t``).
1096
1097RANGE:
1098    Zero or positive.
1099
1100DEFAULT VALUE:
1101    The default value is 0.
1102
1103DESCRIPTION:
1104    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
1105    API Message Queues that can be concurrently active.
1106
1107NOTES:
1108    This object class can be configured in unlimited allocation mode.
1109
1110.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1111
1112.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
1113
1114CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1115--------------------------------------
1116
1117CONSTANT:
1118    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
1119
1120DATA TYPE:
1121    Unsigned integer (``uint32_t``).
1122
1123RANGE:
1124    Zero or positive.
1125
1126DEFAULT VALUE:
1127    The default value is 0.
1128
1129DESCRIPTION:
1130    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
1131    API Queued Signals that can be concurrently active.
1132
1133NOTES:
1134    None.
1135
1136.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1137
1138.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
1139
1140CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1141----------------------------------
1142
1143CONSTANT:
1144    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
1145
1146DATA TYPE:
1147    Unsigned integer (``uint32_t``).
1148
1149RANGE:
1150    Zero or positive.
1151
1152DEFAULT VALUE:
1153    The default value is 0.
1154
1155DESCRIPTION:
1156    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
1157    Named Semaphores that can be concurrently active.  Named semaphores are
1158    created with ``sem_open()``.  Semaphores initialized with ``sem_init()``
1159    are not affected by this configuration option since the storage space for
1160    these semaphores is user-provided.
1161
1162NOTES:
1163    None.
1164
1165.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
1166
1167.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
1168
1169CONFIGURE_MAXIMUM_POSIX_TIMERS
1170------------------------------
1171
1172CONSTANT:
1173    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
1174
1175DATA TYPE:
1176    Unsigned integer (``uint32_t``).
1177
1178RANGE:
1179    Zero or positive.
1180
1181DEFAULT VALUE:
1182    The default value is 0.
1183
1184DESCRIPTION:
1185    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
1186    Timers that can be concurrently active.
1187
1188NOTES:
1189    This object class can be configured in unlimited allocation mode.
1190
1191.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
1192
1193.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
1194
1195CONFIGURE_MAXIMUM_POSIX_THREADS
1196-------------------------------
1197
1198CONSTANT:
1199    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
1200
1201DATA TYPE:
1202    Unsigned integer (``uint32_t``).
1203
1204RANGE:
1205    Zero or positive.
1206
1207DEFAULT VALUE:
1208    The default value is 0.
1209
1210DESCRIPTION:
1211    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
1212    Threads that can be concurrently active.
1213
1214NOTES:
1215    This object class can be configured in unlimited allocation mode.
1216
1217    This calculations for the required memory in the RTEMS Workspace for
1218    threads assume that each thread has a minimum stack size and has floating
1219    point support enabled.  The configuration parameter
1220    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
1221    requirements *ABOVE* the minimum size required.  See :ref:`Reserve
1222    Task/Thread Stack Memory Above Minimum` for more information about
1223    ``CONFIGURE_EXTRA_TASK_STACKS``.
1224
1225    The maximum number of Classic API Tasks is specified by
1226    ``CONFIGURE_MAXIMUM_TASKS``.
1227
1228    All POSIX threads have floating point enabled.
1229
1230.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
1231.. index:: minimum POSIX thread stack size
1232
1233.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
1234
1235CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
1236-----------------------------------------
1237
1238CONSTANT:
1239    ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
1240
1241DATA TYPE:
1242    Unsigned integer (``size_t``).
1243
1244RANGE:
1245    Positive.
1246
1247DEFAULT VALUE:
1248    The default value is two times the value of
1249    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE <CONFIGURE_MINIMUM_TASK_STACK_SIZE>`.
1250
1251DESCRIPTION:
1252    This configuration parameter defines the minimum stack size in bytes for
1253    every POSIX thread in the system.
1254
1255POSIX Initialization Threads Table Configuration
1256================================================
1257
1258The ``<rtems/confdefs.h>`` configuration system can automatically generate a
1259POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
1260a single entry.  The following parameters control the generation of that table.
1261
1262.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
1263
1264.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
1265
1266CONFIGURE_POSIX_INIT_THREAD_TABLE
1267---------------------------------
1268
1269CONSTANT:
1270
1271    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
1272
1273DATA TYPE:
1274    Boolean feature macro.
1275
1276RANGE:
1277    Defined or undefined.
1278
1279DEFAULT VALUE:
1280    This field is not defined by default, as the user MUST select their own API
1281    for initialization tasks.
1282
1283DESCRIPTION:
1284    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
1285    a POSIX API Initialization Threads Table.  The table built by
1286    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
1287    is sufficient for applications which initialization the system from a
1288    single task.
1289
1290    By default, this field is not defined as the user MUST select their own API
1291    for initialization tasks.
1292
1293NOTES:
1294    The application may choose to use the initialization tasks or threads table
1295    from another API.
1296
1297    A compile time error will be generated if the user does not configure any
1298    initialization tasks or threads.
1299
1300.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1301
1302.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
1303
1304CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1305---------------------------------------
1306
1307CONSTANT:
1308    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
1309
1310DATA TYPE:
1311    POSIX thread function pointer (``void *(*entry_point)(void *)``).
1312
1313RANGE:
1314    Undefined or a valid POSIX thread function pointer.
1315
1316DEFAULT VALUE:
1317    The default value is ``POSIX_Init``.
1318
1319DESCRIPTION:
1320    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
1321    (a.k.a. function name) of the single initialization thread defined by the
1322    POSIX API Initialization Threads Table.
1323
1324NOTES:
1325    The user must implement the function ``POSIX_Init`` or the function name
1326    provided in this configuration parameter.
1327
1328.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1329
1330.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
1331
1332CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1333--------------------------------------
1334
1335CONSTANT:
1336    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
1337
1338DATA TYPE:
1339    Unsigned integer (``size_t``).
1340
1341RANGE:
1342    Zero or positive.
1343
1344DEFAULT VALUE:
1345    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
1346
1347DESCRIPTION:
1348    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
1349    initialization thread defined by the POSIX API Initialization Threads
1350    Table.
1351
1352NOTES:
1353    If the stack size specified is greater than the configured minimum, it must
1354    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
1355    Task/Thread Stack Memory Above Minimum` for more information about
1356    ``CONFIGURE_EXTRA_TASK_STACKS``.
1357
1358.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1359
1360.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
1361
1362CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1363-----------------------------------------
1364
1365CONSTANT:
1366    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
1367
1368DATA TYPE:
1369    Boolean feature macro.
1370
1371RANGE:
1372    Defined or undefined.
1373
1374DEFAULT VALUE:
1375    This is not defined by default.
1376
1377DESCRIPTION:
1378    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
1379    to define their own POSIX API Initialization Threads Table.  This table
1380    should be named ``POSIX_Initialization_threads``.
1381
1382NOTES:
1383    This is a seldom used configuration parameter. The most likely use case is
1384    when an application desires to have more than one initialization task.
1385
1386Basic System Information
1387========================
1388
1389This section defines the general system configuration parameters supported by
1390``<rtems/confdefs.h>``.
1391
1392.. index:: CONFIGURE_UNIFIED_WORK_AREAS
1393.. index:: unified work areas
1394.. index:: separate work areas
1395.. index:: RTEMS Workspace
1396.. index:: C Program Heap
1397
1398.. _CONFIGURE_UNIFIED_WORK_AREAS:
1399
1400CONFIGURE_UNIFIED_WORK_AREAS
1401----------------------------
1402
1403CONSTANT:
1404    ``CONFIGURE_UNIFIED_WORK_AREAS``
1405
1406DATA TYPE:
1407    Boolean feature macro.
1408
1409RANGE:
1410    Defined or undefined.
1411
1412DEFAULT VALUE:
1413    This is not defined by default, which specifies that the C Program Heap and
1414    the RTEMS Workspace will be separate.
1415
1416DESCRIPTION:
1417    When defined, the C Program Heap and the RTEMS Workspace will be one pool
1418    of memory.
1419
1420    When not defined, there will be separate memory pools for the RTEMS
1421    Workspace and C Program Heap.
1422
1423NOTES:
1424    Having separate pools does have some advantages in the event a task blows a
1425    stack or writes outside its memory area. However, in low memory systems the
1426    overhead of the two pools plus the potential for unused memory in either
1427    pool is very undesirable.
1428
1429    In high memory environments, this is desirable when you want to use the
1430    RTEMS "unlimited" objects option.  You will be able to create objects until
1431    you run out of all available memory rather then just until you run out of
1432    RTEMS Workspace.
1433
1434.. index:: CONFIGURE_MAXIMUM_PROCESSORS
1435
1436.. _CONFIGURE_MAXIMUM_PROCESSORS:
1437
1438CONFIGURE_MAXIMUM_PROCESSORS
1439----------------------------
1440
1441CONSTANT:
1442    ``CONFIGURE_MAXIMUM_PROCESSORS``
1443
1444DATA TYPE:
1445    Unsigned integer (``uint32_t``).
1446
1447RANGE:
1448    Positive.
1449
1450DEFAULT VALUE:
1451    The default value is 1.
1452
1453DESCRIPTION:
1454    ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to the maximum number of
1455    processors an applicaiton intends to use.  The number of acually available
1456    processors depends on the hardware and may be less.  It is recommended to
1457    use the smallest value suitable for the application in order to save
1458    memory.  Each processor needs an idle thread and interrupt stack for
1459    example.
1460
1461NOTES:
1462    If there are more processors available than configured, the rest will be
1463    ignored.  This configuration define is ignored in uniprocessor
1464    configurations.
1465
1466.. index:: CONFIGURE_MICROSECONDS_PER_TICK
1467.. index:: tick quantum
1468
1469.. _CONFIGURE_MICROSECONDS_PER_TICK:
1470
1471CONFIGURE_MICROSECONDS_PER_TICK
1472-------------------------------
1473
1474CONSTANT:
1475    ``CONFIGURE_MICROSECONDS_PER_TICK``
1476
1477DATA TYPE:
1478    Unsigned integer (``uint32_t``).
1479
1480RANGE:
1481    Positive.
1482
1483DEFAULT VALUE:
1484    This is not defined by default. When not defined, the clock tick quantum is
1485    configured to be 10,000 microseconds which is ten (10) milliseconds.
1486
1487DESCRIPTION:
1488    This constant is  used to specify the length of time between clock ticks.
1489
1490    When the clock tick quantum value is too low, the system will spend so much
1491    time processing clock ticks that it does not have processing time available
1492    to perform application work. In this case, the system will become
1493    unresponsive.
1494
1495    The lowest practical time quantum varies widely based upon the speed of the
1496    target hardware and the architectural overhead associated with
1497    interrupts. In general terms, you do not want to configure it lower than is
1498    needed for the application.
1499
1500    The clock tick quantum should be selected such that it all blocking and
1501    delay times in the application are evenly divisible by it. Otherwise,
1502    rounding errors will be introduced which may negatively impact the
1503    application.
1504
1505NOTES:
1506    This configuration parameter has no impact if the Clock Tick Device driver
1507    is not configured.
1508
1509    There may be BSP specific limits on the resolution or maximum value of a
1510    clock tick quantum.
1511
1512.. index:: CONFIGURE_TICKS_PER_TIMESLICE
1513.. index:: ticks per timeslice
1514
1515.. _CONFIGURE_TICKS_PER_TIMESLICE:
1516
1517CONFIGURE_TICKS_PER_TIMESLICE
1518-----------------------------
1519
1520CONSTANT:
1521    ``CONFIGURE_TICKS_PER_TIMESLICE``
1522
1523DATA TYPE:
1524    Unsigned integer (``uint32_t``).
1525
1526RANGE:
1527    Positive.
1528
1529DEFAULT VALUE:
1530    The default value is 50.
1531
1532DESCRIPTION:
1533    This configuration parameter specifies the length of the timeslice quantum
1534    in ticks for each task.
1535
1536NOTES:
1537    This configuration parameter has no impact if the Clock Tick Device driver
1538    is not configured.
1539
1540.. index:: CONFIGURE_MAXIMUM_PRIORITY
1541.. index:: maximum priority
1542.. index:: number of priority levels
1543
1544.. _CONFIGURE_MAXIMUM_PRIORITY:
1545
1546CONFIGURE_MAXIMUM_PRIORITY
1547--------------------------
1548
1549CONSTANT:
1550    ``CONFIGURE_MAXIMUM_PRIORITY``
1551
1552DATA TYPE:
1553    Unsigned integer (``uint8_t``).
1554
1555RANGE:
1556    Valid values for this configuration parameter must be one (1) less than
1557    than a power of two (2) between 4 and 256 inclusively.  In other words,
1558    valid values are 3, 7, 31, 63, 127, and 255.
1559
1560DEFAULT VALUE:
1561    The default value is 255, because RTEMS must support 256 priority levels to
1562    be compliant with various standards. These priorities range from zero (0)
1563    to 255.
1564
1565DESCRIPTION:
1566   This configuration parameter specified the maximum numeric priority of any
1567   task in the system and one less that the number of priority levels in the
1568   system.
1569
1570   Reducing the number of priorities in the system reduces the amount of memory
1571   allocated from the RTEMS Workspace.
1572
1573NOTES:
1574   The numerically greatest priority is the logically lowest priority in the
1575   system and will thus be used by the IDLE task.
1576
1577   Priority zero (0) is reserved for internal use by RTEMS and is not available
1578   to applications.
1579
1580   With some schedulers, reducing the number of priorities can reduce the
1581   amount of memory used by the scheduler. For example, the Deterministic
1582   Priority Scheduler (DPS) used by default uses three pointers of storage per
1583   priority level. Reducing the number of priorities from 256 levels to
1584   sixteen (16) can reduce memory usage by about three (3) kilobytes.
1585
1586.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1587.. index:: maximum thread name size
1588
1589.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
1590
1591CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1592----------------------------------
1593
1594CONSTANT:
1595    ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
1596
1597DATA TYPE:
1598    Unsigned integer (``size_t``).
1599
1600RANGE:
1601    No restrictions.
1602
1603DEFAULT VALUE:
1604    The default value is 16.  This value was chosen for Linux compatibility,
1605    see
1606    `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
1607
1608DESCRIPTION:
1609   This configuration parameter specifies the maximum thread name size
1610   including the terminating `NUL` character.
1611
1612NOTE:
1613   The size of the thread control block is increased by the maximum thread name
1614   size.  This configuration option is available since RTEMS 5.1.
1615
1616.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
1617.. index:: minimum task stack size
1618
1619.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
1620
1621CONFIGURE_MINIMUM_TASK_STACK_SIZE
1622---------------------------------
1623
1624CONSTANT:
1625    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
1626
1627DATA TYPE:
1628    Unsigned integer (``uint32_t``).
1629
1630RANGE:
1631    Positive.
1632
1633DEFAULT VALUE:
1634    The default value is architecture-specific.
1635
1636DESCRIPTION:
1637    This configuration parameter defines the minimum stack size in bytes for
1638    every user task or thread in the system.
1639
1640NOTES:
1641    Adjusting this parameter should be done with caution.  Examining the actual
1642    stack usage using the stack checker usage reporting facility is recommended
1643    (see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED <CONFIGURE_STACK_CHECKER_ENABLED>`).
1644
1645    This parameter can be used to lower the minimum from that recommended. This
1646    can be used in low memory systems to reduce memory consumption for
1647    stacks. However, this must be done with caution as it could increase the
1648    possibility of a blown task stack.
1649
1650    This parameter can be used to increase the minimum from that
1651    recommended. This can be used in higher memory systems to reduce the risk
1652    of stack overflow without performing analysis on actual consumption.
1653
1654    By default, this configuration parameter defines also the minimum stack
1655    size of POSIX threads.  This can be changed with the
1656    :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE <CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE>`
1657    configuration option.
1658
1659    In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
1660    used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE
1661    <CONFIGURE_INTERRUPT_STACK_SIZE>`.
1662
1663.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
1664.. index:: interrupt stack size
1665
1666.. _CONFIGURE_INTERRUPT_STACK_SIZE:
1667
1668CONFIGURE_INTERRUPT_STACK_SIZE
1669------------------------------
1670
1671CONSTANT:
1672    ``CONFIGURE_INTERRUPT_STACK_SIZE``
1673
1674DATA TYPE:
1675    Unsigned integer.
1676
1677RANGE:
1678    Positive.
1679
1680DEFAULT VALUE:
1681    The default value is ``BSP_INTERRUPT_STACK_SIZE`` in case it is defined,
1682    otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``.
1683
1684DESCRIPTION:
1685    The ``CONFIGURE_INTERRUPT_STACK_SIZE`` configuration option defines the
1686    size of an interrupt stack in bytes.
1687
1688NOTES:
1689    The interrupt stack size must be aligned according to
1690    ``CPU_INTERRUPT_STACK_ALIGNMENT``.
1691
1692    There is one interrupt stack available for each configured processor
1693    (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).  The
1694    interrupt stack areas are statically allocated in a special linker section
1695    (``.rtemsstack.interrupt``).  The placement of this linker section is
1696    BSP-specific.
1697
1698    Some BSPs use the interrupt stack as the initialization stack which is used
1699    to perform the sequential system initialization before the multithreading
1700    is started.
1701
1702    The interrupt stacks are covered by the :ref:`stack checker
1703    <CONFIGURE_STACK_CHECKER_ENABLED>`.  However, using a too small interrupt
1704    stack size may still result in undefined behaviour.
1705
1706    In releases before RTEMS 5.1 the default value was
1707    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE
1708    <CONFIGURE_MINIMUM_TASK_STACK_SIZE>` instead of ``CPU_STACK_MINIMUM_SIZE``.
1709
1710.. index:: CONFIGURE_EXTRA_TASK_STACKS
1711.. index:: memory for task tasks
1712
1713.. _CONFIGURE_EXTRA_TASK_STACKS:
1714
1715CONFIGURE_EXTRA_TASK_STACKS
1716---------------------------
1717
1718CONSTANT:
1719    ``CONFIGURE_EXTRA_TASK_STACKS``
1720
1721DATA TYPE:
1722    Unsigned integer (``size_t``).
1723
1724RANGE:
1725    Undefined or positive.
1726
1727DEFAULT VALUE:
1728    The default value is 0.
1729
1730DESCRIPTION:
1731    This configuration parameter is set to the number of bytes the applications
1732    wishes to add to the task stack requirements calculated by
1733    ``<rtems/confdefs.h>``.
1734
1735NOTES:
1736    This parameter is very important.  If the application creates tasks with
1737    stacks larger then the minimum, then that memory is NOT accounted for by
1738    ``<rtems/confdefs.h>``.
1739
1740.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1741.. index:: clear C Program Heap
1742.. index:: clear RTEMS Workspace
1743.. index:: zero C Program Heap
1744.. index:: zero RTEMS Workspace
1745
1746.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
1747
1748CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1749--------------------------------------
1750
1751CONSTANT:
1752    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
1753
1754DATA TYPE:
1755    Boolean feature macro.
1756
1757RANGE:
1758    Defined or undefined.
1759
1760DEFAULT VALUE:
1761    This is not defined by default, unless overridden by the BSP.  The default
1762    is *NOT* to zero out the RTEMS Workspace or C Program Heap.
1763
1764DESCRIPTION:
1765    This macro indicates whether RTEMS should zero the RTEMS Workspace and C
1766    Program Heap as part of its initialization.  If defined, the memory regions
1767    are zeroed.  Otherwise, they are not.
1768
1769NOTES:
1770    Zeroing memory can add significantly to system boot time. It is not
1771    necessary for RTEMS but is often assumed by support libraries.
1772
1773.. index:: CONFIGURE_STACK_CHECKER_ENABLED
1774
1775.. _CONFIGURE_STACK_CHECKER_ENABLED:
1776
1777CONFIGURE_STACK_CHECKER_ENABLED
1778-------------------------------
1779
1780CONSTANT:
1781    ``CONFIGURE_STACK_CHECKER_ENABLED``
1782
1783DATA TYPE:
1784    Boolean feature macro.
1785
1786RANGE:
1787    Defined or undefined.
1788
1789DEFAULT VALUE:
1790    This is not defined by default, and thus stack checking is disabled.
1791
1792DESCRIPTION:
1793    This configuration parameter is defined when the application wishes to
1794    enable run-time stack bounds checking.
1795
1796NOTES:
1797    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
1798
1799    This increases the time required to create tasks as well as adding overhead
1800    to each context switch.
1801
1802.. index:: CONFIGURE_INITIAL_EXTENSIONS
1803
1804.. _CONFIGURE_INITIAL_EXTENSIONS:
1805
1806CONFIGURE_INITIAL_EXTENSIONS
1807----------------------------
1808
1809CONSTANT:
1810    ``CONFIGURE_INITIAL_EXTENSIONS``
1811
1812DATA TYPE:
1813    List of user extension initializers (``rtems_extensions_table``).
1814
1815RANGE:
1816    Undefined or a list of one or more user extensions.
1817
1818DEFAULT VALUE:
1819    This is not defined by default.
1820
1821DESCRIPTION:
1822    If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
1823    this application specific set of initial extensions will be placed in the
1824    initial extension table.
1825
1826NOTES:
1827    None.
1828
1829Configuring Custom Task Stack Allocation
1830========================================
1831
1832RTEMS allows the application or BSP to define its own allocation and
1833deallocation methods for task stacks. This can be used to place task stacks in
1834special areas of memory or to utilize a Memory Management Unit so that stack
1835overflows are detected in hardware.
1836
1837.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1838
1839.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
1840
1841CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1842-----------------------------------
1843
1844CONSTANT:
1845    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1846
1847DATA TYPE:
1848    Function pointer.
1849
1850RANGE:
1851    Undefined, NULL or valid function pointer.
1852
1853DEFAULT VALUE:
1854    The default value is NULL, which indicates that task stacks will be
1855    allocated from the RTEMS Workspace.
1856
1857DESCRIPTION:
1858    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
1859    method for an application or BSP specific task stack allocation
1860    implementation.
1861
1862NOTES:
1863    A correctly configured system must configure the following to be consistent:
1864
1865- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1866
1867- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1868
1869- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1870
1871.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
1872.. index:: task stack allocator
1873
1874.. _CONFIGURE_TASK_STACK_ALLOCATOR:
1875
1876CONFIGURE_TASK_STACK_ALLOCATOR
1877------------------------------
1878
1879CONSTANT:
1880    ``CONFIGURE_TASK_STACK_ALLOCATOR``
1881
1882DATA TYPE:
1883    Function pointer.
1884
1885RANGE:
1886    Undefined or valid function pointer.
1887
1888DEFAULT VALUE:
1889    The default value is ``_Workspace_Allocate``, which indicates that task
1890    stacks will be allocated from the RTEMS Workspace.
1891
1892DESCRIPTION:
1893    ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
1894    allocate task stacks.
1895
1896NOTES:
1897    A correctly configured system must configure the following to be consistent:
1898
1899- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1900
1901- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1902
1903- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1904
1905.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
1906.. index:: task stack deallocator
1907
1908.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
1909
1910CONFIGURE_TASK_STACK_DEALLOCATOR
1911--------------------------------
1912
1913CONSTANT:
1914    ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1915
1916DATA TYPE:
1917    Function pointer.
1918
1919RANGE:
1920    Undefined or valid function pointer.
1921
1922DEFAULT VALUE:
1923    The default value is ``_Workspace_Free``, which indicates that task stacks
1924    will be allocated from the RTEMS Workspace.
1925
1926DESCRIPTION:
1927    ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
1928    to free task stacks.
1929
1930NOTES:
1931    A correctly configured system must configure the following to be consistent:
1932
1933- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1934
1935- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1936
1937- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1938
1939Configuring Memory for Classic API Message Buffers
1940==================================================
1941
1942This section describes the configuration parameters related to specifying the
1943amount of memory reserved for Classic API Message Buffers.
1944
1945.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1946.. index:: memory for a single message queue's buffers
1947
1948.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
1949
1950CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1951-----------------------------------
1952
1953CONSTANT:
1954    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
1955
1956DATA TYPE:
1957    Unsigned integer (``size_t``).
1958
1959RANGE:
1960    Positive.
1961
1962DEFAULT VALUE:
1963    The default value is None.
1964
1965DESCRIPTION:
1966    This is a helper macro which is used to assist in computing the total
1967    amount of memory required for message buffers.  Each message queue will
1968    have its own configuration with maximum message size and maximum number of
1969    pending messages.
1970
1971    The interface for this macro is as follows:
1972
1973    .. code-block:: c
1974
1975        CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
1976
1977    Where ``max_messages`` is the maximum number of pending messages and
1978    ``size_per`` is the size in bytes of the user message.
1979
1980NOTES:
1981
1982    This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
1983
1984.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
1985.. index:: configure message queue buffer memory
1986
1987.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
1988
1989CONFIGURE_MESSAGE_BUFFER_MEMORY
1990-------------------------------
1991
1992CONSTANT:
1993    ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
1994
1995DATA TYPE:
1996    integer summation macro
1997
1998RANGE:
1999    undefined (zero) or calculation resulting in a positive integer
2000
2001DEFAULT VALUE:
2002    This is not defined by default, and zero (0) memory is reserved.
2003
2004DESCRIPTION:
2005    This macro is set to the number of bytes the application requires to be
2006    reserved for pending Classic API Message Queue buffers.
2007
2008NOTES:
2009    The following illustrates how the help macro
2010    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE`` can be used to assist in
2011    calculating the message buffer memory required.  In this example, there are
2012    two message queues used in this application.  The first message queue has
2013    maximum of 24 pending messages with the message structure defined by the
2014    type ``one_message_type``.  The other message queue has maximum of 500
2015    pending messages with the message structure defined by the type
2016    ``other_message_type``.
2017
2018    .. code-block:: c
2019
2020        #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
2021                    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2022                         24, sizeof(one_message_type) \
2023                     ) + \
2024                     CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2025                         500, sizeof(other_message_type) \
2026                     )
2027
2028Seldom Used Configuration Parameters
2029====================================
2030
2031This section describes configuration parameters supported by
2032``<rtems/confdefs.h>`` which are seldom used by applications. These parameters
2033tend to be oriented to debugging system configurations and providing
2034work-arounds when the memory estimated by ``<rtems/confdefs.h>`` is incorrect.
2035
2036.. index:: CONFIGURE_MEMORY_OVERHEAD
2037
2038.. _CONFIGURE_MEMORY_OVERHEAD:
2039
2040CONFIGURE_MEMORY_OVERHEAD
2041-------------------------
2042
2043CONSTANT:
2044    ``CONFIGURE_MEMORY_OVERHEAD``
2045
2046DATA TYPE:
2047    Unsigned integer (``size_t``).
2048
2049RANGE:
2050    Zero or positive.
2051
2052DEFAULT VALUE:
2053    The default value is 0.
2054
2055DESCRIPTION:
2056    This parameter is set to the number of kilobytes the application wishes to
2057    add to the requirements calculated by ``<rtems/confdefs.h>``.
2058
2059NOTES:
2060    This configuration parameter should only be used when it is suspected that
2061    a bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.
2062    Typically the memory allocation will be too low when an application does
2063    not account for all message queue buffers or task stacks.
2064
2065C Library Support Configuration
2066===============================
2067
2068This section defines the file system and IO library related configuration
2069parameters supported by ``<rtems/confdefs.h>``.
2070
2071.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2072.. index:: maximum file descriptors
2073
2074.. _CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS:
2075
2076CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2077----------------------------------------
2078
2079CONSTANT:
2080    ``CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS``
2081
2082DATA TYPE:
2083    Unsigned integer (``uint32_t``).
2084
2085RANGE:
2086    Zero or positive.
2087
2088DEFAULT VALUE:
2089    If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
2090    default value is 3, otherwise the default value is 0.  Three file
2091    descriptors allows RTEMS to support standard input, output, and error I/O
2092    streams on ``/dev/console``.
2093
2094DESCRIPTION:
2095    This configuration parameter is set to the maximum number of file like
2096    objects that can be concurrently open.
2097
2098NOTES:
2099    None.
2100
2101File System Configuration Parameters
2102====================================
2103
2104This section defines File System related configuration parameters.
2105
2106.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2107
2108.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
2109
2110CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2111--------------------------------------
2112
2113CONSTANT:
2114    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
2115
2116DATA TYPE:
2117    Boolean feature macro.
2118
2119RANGE:
2120    Defined or undefined.
2121
2122DEFAULT VALUE:
2123    This is not defined by default. If no other root file system configuration
2124    parameters are specified, the IMFS will be used as the root file system.
2125
2126DESCRIPTION:
2127    This configuration parameter is defined if the application wishes to use
2128    the device-only filesytem as the root file system.
2129
2130NOTES:
2131    The device-only filesystem supports only device nodes and is smaller in
2132    executable code size than the full IMFS and miniIMFS.
2133
2134    The devFS is comparable in functionality to the pseudo-filesystem name
2135    space provided before RTEMS release 4.5.0.
2136
2137.. index:: CONFIGURE_MAXIMUM_DEVICES
2138
2139.. _CONFIGURE_MAXIMUM_DEVICES:
2140
2141CONFIGURE_MAXIMUM_DEVICES
2142-------------------------
2143
2144CONSTANT:
2145    ``CONFIGURE_MAXIMUM_DEVICES``
2146
2147DATA TYPE:
2148    Unsigned integer (``uint32_t``).
2149
2150RANGE:
2151    Positive.
2152
2153DEFAULT VALUE:
2154    If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
2155    ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
2156
2157DESCRIPTION:
2158    ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
2159    devices that may be registered in the device file system (devFS).
2160
2161NOTES:
2162    This option is specific to the device file system (devFS) and should not be
2163    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
2164    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
2165    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
2166
2167.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2168
2169.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
2170
2171CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2172----------------------------------------
2173
2174CONSTANT:
2175    ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
2176
2177DATA TYPE:
2178    Boolean feature macro.
2179
2180RANGE:
2181    Defined or undefined.
2182
2183DEFAULT VALUE:
2184    This is not defined by default. If no other root file system configuration
2185    parameters are specified, the IMFS will be used as the root file system.
2186
2187DESCRIPTION:
2188    This configuration parameter is defined if the application dose not intend
2189    to use any kind of filesystem support. This include the device
2190    infrastructure necessary to support ``printf()``.
2191
2192NOTES:
2193    None.
2194
2195.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2196
2197.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
2198
2199CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2200-----------------------------------------
2201
2202CONSTANT:
2203    ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
2204
2205DATA TYPE:
2206    Boolean feature macro.
2207
2208RANGE:
2209    Defined or undefined.
2210
2211DEFAULT VALUE:
2212    This is not defined by default.
2213
2214DESCRIPTION:
2215    In case this configuration option is defined, then the following
2216    configuration options will be defined as well
2217
2218    - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
2219
2220    - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
2221
2222    - ``CONFIGURE_IMFS_DISABLE_UTIME``,
2223
2224    - ``CONFIGURE_IMFS_DISABLE_LINK``,
2225
2226    - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
2227
2228    - ``CONFIGURE_IMFS_DISABLE_READLINK``,
2229
2230    - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
2231
2232    - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
2233
2234.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2235
2236.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
2237
2238CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2239--------------------------------------
2240
2241CONSTANT:
2242    ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
2243
2244DATA TYPE:
2245    Boolean feature macro.
2246
2247RANGE:
2248    Valid values for this configuration parameter are a power of two (2)
2249    between 16 and 512 inclusive.  In other words, valid values are 16, 32, 64,
2250    128, 256,and 512.
2251
2252DEFAULT VALUE:
2253    The default IMFS block size is 128 bytes.
2254
2255DESCRIPTION:
2256    This configuration parameter specifies the block size for in-memory files
2257    managed by the IMFS. The configured block size has two impacts. The first
2258    is the average amount of unused memory in the last block of each file. For
2259    example, when the block size is 512, on average one-half of the last block
2260    of each file will remain unused and the memory is wasted. In contrast, when
2261    the block size is 16, the average unused memory per file is only 8
2262    bytes. However, it requires more allocations for the same size file and
2263    thus more overhead per block for the dynamic memory management.
2264
2265    Second, the block size has an impact on the maximum size file that can be
2266    stored in the IMFS. With smaller block size, the maximum file size is
2267    correspondingly smaller. The following shows the maximum file size possible
2268    based on the configured block size:
2269
2270    - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
2271
2272    - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
2273
2274    - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
2275
2276    - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
2277
2278    - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
2279
2280    - when the block size is 512 bytes, the maximum file size is 1,082,195,456
2281      bytes.
2282
2283.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
2284
2285.. _CONFIGURE_IMFS_DISABLE_CHOWN:
2286
2287CONFIGURE_IMFS_DISABLE_CHOWN
2288----------------------------
2289
2290CONSTANT:
2291    ``CONFIGURE_IMFS_DISABLE_CHOWN``
2292
2293DATA TYPE:
2294    Boolean feature macro.
2295
2296RANGE:
2297    Defined or undefined.
2298
2299DEFAULT VALUE:
2300    This is not defined by default.
2301
2302DESCRIPTION:
2303    In case this configuration option is defined, then the support to change
2304    the owner is disabled in the root IMFS.
2305
2306.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
2307
2308.. _CONFIGURE_IMFS_DISABLE_CHMOD:
2309
2310CONFIGURE_IMFS_DISABLE_CHMOD
2311----------------------------
2312
2313CONSTANT:
2314    ``CONFIGURE_IMFS_DISABLE_CHMOD``
2315
2316DATA TYPE:
2317    Boolean feature macro.
2318
2319RANGE:
2320    Defined or undefined.
2321
2322DEFAULT VALUE:
2323    This is not defined by default.
2324
2325DESCRIPTION:
2326    In case this configuration option is defined, then the support to change
2327    the mode is disabled in the root IMFS.
2328
2329.. index:: CONFIGURE_IMFS_DISABLE_UTIME
2330
2331.. _CONFIGURE_IMFS_DISABLE_UTIME:
2332
2333CONFIGURE_IMFS_DISABLE_UTIME
2334----------------------------
2335
2336CONSTANT:
2337    ``CONFIGURE_IMFS_DISABLE_UTIME``
2338
2339DATA TYPE:
2340    Boolean feature macro.
2341
2342RANGE:
2343    Defined or undefined.
2344
2345DEFAULT VALUE:
2346    This is not defined by default.
2347
2348DESCRIPTION:
2349    In case this configuration option is defined, then the support to change
2350    times is disabled in the root IMFS.
2351
2352.. index:: CONFIGURE_IMFS_DISABLE_LINK
2353
2354.. _CONFIGURE_IMFS_DISABLE_LINK:
2355
2356CONFIGURE_IMFS_DISABLE_LINK
2357---------------------------
2358
2359CONSTANT:
2360    ``CONFIGURE_IMFS_DISABLE_LINK``
2361
2362DATA TYPE:
2363    Boolean feature macro.
2364
2365RANGE:
2366    Defined or undefined.
2367
2368DEFAULT VALUE:
2369    This is not defined by default.
2370
2371DESCRIPTION:
2372    In case this configuration option is defined, then the support to create
2373    hard links is disabled in the root IMFS.
2374
2375.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
2376
2377.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
2378
2379CONFIGURE_IMFS_DISABLE_SYMLINK
2380------------------------------
2381
2382CONSTANT:
2383    ``CONFIGURE_IMFS_DISABLE_SYMLINK``
2384
2385DATA TYPE:
2386    Boolean feature macro.
2387
2388RANGE:
2389    Defined or undefined.
2390
2391DEFAULT VALUE:
2392    This is not defined by default.
2393
2394DESCRIPTION:
2395    In case this configuration option is defined, then the support to create
2396    symbolic links is disabled in the root IMFS.
2397
2398.. index:: CONFIGURE_IMFS_DISABLE_READLINK
2399
2400.. _CONFIGURE_IMFS_DISABLE_READLINK:
2401
2402CONFIGURE_IMFS_DISABLE_READLINK
2403-------------------------------
2404
2405CONSTANT:
2406    ``CONFIGURE_IMFS_DISABLE_READLINK``
2407
2408DATA TYPE:
2409    Boolean feature macro.
2410
2411RANGE:
2412    Defined or undefined.
2413
2414DEFAULT VALUE:
2415    This is not defined by default.
2416
2417DESCRIPTION:
2418    In case this configuration option is defined, then the support to read
2419    symbolic links is disabled in the root IMFS.
2420
2421.. index:: CONFIGURE_IMFS_DISABLE_RENAME
2422
2423.. _CONFIGURE_IMFS_DISABLE_RENAME:
2424
2425CONFIGURE_IMFS_DISABLE_RENAME
2426-----------------------------
2427
2428CONSTANT:
2429    ``CONFIGURE_IMFS_DISABLE_RENAME``
2430
2431DATA TYPE:
2432    Boolean feature macro.
2433
2434RANGE:
2435    Defined or undefined.
2436
2437DEFAULT VALUE:
2438    This is not defined by default.
2439
2440DESCRIPTION:
2441    In case this configuration option is defined, then the support to rename
2442    nodes is disabled in the root IMFS.
2443
2444.. index:: CONFIGURE_IMFS_DISABLE_READDIR
2445
2446.. _CONFIGURE_IMFS_DISABLE_READDIR:
2447
2448CONFIGURE_IMFS_DISABLE_READDIR
2449------------------------------
2450
2451CONSTANT:
2452    ``CONFIGURE_IMFS_DISABLE_READDIR``
2453
2454DATA TYPE:
2455    Boolean feature macro.
2456
2457RANGE:
2458    Defined or undefined.
2459
2460DEFAULT VALUE:
2461    This is not defined by default.
2462
2463DESCRIPTION:
2464    In case this configuration option is defined, then the support to read a
2465    directory is disabled in the root IMFS.  It is still possible to open nodes
2466    in a directory.
2467
2468.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
2469
2470.. _CONFIGURE_IMFS_DISABLE_MOUNT:
2471
2472CONFIGURE_IMFS_DISABLE_MOUNT
2473----------------------------
2474
2475CONSTANT:
2476    ``CONFIGURE_IMFS_DISABLE_MOUNT``
2477
2478DATA TYPE:
2479    Boolean feature macro.
2480
2481RANGE:
2482    Defined or undefined.
2483
2484DEFAULT VALUE:
2485    This is not defined by default.
2486
2487DESCRIPTION:
2488    In case this configuration option is defined, then the support to mount
2489    other file systems is disabled in the root IMFS.
2490
2491.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
2492
2493.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
2494
2495CONFIGURE_IMFS_DISABLE_UNMOUNT
2496------------------------------
2497
2498CONSTANT:
2499    ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
2500
2501DATA TYPE:
2502    Boolean feature macro.
2503
2504RANGE:
2505    Defined or undefined.
2506
2507DEFAULT VALUE:
2508    This is not defined by default.
2509
2510DESCRIPTION:
2511    In case this configuration option is defined, then the support to unmount
2512    file systems is disabled in the root IMFS.
2513
2514.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
2515
2516.. _CONFIGURE_IMFS_DISABLE_MKNOD:
2517
2518CONFIGURE_IMFS_DISABLE_MKNOD
2519----------------------------
2520
2521CONSTANT:
2522    ``CONFIGURE_IMFS_DISABLE_MKNOD``
2523
2524DATA TYPE:
2525    Boolean feature macro.
2526
2527RANGE:
2528    Defined or undefined.
2529
2530DEFAULT VALUE:
2531    This is not defined by default.
2532
2533DESCRIPTION:
2534    In case this configuration option is defined, then the support to make
2535    directories, devices, regular files and FIFOs is disabled in the root IMFS.
2536
2537.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2538
2539.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
2540
2541CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2542---------------------------------
2543
2544CONSTANT:
2545    ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
2546
2547DATA TYPE:
2548    Boolean feature macro.
2549
2550RANGE:
2551    Defined or undefined.
2552
2553DEFAULT VALUE:
2554    This is not defined by default.
2555
2556DESCRIPTION:
2557    In case this configuration option is defined, then the support to make
2558    regular files is disabled in the root IMFS.
2559
2560.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
2561
2562.. _CONFIGURE_IMFS_DISABLE_RMNOD:
2563
2564CONFIGURE_IMFS_DISABLE_RMNOD
2565----------------------------
2566
2567CONSTANT:
2568    ``CONFIGURE_IMFS_DISABLE_RMNOD``
2569
2570DATA TYPE:
2571    Boolean feature macro.
2572
2573RANGE:
2574    Defined or undefined.
2575
2576DEFAULT VALUE:
2577    This is not defined by default.
2578
2579DESCRIPTION:
2580    In case this configuration option is defined, then the support to remove
2581    nodes is disabled in the root IMFS.
2582
2583Block Device Cache Configuration
2584================================
2585
2586This section defines Block Device Cache (bdbuf) related configuration
2587parameters.
2588
2589.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2590
2591.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
2592
2593CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2594------------------------------------
2595
2596CONSTANT:
2597    ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
2598
2599DATA TYPE:
2600    Boolean feature macro.
2601
2602RANGE:
2603    Defined or undefined.
2604
2605DEFAULT VALUE:
2606    This is not defined by default.
2607
2608DESCRIPTION:
2609    Provides a Block Device Cache configuration.
2610
2611NOTES:
2612    Each option of the Block Device Cache configuration can be explicitly set
2613    by the user with the configuration options below.  The Block Device Cache
2614    is used for example by the RFS and DOSFS file systems.
2615
2616.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2617
2618.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
2619
2620CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2621---------------------------------
2622
2623CONSTANT:
2624    ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
2625
2626DATA TYPE:
2627    Unsigned integer (``size_t``).
2628
2629RANGE:
2630    Positive.
2631
2632DEFAULT VALUE:
2633    The default value is 32768 bytes.
2634
2635DESCRIPTION:
2636    Size of the cache memory in bytes.
2637
2638NOTES:
2639    None.
2640
2641.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2642
2643.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
2644
2645CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2646-------------------------------
2647
2648CONSTANT:
2649    ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
2650
2651DATA TYPE:
2652    Unsigned integer (``uint32_t``).
2653
2654RANGE:
2655    Positive.
2656
2657DEFAULT VALUE:
2658    The default value is 512 bytes.
2659
2660DESCRIPTION:
2661    Defines the minimum size of a buffer in bytes.
2662
2663NOTES:
2664    None.
2665
2666.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2667
2668.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
2669
2670CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2671-------------------------------
2672
2673CONSTANT:
2674    ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
2675
2676DATA TYPE:
2677    Unsigned integer (``uint32_t``).
2678
2679RANGE:
2680    It must be positive and an integral multiple of the buffer minimum size.
2681
2682DEFAULT VALUE:
2683    The default value is 4096 bytes.
2684
2685DESCRIPTION:
2686    Defines the maximum size of a buffer in bytes.
2687
2688NOTES:
2689    None.
2690
2691.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
2692
2693.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
2694
2695CONFIGURE_SWAPOUT_SWAP_PERIOD
2696-----------------------------
2697
2698CONSTANT:
2699    ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
2700
2701DATA TYPE:
2702    Unsigned integer (``uint32_t``).
2703
2704RANGE:
2705    Positive.
2706
2707DEFAULT VALUE:
2708    The default value is 250 milliseconds.
2709
2710DESCRIPTION:
2711    Defines the swapout task swap period in milliseconds.
2712
2713NOTES:
2714    None.
2715
2716.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
2717
2718.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
2719
2720CONFIGURE_SWAPOUT_BLOCK_HOLD
2721----------------------------
2722
2723CONSTANT:
2724    ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
2725
2726DATA TYPE:
2727    Unsigned integer (``uint32_t``).
2728
2729RANGE:
2730    Positive.
2731
2732DEFAULT VALUE:
2733    The default value is 1000 milliseconds.
2734
2735DESCRIPTION:
2736    Defines the swapout task maximum block hold time in milliseconds.
2737
2738NOTES:
2739    None.
2740
2741.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
2742
2743.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
2744
2745CONFIGURE_SWAPOUT_TASK_PRIORITY
2746-------------------------------
2747
2748CONSTANT:
2749    ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
2750
2751DATA TYPE:
2752    Task priority (``rtems_task_priority``).
2753
2754RANGE:
2755    Valid task priority.
2756
2757DEFAULT VALUE:
2758    The default value is 15.
2759
2760DESCRIPTION:
2761    Defines the swapout task priority.
2762
2763NOTES:
2764    None.
2765
2766.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
2767
2768.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
2769
2770CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
2771-------------------------------------
2772
2773CONSTANT:
2774    ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
2775
2776DATA TYPE:
2777    Unsigned integer (``uint32_t``).
2778
2779RANGE:
2780    Positive.
2781
2782DEFAULT VALUE:
2783    The default value is 0.
2784
2785DESCRIPTION:
2786    Defines the maximum blocks per read-ahead request.
2787
2788NOTES:
2789    A value of 0 disables the read-ahead task (default).  The read-ahead task
2790    will issue speculative read transfers if a sequential access pattern is
2791    detected.  This can improve the performance on some systems.
2792
2793.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
2794
2795.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
2796
2797CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
2798--------------------------------
2799
2800CONSTANT:
2801    ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
2802
2803DATA TYPE:
2804    Unsigned integer (``uint32_t``).
2805
2806RANGE:
2807    Positive.
2808
2809DEFAULT VALUE:
2810    The default value is 16.
2811
2812DESCRIPTION:
2813    Defines the maximum blocks per write request.
2814
2815NOTES:
2816    None.
2817
2818.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
2819
2820.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
2821
2822CONFIGURE_BDBUF_TASK_STACK_SIZE
2823-------------------------------
2824
2825CONSTANT:
2826    ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
2827
2828DATA TYPE:
2829    Unsigned integer (``size_t``).
2830
2831RANGE:
2832    Zero or positive.
2833
2834DEFAULT VALUE:
2835    The default value is RTEMS_MINIMUM_STACK_SIZE.
2836
2837DESCRIPTION:
2838    Defines the task stack size of the Block Device Cache tasks in bytes.
2839
2840NOTES:
2841    None.
2842
2843.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2844
2845.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
2846
2847CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2848----------------------------------------
2849
2850CONSTANT:
2851    ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
2852
2853DATA TYPE:
2854    Task priority (``rtems_task_priority``).
2855
2856RANGE:
2857    Valid task priority.
2858
2859DEFAULT VALUE:
2860    The default value is 15.
2861
2862DESCRIPTION:
2863    Defines the read-ahead task priority.
2864
2865NOTES:
2866    None.
2867
2868.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
2869
2870.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
2871
2872CONFIGURE_SWAPOUT_WORKER_TASKS
2873------------------------------
2874
2875CONSTANT:
2876    ``CONFIGURE_SWAPOUT_WORKER_TASKS``
2877
2878DATA TYPE:
2879    Unsigned integer (``size_t``).
2880
2881RANGE:
2882    Zero or positive.
2883
2884DEFAULT VALUE:
2885    The default value is 0.
2886
2887DESCRIPTION:
2888    Defines the swapout worker task count.
2889
2890NOTES:
2891    None.
2892
2893.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2894
2895.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
2896
2897CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2898--------------------------------------
2899
2900CONSTANT:
2901    ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
2902
2903DATA TYPE:
2904    Task priority (``rtems_task_priority``).
2905
2906RANGE:
2907    Valid task priority.
2908
2909DEFAULT VALUE:
2910    The default value is 15.
2911
2912DESCRIPTION:
2913    Defines the swapout worker task priority.
2914
2915NOTES:
2916    None.
2917
2918BSP Specific Settings
2919=====================
2920
2921This section describes BSP specific configuration settings used by
2922``<rtems/confdefs.h>``.  The BSP specific configuration settings are defined in
2923``<bsp.h>``.
2924
2925.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
2926
2927.. _CONFIGURE_DISABLE_BSP_SETTINGS:
2928
2929CONFIGURE_DISABLE_BSP_SETTINGS
2930------------------------------
2931
2932CONSTANT:
2933    ``CONFIGURE_DISABLE_BSP_SETTINGS``
2934
2935DATA TYPE:
2936    Boolean feature macro.
2937
2938RANGE:
2939    Defined or undefined.
2940
2941DEFAULT VALUE:
2942    This is not defined by default.
2943
2944DESCRIPTION:
2945    All BSP specific configuration settings can be disabled by the application
2946    with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
2947
2948NOTES:
2949    None.
2950
2951.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2952
2953.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
2954
2955CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2956----------------------------------
2957
2958CONSTANT:
2959    ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
2960
2961DATA TYPE:
2962    Boolean feature macro.
2963
2964RANGE:
2965    Defined or undefined.
2966
2967DEFAULT VALUE:
2968    This option is BSP specific.
2969
2970DESCRIPTION:
2971    This configuration parameter is defined by a BSP to indicate that it does
2972    not allocate all available memory to the C Program Heap used by the Malloc
2973    Family of routines.
2974
2975    If defined, when ``malloc()`` is unable to allocate memory, it will call
2976    the BSP supplied ``sbrk()`` to obtain more memory.
2977
2978NOTES:
2979    This parameter should not be defined by the application. Only the BSP knows
2980    how it allocates memory to the C Program Heap.
2981
2982.. index:: BSP_IDLE_TASK_BODY
2983
2984.. _BSP_IDLE_TASK_BODY:
2985
2986BSP_IDLE_TASK_BODY
2987------------------
2988
2989CONSTANT:
2990    ``BSP_IDLE_TASK_BODY``
2991
2992DATA TYPE:
2993    Function pointer.
2994
2995RANGE:
2996    Undefined or valid function pointer.
2997
2998DEFAULT VALUE:
2999    This option is BSP specific.
3000
3001DESCRIPTION:
3002    If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
3003    ``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
3004    BSP specific idle task body will be used.
3005
3006NOTES:
3007    As it has knowledge of the specific CPU model, system controller logic, and
3008    peripheral buses, a BSP specific IDLE task may be capable of turning
3009    components off to save power during extended periods of no task activity
3010
3011.. index:: BSP_IDLE_TASK_STACK_SIZE
3012
3013.. _BSP_IDLE_TASK_STACK_SIZE:
3014
3015BSP_IDLE_TASK_STACK_SIZE
3016------------------------
3017
3018CONSTANT:
3019    ``BSP_IDLE_TASK_STACK_SIZE``
3020
3021DATA TYPE:
3022    Unsigned integer (``size_t``).
3023
3024RANGE:
3025    Undefined or positive.
3026
3027DEFAULT VALUE:
3028    This option is BSP specific.
3029
3030DESCRIPTION:
3031    If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
3032    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
3033    this BSP suggested idle task stack size will be used.
3034
3035NOTES:
3036    The order of precedence for configuring the IDLE task stack size is:
3037
3038    - RTEMS default minimum stack size.
3039
3040    - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
3041
3042    - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
3043
3044    - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
3045
3046.. COMMENT: XXX - add cross references to other related values.
3047
3048.. index:: BSP_INITIAL_EXTENSION
3049
3050.. _BSP_INITIAL_EXTENSION:
3051
3052BSP_INITIAL_EXTENSION
3053---------------------
3054
3055CONSTANT:
3056    ``BSP_INITIAL_EXTENSION``
3057
3058DATA TYPE:
3059    List of user extension initializers (``rtems_extensions_table``).
3060
3061RANGE:
3062    Undefined or a list of user extension initializers.
3063
3064DEFAULT VALUE:
3065    This option is BSP specific.
3066
3067DESCRIPTION:
3068    If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
3069    initial extension will be placed as the last entry in the initial extension
3070    table.
3071
3072NOTES:
3073    None.
3074
3075.. index:: BSP_INTERRUPT_STACK_SIZE
3076
3077.. _BSP_INTERRUPT_STACK_SIZE:
3078
3079BSP_INTERRUPT_STACK_SIZE
3080------------------------
3081
3082CONSTANT:
3083    ``BSP_INTERRUPT_STACK_SIZE``
3084
3085DATA TYPE:
3086    Unsigned integer (``size_t``).
3087
3088RANGE:
3089    Undefined or positive.
3090
3091DEFAULT VALUE:
3092    This option is BSP specific.
3093
3094DESCRIPTION:
3095    If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
3096    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
3097    this BSP specific interrupt stack size will be used.
3098
3099NOTES:
3100    None.
3101
3102.. index:: BSP_MAXIMUM_DEVICES
3103
3104.. _BSP_MAXIMUM_DEVICES:
3105
3106BSP_MAXIMUM_DEVICES
3107-------------------
3108
3109CONSTANT:
3110    ``BSP_MAXIMUM_DEVICES``
3111
3112DATA TYPE:
3113    Unsigned integer (``size_t``).
3114
3115RANGE:
3116    Undefined or positive.
3117
3118DEFAULT VALUE:
3119    This option is BSP specific.
3120
3121DESCRIPTION:
3122    If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
3123    ``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
3124    BSP specific maximum device count will be used.
3125
3126NOTES:
3127    This option is specific to the device file system (devFS) and should not be
3128    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
3129    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
3130    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
3131
3132.. index:: BSP_ZERO_WORKSPACE_AUTOMATICALLY
3133
3134.. _BSP_ZERO_WORKSPACE_AUTOMATICALLY:
3135
3136BSP_ZERO_WORKSPACE_AUTOMATICALLY
3137--------------------------------
3138
3139CONSTANT:
3140    ``BSP_ZERO_WORKSPACE_AUTOMATICALLY``
3141
3142DATA TYPE:
3143    Boolean feature macro.
3144
3145RANGE:
3146    Defined or undefined.
3147
3148DEFAULT VALUE:
3149    This option is BSP specific.
3150
3151DESCRIPTION:
3152    If ``BSP_ZERO_WORKSPACE_AUTOMATICALLY`` is defined by the BSP and
3153    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY`` is not defined by the
3154    application, then the workspace will be zeroed automatically.
3155
3156NOTES:
3157    Zeroing memory can add significantly to system boot time. It is not
3158    necessary for RTEMS but is often assumed by support libraries.
3159
3160.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
3161
3162.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
3163
3164CONFIGURE_BSP_PREREQUISITE_DRIVERS
3165----------------------------------
3166
3167CONSTANT:
3168    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
3169
3170DATA TYPE:
3171    List of device driver initializers (``rtems_driver_address_table``).
3172
3173RANGE:
3174    Undefined or array of device drivers.
3175
3176DEFAULT VALUE:
3177    This option is BSP specific.
3178
3179DESCRIPTION:
3180    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
3181    drivers it needs to include in the Device Driver Table.  This should be
3182    defined to the set of device driver entries that will be placed in the
3183    table at the *FRONT* of the Device Driver Table and initialized before any
3184    other drivers *INCLUDING* any application prerequisite drivers.
3185
3186NOTES:
3187    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
3188    configure common infrastructure such as bus controllers or probe for
3189    devices.
3190
3191Idle Task Configuration
3192=======================
3193
3194This section defines the IDLE task related configuration parameters supported
3195by ``<rtems/confdefs.h>``.
3196
3197.. index:: CONFIGURE_IDLE_TASK_BODY
3198
3199.. _CONFIGURE_IDLE_TASK_BODY:
3200
3201CONFIGURE_IDLE_TASK_BODY
3202------------------------
3203
3204CONSTANT:
3205    ``CONFIGURE_IDLE_TASK_BODY``
3206
3207DATA TYPE:
3208    Function pointer.
3209
3210RANGE:
3211    Undefined or valid function pointer.
3212
3213DEFAULT VALUE:
3214    This is not defined by default.
3215
3216DESCRIPTION:
3217    ``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
3218    the application specific IDLE thread body.  If not specified, the BSP or
3219    RTEMS default IDLE thread body will be used.
3220
3221NOTES:
3222    None.
3223
3224.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
3225
3226.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
3227
3228CONFIGURE_IDLE_TASK_STACK_SIZE
3229------------------------------
3230
3231CONSTANT:
3232    ``CONFIGURE_IDLE_TASK_STACK_SIZE``
3233
3234DATA TYPE:
3235    Unsigned integer (``size_t``).
3236
3237RANGE:
3238    Undefined or positive.
3239
3240DEFAULT VALUE:
3241    The default value is RTEMS_MINIMUM_STACK_SIZE.
3242
3243DESCRIPTION:
3244    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
3245    IDLE task.
3246
3247NOTES:
3248    None.
3249
3250.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3251
3252.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
3253
3254CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3255-------------------------------------------
3256
3257CONSTANT:
3258    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
3259
3260DATA TYPE:
3261    Boolean feature macro.
3262
3263RANGE:
3264    Defined or undefined.
3265
3266DEFAULT VALUE:
3267    This is not defined by default, the user is assumed to provide one or more
3268    initialization tasks.
3269
3270DESCRIPTION:
3271    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`` is set to indicate that the
3272    user has configured *NO* user initialization tasks or threads and that the
3273    user provided IDLE task will perform application initialization and then
3274    transform itself into an IDLE task.
3275
3276NOTES:
3277    If you use this option be careful, the user IDLE task *CANNOT* block at all
3278    during the initialization sequence.  Further, once application
3279    initialization is complete, it must make itself preemptible and enter an
3280    IDLE body loop.
3281
3282    The IDLE task must run at the lowest priority of all tasks in the system.
3283
3284General Scheduler Configuration
3285===============================
3286
3287This section defines the configuration parameters related to selecting a
3288scheduling algorithm for an application.  For the :ref:`schedulers built into
3289RTEMS <SchedulingConcepts>`, the configuration is straightforward.  All that is
3290required is to define the configuration macro which specifies which scheduler
3291you want for in your application.
3292
3293The pluggable scheduler interface also enables the user to provide their own
3294scheduling algorithm.  If you choose to do this, you must define multiple
3295configuration macros.
3296
3297.. index:: CONFIGURE_SCHEDULER_CBS
3298
3299.. _CONFIGURE_SCHEDULER_CBS:
3300
3301CONFIGURE_SCHEDULER_CBS
3302-----------------------
3303
3304CONSTANT:
3305    ``CONFIGURE_SCHEDULER_CBS``
3306
3307DATA TYPE:
3308    Boolean feature macro.
3309
3310RANGE:
3311    Defined or undefined.
3312
3313DEFAULT VALUE:
3314    This is not defined by default.
3315
3316DESCRIPTION:
3317    If defined, then the :ref:`Constant Bandwidth Server (CBS) Scheduler
3318    <SchedulerCBS>` algorithm is made available to the application.
3319
3320NOTES:
3321    In case no explicit :ref:`clustered scheduler configuration
3322    <ConfigurationSchedulersClustered>` is present, then it is used as the
3323    scheduler for exactly one processor.
3324
3325.. index:: CONFIGURE_SCHEDULER_EDF
3326
3327.. _CONFIGURE_SCHEDULER_EDF:
3328
3329CONFIGURE_SCHEDULER_EDF
3330-----------------------
3331
3332CONSTANT:
3333    ``CONFIGURE_SCHEDULER_EDF``
3334
3335DATA TYPE:
3336    Boolean feature macro.
3337
3338RANGE:
3339    Defined or undefined.
3340
3341DEFAULT VALUE:
3342    This is not defined by default.
3343
3344DESCRIPTION:
3345    If defined, then the :ref:`Earliest Deadline First (EDF) Scheduler
3346    <SchedulerEDF>` algorithm is made available to the application.
3347
3348NOTES:
3349    In case no explicit :ref:`clustered scheduler configuration
3350    <ConfigurationSchedulersClustered>` is present, then it is used as the
3351    scheduler for exactly one processor.
3352
3353.. index:: CONFIGURE_SCHEDULER_EDF_SMP
3354
3355.. _CONFIGURE_SCHEDULER_EDF_SMP:
3356
3357CONFIGURE_SCHEDULER_EDF_SMP
3358---------------------------
3359
3360CONSTANT:
3361    ``CONFIGURE_SCHEDULER_EDF_SMP``
3362
3363DATA TYPE:
3364    Boolean feature macro.
3365
3366RANGE:
3367    Defined or undefined.
3368
3369DEFAULT VALUE:
3370    This is not defined by default.
3371
3372DESCRIPTION:
3373    If defined, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
3374    <SchedulerSMPEDF>` algorithm is made available to the application.
3375
3376NOTES:
3377    This scheduler algorithm is only available when RTEMS is built with SMP
3378    support enabled.
3379
3380    In case no explicit :ref:`clustered scheduler configuration
3381    <ConfigurationSchedulersClustered>` is present, then it is used as the
3382    scheduler for up to 32 processors.
3383
3384    This scheduler algorithm is the default in SMP configurations and is only
3385    selected when :ref:`CONFIGURE_MAXIMUM_PROCESSORS
3386    <CONFIGURE_MAXIMUM_PROCESSORS>` is greater than one.
3387
3388.. index:: CONFIGURE_SCHEDULER_NAME
3389
3390.. _CONFIGURE_SCHEDULER_NAME:
3391
3392CONFIGURE_SCHEDULER_NAME
3393------------------------
3394
3395CONSTANT:
3396    ``CONFIGURE_SCHEDULER_NAME``
3397
3398DATA TYPE:
3399    RTEMS Name (``rtems_name``).
3400
3401RANGE:
3402    Any value.
3403
3404DEFAULT VALUE:
3405    The default name is
3406
3407      - ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
3408      - ``"MPA "`` for the :ref:`Arbitrary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
3409      - ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
3410      - ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
3411      - ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
3412      - ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
3413      - ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
3414      - ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
3415
3416DESCRIPTION:
3417    Schedulers can be identified via ``rtems_scheduler_ident``.  The name of
3418    the scheduler is determined by the configuration.
3419
3420NOTES:
3421    None.
3422
3423.. index:: CONFIGURE_SCHEDULER_PRIORITY
3424
3425.. _CONFIGURE_SCHEDULER_PRIORITY:
3426
3427CONFIGURE_SCHEDULER_PRIORITY
3428----------------------------
3429
3430CONSTANT:
3431    ``CONFIGURE_SCHEDULER_PRIORITY``
3432
3433DATA TYPE:
3434    Boolean feature macro.
3435
3436RANGE:
3437    Defined or undefined.
3438
3439DEFAULT VALUE:
3440    This is defined by default.  This is the default scheduler and specifying
3441    this configuration parameter is redundant.
3442
3443DESCRIPTION:
3444    If defined, then the :ref:`Deterministic Priority Scheduler
3445    <SchedulerPriority>` algorithm is made available to the application.
3446
3447NOTES:
3448    In case no explicit :ref:`clustered scheduler configuration
3449    <ConfigurationSchedulersClustered>` is present, then it is used as the
3450    scheduler for exactly one processor.
3451
3452    This scheduler algorithm is the default when
3453    :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
3454    exactly one.
3455
3456.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
3457
3458.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
3459
3460CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
3461-----------------------------------------
3462
3463CONSTANT:
3464    ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
3465
3466DATA TYPE:
3467    Boolean feature macro.
3468
3469RANGE:
3470    Defined or undefined.
3471
3472DEFAULT VALUE:
3473    This is not defined by default.
3474
3475DESCRIPTION:
3476    If defined, then the :ref:`Arbitrary Processor Affinity SMP Scheduler
3477    <SchedulerSMPPriorityAffinity>` algorithm is made available to the
3478    application.
3479
3480NOTES:
3481    This scheduler algorithm is only available when RTEMS is built with SMP
3482    support enabled.
3483
3484    In case no explicit :ref:`clustered scheduler configuration
3485    <ConfigurationSchedulersClustered>` is present, then it is used as the
3486    scheduler for up to 32 processors.
3487
3488.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
3489
3490.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
3491
3492CONFIGURE_SCHEDULER_PRIORITY_SMP
3493--------------------------------
3494
3495CONSTANT:
3496    ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
3497
3498DATA TYPE:
3499    Boolean feature macro.
3500
3501RANGE:
3502    Defined or undefined.
3503
3504DEFAULT VALUE:
3505    This is not defined by default.
3506
3507DESCRIPTION:
3508    If defined, then the :ref:`Deterministic Priority SMP Scheduler
3509    <SchedulerSMPPriority>` algorithm is made available to the application.
3510
3511NOTES:
3512    This scheduler algorithm is only available when RTEMS is built with SMP
3513    support enabled.
3514
3515    In case no explicit :ref:`clustered scheduler configuration
3516    <ConfigurationSchedulersClustered>` is present, then it is used as the
3517    scheduler for up to 32 processors.
3518
3519.. index:: CONFIGURE_SCHEDULER_SIMPLE
3520
3521.. _CONFIGURE_SCHEDULER_SIMPLE:
3522
3523CONFIGURE_SCHEDULER_SIMPLE
3524--------------------------
3525
3526CONSTANT:
3527    ``CONFIGURE_SCHEDULER_SIMPLE``
3528
3529DATA TYPE:
3530    Boolean feature macro.
3531
3532RANGE:
3533    Defined or undefined.
3534
3535DEFAULT VALUE:
3536    This is not defined by default.
3537
3538DESCRIPTION:
3539    If defined, then the :ref:`Simple Priority Scheduler
3540    <SchedulerPrioritySimple>` algorithm is made available to the application.
3541
3542NOTES:
3543    In case no explicit :ref:`clustered scheduler configuration
3544    <ConfigurationSchedulersClustered>` is present, then it is used as the
3545    scheduler for exactly one processor.
3546
3547.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
3548
3549.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
3550
3551CONFIGURE_SCHEDULER_SIMPLE_SMP
3552------------------------------
3553
3554CONSTANT:
3555    ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
3556
3557DATA TYPE:
3558    Boolean feature macro.
3559
3560RANGE:
3561    Defined or undefined.
3562
3563DEFAULT VALUE:
3564    This is not defined by default.
3565
3566DESCRIPTION:
3567    If defined, then the :ref:`Simple Priority SMP Scheduler
3568    <SchedulerSMPPrioritySimple>` algorithm is made available to the
3569    application.
3570
3571NOTES:
3572    This scheduler algorithm is only available when RTEMS is built with SMP
3573    support enabled.
3574
3575    In case no explicit :ref:`clustered scheduler configuration
3576    <ConfigurationSchedulersClustered>` is present, then it is used as the
3577    scheduler for up to 32 processors.
3578
3579.. index:: CONFIGURE_SCHEDULER_USER
3580
3581.. _CONFIGURE_SCHEDULER_USER:
3582
3583CONFIGURE_SCHEDULER_USER
3584------------------------
3585
3586CONSTANT:
3587    ``CONFIGURE_SCHEDULER_USER``
3588
3589DATA TYPE:
3590    Boolean feature macro.
3591
3592RANGE:
3593    Defined or undefined.
3594
3595DEFAULT VALUE:
3596    This is not defined by default.
3597
3598DESCRIPTION:
3599    RTEMS allows the application to provide its own task/thread scheduling
3600    algorithm. In order to do this, one must define
3601    ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
3602    scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
3603    following additional macros must be defined:
3604
3605    - ``CONFIGURE_SCHEDULER`` must be defined to a static definition of
3606      the scheduler data structures of the user scheduler.
3607
3608    - ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` must be defined to a scheduler
3609      table entry initializer for the user scheduler.
3610
3611    - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
3612      the per-thread information of the user scheduler.
3613
3614NOTES:
3615    At this time, the mechanics and requirements for writing a new scheduler
3616    are evolving and not fully documented.  It is recommended that you look at
3617    the existing Deterministic Priority Scheduler in
3618    ``cpukit/score/src/schedulerpriority*.c`` for guidance.  For guidance on
3619    the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
3620    for how these are defined for the Deterministic Priority Scheduler.
3621
3622.. _ConfigurationSchedulersClustered:
3623
3624Clustered Scheduler Configuration
3625=================================
3626
3627Clustered scheduling helps to control the worst-case latencies in a
3628multiprocessor system (SMP).  The goal is to reduce the amount of shared state
3629in the system and thus prevention of lock contention.  Modern multiprocessor
3630systems tend to have several layers of data and instruction caches.  With
3631clustered scheduling it is possible to honour the cache topology of a system
3632and thus avoid expensive cache synchronization traffic.
3633
3634We have clustered scheduling in case the set of processors of a system is
3635partitioned into non-empty pairwise-disjoint subsets.  These subsets are called
3636clusters.  Clusters with a cardinality of one are partitions.  Each cluster is
3637owned by exactly one scheduler.
3638
3639A clustered scheduler configuration is optional.  By default, up to 32
3640processors are managed by the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`.  In
3641order to use clustered scheduling the application designer has to answer two
3642questions.
3643
3644#. How is the set of processors partitioned into clusters?
3645
3646#. Which scheduler algorithm is used for which cluster?
3647
3648The schedulers are statically configured.
3649
3650Configuration Step 1 - Scheduler Algorithms
3651-------------------------------------------
3652
3653Firstly, the application must select which scheduling algorithms are available
3654with the following defines
3655
3656- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
3657
3658- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
3659
3660- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
3661
3662- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
3663
3664This is necessary to calculate the per-thread overhead introduced by the
3665scheduler algorithms.  After these definitions the configuration file must
3666``#include <rtems/scheduler.h>`` to have access to scheduler-specific
3667configuration macros.
3668
3669It is possible to make more than one scheduler algorithm available to the
3670application.  For example a :ref:`Simple Priority SMP Scheduler
3671<SchedulerSMPPrioritySimple>` could be used in a partition for low latency
3672tasks in addition to an :ref:`EDF SMP Scheduler <SchedulerSMPEDF>` for a
3673general-purpose cluster.  Since the per-thread overhead depends on the
3674scheduler algorithm only the scheduler algorithms used by the application
3675should be configured.
3676
3677Configuration Step 2 - Schedulers
3678---------------------------------
3679
3680Each scheduler needs some data structures.  Use the following macros to create
3681the scheduler data structures for a particular scheduler identified in the
3682configuration by ``name``.
3683
3684- ``RTEMS_SCHEDULER_EDF_SMP(name, max_cpu_count)``,
3685
3686- ``RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP(name, prio_count)``,
3687
3688- ``RTEMS_SCHEDULER_PRIORITY_SMP(name, prio_count)``, and
3689
3690- ``RTEMS_SCHEDULER_SIMPLE_SMP(name)``.
3691
3692The ``name`` parameter is used as part of a designator for scheduler-specific
3693data structures, so the usual C/C++ designator rules apply.  This ``name`` is
3694not the scheduler object name.  Additional parameters are scheduler-specific.
3695
3696.. _ConfigurationSchedulerTable:
3697
3698Configuration Step 3 - Scheduler Table
3699--------------------------------------
3700
3701The schedulers are registered in the system via the scheduler table.  To
3702populate the scheduler table define ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` to a
3703list of the following scheduler table entry initializers
3704
3705- ``RTEMS_SCHEDULER_TABLE_EDF_SMP(name, obj_name)``,
3706
3707- ``RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP(name, obj_name)``,
3708
3709- ``RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(name, obj_name)``, and
3710
3711- ``RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(name, obj_name)``.
3712
3713The ``name`` parameter must correspond to the parameter defining the scheduler
3714data structures of configuration step 2.  The ``obj_name`` determines the
3715scheduler object name and can be used in :ref:`rtems_scheduler_ident()
3716<rtems_scheduler_ident>` to get the scheduler object identifier.  The scheduler
3717index is defined by the index of the scheduler table.  It is a configuration
3718error to add a scheduler multiple times to the scheduler table.
3719
3720Configuration Step 4 - Processor to Scheduler Assignment
3721--------------------------------------------------------
3722
3723The last step is to define which processor uses which scheduler.  For this
3724purpose a scheduler assignment table must be defined.  The entry count of this
3725table must be equal to the configured maximum processors
3726(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).  A
3727processor assignment to a scheduler can be optional or mandatory.  The boot
3728processor must have a scheduler assigned.  In case the system needs more
3729mandatory processors than available then a fatal run-time error will occur.  To
3730specify the scheduler assignments define
3731``CONFIGURE_SCHEDULER_ASSIGNMENTS`` to a list of
3732
3733- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
3734
3735- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
3736
3737macros.  The ``scheduler_index`` parameter must be a valid index into the
3738scheduler table defined by configuration step 3.  The ``attr`` parameter
3739defines the scheduler assignment attributes.  By default, a scheduler
3740assignment to a processor is optional.  For the scheduler assignment attribute
3741use one of the mutually exclusive variants
3742
3743- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
3744
3745- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
3746
3747- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
3748
3749It is possible to add/remove processors to/from schedulers at run-time, see
3750:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
3751:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
3752
3753Configuration Example
3754---------------------
3755
3756The following example shows a scheduler configuration for a hypothetical
3757product using two chip variants.  One variant has four processors which is used
3758for the normal product line and another provides eight processors for the
3759high-performance product line.  The first processor performs hard-real time
3760control of actuators and sensors.  The second processor is not used by RTEMS at
3761all and runs a Linux instance to provide a graphical user interface.  The
3762additional processors are used for a worker thread pool to perform data
3763processing operations.
3764
3765The processors managed by RTEMS use two Deterministic Priority SMP schedulers
3766capable of dealing with 256 priority levels.  The scheduler with index zero has
3767the name ``"IO "``.  The scheduler with index one has the name ``"WORK"``.  The
3768scheduler assignments of the first, third and fourth processor are mandatory,
3769so the system must have at least four processors, otherwise a fatal run-time
3770error will occur during system startup.  The processor assignments for the
3771fifth up to the eighth processor are optional so that the same application can
3772be used for the normal and high-performance product lines.  The second
3773processor has no scheduler assigned and runs Linux.  A hypervisor will ensure
3774that the two systems cannot interfere in an undesirable way.
3775
3776.. code-block:: c
3777
3778    #define CONFIGURE_MAXIMUM_PROCESSORS 8
3779    #define CONFIGURE_MAXIMUM_PRIORITY 255
3780
3781    /* Configuration Step 1 - Scheduler Algorithms */
3782    #define CONFIGURE_SCHEDULER_PRIORITY_SMP
3783    #include <rtems/scheduler.h>
3784
3785    /* Configuration Step 2 - Schedulers */
3786    RTEMS_SCHEDULER_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
3787    RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
3788
3789    /* Configuration Step 3 - Scheduler Table */
3790    #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \\
3791      RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
3792        io, \
3793         rtems_build_name('I', 'O', ' ', ' ') \
3794      ), \
3795      RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
3796        work, \
3797        rtems_build_name('W', 'O', 'R', 'K') \
3798      )
3799
3800    /* Configuration Step 4 - Processor to Scheduler Assignment */
3801    #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
3802      RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3803      RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
3804      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3805      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
3806      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3807      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3808      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
3809      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
3810
3811Configuration Errors
3812--------------------
3813
3814In case one of the scheduler indices in ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
3815is invalid a link-time error will occur with an undefined reference to
3816``RTEMS_SCHEDULER_INVALID_INDEX``.
3817
3818Some fatal errors may occur in case of scheduler configuration inconsistencies
3819or a lack of processors on the system.  The fatal source is
3820``RTEMS_FATAL_SOURCE_SMP``.
3821
3822- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
3823  must have a scheduler assigned.
3824
3825- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
3826  processor beyond the range of physically or virtually available processors.
3827  The processor demand must be reduced for this system.
3828
3829- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
3830  processor failed during system initialization.  The system may not have this
3831  processor at all or it could be a problem with a boot loader for example.
3832  Check the ``CONFIGURE_SCHEDULER_ASSIGNMENTS`` definition.
3833
3834- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
3835  to start multitasking on a processor with no scheduler assigned.
3836
3837Device Driver Table
3838===================
3839
3840This section defines the configuration parameters related to the automatic
3841generation of a Device Driver Table.  As ``<rtems/confdefs.h>`` only is aware
3842of a small set of standard device drivers, the generated Device Driver Table is
3843suitable for simple applications with no custom device drivers.
3844
3845Note that network device drivers are not configured in the Device Driver Table.
3846
3847.. index:: CONFIGURE_MAXIMUM_DRIVERS
3848
3849.. _CONFIGURE_MAXIMUM_DRIVERS:
3850
3851CONFIGURE_MAXIMUM_DRIVERS
3852-------------------------
3853
3854CONSTANT:
3855
3856    ``CONFIGURE_MAXIMUM_DRIVERS``
3857
3858DATA TYPE:
3859    Unsigned integer (``uint32_t``).
3860
3861RANGE:
3862    Zero or positive.
3863
3864DEFAULT VALUE:
3865    This is computed by default, and is set to the number of device drivers
3866    configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
3867    configuration parameters.
3868
3869DESCRIPTION:
3870    ``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
3871    per node.
3872
3873NOTES:
3874    If the application will dynamically install device drivers, then this
3875    configuration parameter must be larger than the number of statically
3876    configured device drivers. Drivers configured using the
3877    ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
3878    statically installed.
3879
3880.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3881
3882.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
3883
3884CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3885------------------------------------------
3886
3887CONSTANT:
3888    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
3889
3890DATA TYPE:
3891    Boolean feature macro.
3892
3893RANGE:
3894    Defined or undefined.
3895
3896DEFAULT VALUE:
3897    This is not defined by default.
3898
3899DESCRIPTION:
3900    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
3901    application wishes to include the Console Device Driver.
3902
3903NOTES:
3904    This device driver is responsible for providing the :file:`/dev/console`
3905    device file.  This device is used to initialize the standard input, output,
3906    and error file descriptors.
3907
3908    BSPs should be constructed in a manner that allows ``printk()`` to work
3909    properly without the need for the console driver to be configured.
3910
3911    The
3912
3913    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
3914
3915    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
3916
3917    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3918
3919    configuration options are mutually exclusive.
3920
3921.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
3922
3923.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
3924
3925CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
3926-------------------------------------------------
3927
3928CONSTANT:
3929    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
3930
3931DATA TYPE:
3932    Boolean feature macro.
3933
3934RANGE:
3935    Defined or undefined.
3936
3937DEFAULT VALUE:
3938    This is not defined by default.
3939
3940DESCRIPTION:
3941    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`` is defined if the
3942    application wishes to include the Simple Console Device Driver.
3943
3944NOTES:
3945    This device driver is responsible for providing the :file:`/dev/console`
3946    device file.  This device is used to initialize the standard input, output,
3947    and error file descriptors.
3948
3949    This device driver reads via ``getchark()``.
3950
3951    This device driver writes via ``rtems_putc()``.
3952
3953    The Termios framework is not used.  There is no support to change device
3954    settings, e.g. baud, stop bits, parity, etc.
3955
3956    The
3957
3958    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
3959
3960    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
3961
3962    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3963
3964    configuration options are mutually exclusive.
3965
3966.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
3967
3968.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
3969
3970CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
3971------------------------------------------------------
3972
3973CONSTANT:
3974    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
3975
3976DATA TYPE:
3977    Boolean feature macro.
3978
3979RANGE:
3980    Defined or undefined.
3981
3982DEFAULT VALUE:
3983    This is not defined by default.
3984
3985DESCRIPTION:
3986    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`` is defined if
3987    the application wishes to include the Simple Task Console Device Driver.
3988
3989NOTES:
3990    This device driver is responsible for providing the :file:`/dev/console`
3991    device file.  This device is used to initialize the standard input, output,
3992    and error file descriptors.
3993
3994    This device driver reads via ``getchark()``.
3995
3996    This device driver writes into a write buffer.  The count of characters
3997    written into the write buffer is returned.  It might be less than the
3998    requested count, in case the write buffer is full.  The write is
3999    non-blocking and may be called from interrupt context.  A dedicated task
4000    reads from the write buffer and outputs the characters via
4001    ``rtems_putc()``.  This task runs with the least important priority.  The
4002    write buffer size is 2047 characters and it is not configurable.
4003
4004    Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
4005    write buffer.
4006
4007    The Termios framework is not used.  There is no support to change device
4008    settings, e.g.  baud, stop bits, parity, etc.
4009
4010    The
4011
4012    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
4013
4014    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
4015
4016    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
4017
4018    configuration options are mutually exclusive.
4019
4020.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
4021
4022.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
4023
4024CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
4025----------------------------------------
4026
4027CONSTANT:
4028    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
4029
4030DATA TYPE:
4031    Boolean feature macro.
4032
4033RANGE:
4034    Defined or undefined.
4035
4036DEFAULT VALUE:
4037    This is not defined by default.
4038
4039DESCRIPTION:
4040    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
4041    wishes to include the Clock Device Driver.
4042
4043NOTES:
4044    This device driver is responsible for providing a regular interrupt which
4045    invokes a clock tick directive.
4046
4047    If neither the Clock Driver not Benchmark Timer is enabled and the
4048    configuration parameter
4049    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
4050    compile time error will occur.
4051
4052.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
4053
4054.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
4055
4056CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
4057----------------------------------------
4058
4059CONSTANT:
4060    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
4061
4062DATA TYPE:
4063    Boolean feature macro.
4064
4065RANGE:
4066    Defined or undefined.
4067
4068DEFAULT VALUE:
4069    This is not defined by default.
4070
4071DESCRIPTION:
4072    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
4073    wishes to include the Timer Driver.  This device driver is used to
4074    benchmark execution times by the RTEMS Timing Test Suites.
4075
4076NOTES:
4077    If neither the Clock Driver not Benchmark Timer is enabled and the
4078    configuration parameter
4079    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
4080    compile time error will occur.
4081
4082.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
4083
4084.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
4085
4086CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
4087------------------------------------------------
4088
4089CONSTANT:
4090    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
4091
4092DATA TYPE:
4093    Boolean feature macro.
4094
4095RANGE:
4096    Defined or undefined.
4097
4098DEFAULT VALUE:
4099    This is not defined by default.
4100
4101DESCRIPTION:
4102    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
4103    application does *NOT* want the Clock Device Driver and is *NOT* using the
4104    Timer Driver.  The inclusion or exclusion of the Clock Driver must be
4105    explicit in user applications.
4106
4107NOTES:
4108    This configuration parameter is intended to prevent the common user error
4109    of using the Hello World example as the baseline for an application and
4110    leaving out a clock tick source.
4111
4112.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
4113
4114.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
4115
4116CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
4117--------------------------------------
4118
4119CONSTANT:
4120    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
4121
4122DATA TYPE:
4123    Boolean feature macro.
4124
4125RANGE:
4126    Defined or undefined.
4127
4128DEFAULT VALUE:
4129    This is not defined by default.
4130
4131DESCRIPTION:
4132    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
4133    wishes to include the Real-Time Clock Driver.
4134
4135NOTES:
4136    Most BSPs do not include support for a real-time clock. This is because
4137    many boards do not include the required hardware.
4138
4139    If this is defined and the BSP does not have this device driver, then the
4140    user will get a link time error for an undefined symbol.
4141
4142.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
4143
4144.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
4145
4146CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
4147-------------------------------------------
4148
4149CONSTANT:
4150    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
4151
4152DATA TYPE:
4153    Boolean feature macro.
4154
4155RANGE:
4156    Defined or undefined.
4157
4158DEFAULT VALUE:
4159    This is not defined by default.
4160
4161DESCRIPTION:
4162    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
4163    application wishes to include the Watchdog Driver.
4164
4165NOTES:
4166    Most BSPs do not include support for a watchdog device driver. This is
4167    because many boards do not include the required hardware.
4168
4169    If this is defined and the BSP does not have this device driver, then the
4170    user will get a link time error for an undefined symbol.
4171
4172.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4173
4174.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
4175
4176CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4177-----------------------------------------------
4178
4179CONSTANT:
4180    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
4181
4182DATA TYPE:
4183    Boolean feature macro.
4184
4185RANGE:
4186    Defined or undefined.
4187
4188DEFAULT VALUE:
4189    This is not defined by default.
4190
4191DESCRIPTION:
4192    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
4193    application wishes to include the BSP's Frame Buffer Device Driver.
4194
4195NOTES:
4196    Most BSPs do not include support for a Frame Buffer Device Driver. This is
4197    because many boards do not include the required hardware.
4198
4199    If this is defined and the BSP does not have this device driver, then the
4200    user will get a link time error for an undefined symbol.
4201
4202.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4203
4204.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
4205
4206CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4207---------------------------------------
4208
4209CONSTANT:
4210    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
4211
4212DATA TYPE:
4213    Boolean feature macro.
4214
4215RANGE:
4216    Defined or undefined.
4217
4218DEFAULT VALUE:
4219    This is not defined by default.
4220
4221DESCRIPTION:
4222    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
4223    wishes to include the Stub Device Driver.
4224
4225NOTES:
4226    This device driver simply provides entry points that return successful and
4227    is primarily a test fixture. It is supported by all BSPs.
4228
4229.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4230
4231.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
4232
4233CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4234------------------------------------------
4235
4236CONSTANT:
4237    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
4238
4239DATA TYPE:
4240    device driver entry structures
4241
4242RANGE:
4243    Undefined or set of device driver entry structures
4244
4245DEFAULT VALUE:
4246    This is not defined by default.
4247
4248DESCRIPTION:
4249    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
4250    application has device drivers it needs to include in the Device Driver
4251    Table.  This should be defined to the set of device driver entries that
4252    will be placed in the table at the *FRONT* of the Device Driver Table and
4253    initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
4254
4255NOTES:
4256    In some cases, it is used by System On Chip BSPs to support peripheral
4257    buses beyond those normally found on the System On Chip. For example, this
4258    is used by one RTEMS system which has implemented a SPARC/ERC32 based board
4259    with VMEBus. The VMEBus Controller initialization is performed by a device
4260    driver configured via this configuration parameter.
4261
4262.. COMMENT: XXX Add example
4263
4264.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
4265
4266.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
4267
4268CONFIGURE_APPLICATION_EXTRA_DRIVERS
4269-----------------------------------
4270
4271CONSTANT:
4272    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
4273
4274DATA TYPE:
4275    device driver entry structures
4276
4277RANGE:
4278    Undefined or set of device driver entry structures
4279
4280DEFAULT VALUE:
4281    This is not defined by default.
4282
4283DESCRIPTION:
4284    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
4285    device drivers it needs to include in the Device Driver Table.  This should
4286    be defined to the set of device driver entries that will be placed in the
4287    table at the *END* of the Device Driver Table.
4288
4289NOTES:
4290    None.
4291
4292.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4293.. index:: /dev/null
4294
4295.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
4296
4297CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4298---------------------------------------
4299
4300CONSTANT:
4301    ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
4302
4303DATA TYPE:
4304    Boolean feature macro.
4305
4306RANGE:
4307    Defined or undefined.
4308
4309DEFAULT VALUE:
4310    This is not defined by default.
4311
4312DESCRIPTION:
4313    This configuration variable is specified to enable ``/dev/null`` device driver.
4314
4315NOTES:
4316    This device driver is supported by all BSPs.
4317
4318.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4319.. index:: /dev/zero
4320
4321.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
4322
4323CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4324---------------------------------------
4325
4326CONSTANT:
4327    ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
4328
4329DATA TYPE:
4330    Boolean feature macro.
4331
4332RANGE:
4333    Defined or undefined.
4334
4335DEFAULT VALUE:
4336    This is not defined by default.
4337
4338DESCRIPTION:
4339    This configuration variable is specified to enable ``/dev/zero`` device driver.
4340
4341NOTES:
4342    This device driver is supported by all BSPs.
4343
4344.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4345
4346.. _CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE:
4347
4348CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4349-------------------------------------
4350
4351CONSTANT:
4352    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE``
4353
4354DATA TYPE:
4355    Boolean feature macro.
4356
4357RANGE:
4358    Defined or undefined.
4359
4360DEFAULT VALUE:
4361    This is not defined by default, indicating the ``<rtems/confdefs.h>`` is
4362    providing the device driver table.
4363
4364DESCRIPTION:
4365    ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE`` is defined if the application
4366    wishes to provide their own Device Driver Table.
4367
4368    The table must be an array of ``rtems_driver_address_table`` entries
4369    named`` _IO_Driver_address_table``.  The application must also provide a
4370    const variable ``_IO_Number_of_drivers`` of type ``size_t`` indicating the
4371    number of entries in the ``_IO_Driver_address_table``.
4372
4373NOTES:
4374    It is expected that there the application would only rarely need to do this.
4375
4376Multiprocessing Configuration
4377=============================
4378
4379This section defines the multiprocessing related system configuration
4380parameters supported by ``<rtems/confdefs.h>``.  They are only used if the
4381Multiprocessing Support (distinct from the SMP support) is enabled at configure
4382time using the ``--enable-multiprocessing`` option.
4383
4384Additionally, this class of Configuration Constants are only applicable if
4385``CONFIGURE_MP_APPLICATION`` is defined.
4386
4387.. index:: CONFIGURE_MP_APPLICATION
4388
4389.. _CONFIGURE_MP_APPLICATION:
4390
4391CONFIGURE_MP_APPLICATION
4392------------------------
4393
4394CONSTANT:
4395    ``CONFIGURE_MP_APPLICATION``
4396
4397DATA TYPE:
4398    Boolean feature macro.
4399
4400RANGE:
4401    Defined or undefined.
4402
4403DEFAULT VALUE:
4404    This is not defined by default.
4405
4406DESCRIPTION:
4407    This configuration parameter must be defined to indicate that the
4408    application intends to be part of a multiprocessing
4409    configuration. Additional configuration parameters are assumed to be
4410    provided.
4411
4412NOTES:
4413    This has no impact unless RTEMS was configured and built using the
4414    ``--enable-multiprocessing`` option.
4415
4416.. index:: CONFIGURE_MP_NODE_NUMBER
4417
4418.. _CONFIGURE_MP_NODE_NUMBER:
4419
4420CONFIGURE_MP_NODE_NUMBER
4421------------------------
4422
4423CONSTANT:
4424    ``CONFIGURE_MP_NODE_NUMBER``
4425
4426DATA TYPE:
4427    Unsigned integer (``uint32_t``).
4428
4429RANGE:
4430    Positive.
4431
4432DEFAULT VALUE:
4433    The default value is ``NODE_NUMBER``, which is assumed to be set by the
4434    compilation environment.
4435
4436DESCRIPTION:
4437    ``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
4438    multiprocessor system.
4439
4440NOTES:
4441    In the RTEMS Multiprocessing Test Suite, the node number is derived from
4442    the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
4443    ``NODE_NUMBER`` set to different values. The test programs behave
4444    differently based upon their node number.
4445
4446.. index:: CONFIGURE_MP_MAXIMUM_NODES
4447
4448.. _CONFIGURE_MP_MAXIMUM_NODES:
4449
4450CONFIGURE_MP_MAXIMUM_NODES
4451--------------------------
4452
4453CONSTANT:
4454    ``CONFIGURE_MP_MAXIMUM_NODES``
4455
4456DATA TYPE:
4457    Unsigned integer (``uint32_t``).
4458
4459RANGE:
4460    Positive.
4461
4462DEFAULT VALUE:
4463    The default value is 2.
4464
4465DESCRIPTION:
4466    ``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
4467    multiprocessor system.
4468
4469NOTES:
4470    None.
4471
4472.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4473
4474.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
4475
4476CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4477-----------------------------------
4478
4479CONSTANT:
4480    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
4481
4482DATA TYPE:
4483    Unsigned integer (``uint32_t``).
4484
4485RANGE:
4486    Positive.
4487
4488DEFAULT VALUE:
4489    The default value is 32.
4490
4491DESCRIPTION:
4492    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
4493    concurrently active global objects in a multiprocessor system.
4494
4495NOTES:
4496    This value corresponds to the total number of objects which can be created
4497    with the ``RTEMS_GLOBAL`` attribute.
4498
4499.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
4500
4501.. _CONFIGURE_MP_MAXIMUM_PROXIES:
4502
4503CONFIGURE_MP_MAXIMUM_PROXIES
4504----------------------------
4505
4506CONSTANT:
4507    ``CONFIGURE_MP_MAXIMUM_PROXIES``
4508
4509DATA TYPE:
4510    Unsigned integer (``uint32_t``).
4511
4512RANGE:
4513    Undefined or positive.
4514
4515DEFAULT VALUE:
4516    The default value is 32.
4517
4518DESCRIPTION:
4519    ``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
4520    active thread/task proxies on this node in a multiprocessor system.
4521
4522NOTES:
4523    Since a proxy is used to represent a remote task/thread which is blocking
4524    on this node. This configuration parameter reflects the maximum number of
4525    remote tasks/threads which can be blocked on objects on this node.
4526
4527.. COMMENT: XXX - add xref to proxy discussion in MP chapter
4528
4529.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
4530
4531.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
4532
4533CONFIGURE_MP_MPCI_TABLE_POINTER
4534-------------------------------
4535
4536CONSTANT:
4537    ``CONFIGURE_MP_MPCI_TABLE_POINTER``
4538
4539DATA TYPE:
4540    pointer to ``rtems_mpci_table``
4541
4542RANGE:
4543    undefined or valid pointer
4544
4545DEFAULT VALUE:
4546    This is not defined by default.
4547
4548DESCRIPTION:
4549    ``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
4550    Configuration Table.  The default value of this field is``&MPCI_table``.
4551
4552NOTES:
4553    RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
4554    Multiprocessor System assuming the BSP provides the proper set of
4555    supporting methods.
4556
4557.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4558
4559.. _CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE:
4560
4561CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4562---------------------------------------
4563
4564CONSTANT:
4565    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE``
4566
4567DATA TYPE:
4568    Boolean feature macro.
4569
4570RANGE:
4571    Defined or undefined.
4572
4573DEFAULT VALUE:
4574    This is not defined by default.
4575
4576DESCRIPTION:
4577    ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE`` is defined if the application
4578    wishes to provide their own Multiprocessing Configuration Table.  The
4579    generated table is named ``Multiprocessing_configuration``.
4580
4581NOTES:
4582    This is a configuration parameter which is very unlikely to be used by an
4583    application. If you find yourself wanting to use it in an application,
4584    please reconsider and discuss this on the RTEMS Users mailing list.
4585
4586Ada Tasks
4587=========
4588
4589This section defines the system configuration parameters supported by
4590``<rtems/confdefs.h>`` related to configuring RTEMS to support a task using Ada
4591tasking with GNAT/RTEMS.
4592
4593These configuration parameters are only available when RTEMS is built with the
4594``--enable-ada`` configure option and the application specifies
4595``CONFIGURE_GNAT_RTEMS``.
4596
4597Additionally RTEMS includes an Ada language binding to the Classic API which
4598has a test suite. This test suite is enabled only when``--enable-tests`` and
4599``--enable-expada`` are specified on the configure command.
4600
4601.. index:: CONFIGURE_GNAT_RTEMS
4602
4603.. _CONFIGURE_GNAT_RTEMS:
4604
4605CONFIGURE_GNAT_RTEMS
4606--------------------
4607
4608CONSTANT:
4609    ``CONFIGURE_GNAT_RTEMS``
4610
4611DATA TYPE:
4612    Boolean feature macro.
4613
4614RANGE:
4615    Defined or undefined.
4616
4617DEFAULT VALUE:
4618    This is not defined by default.
4619
4620DESCRIPTION:
4621    ``CONFIGURE_GNAT_RTEMS`` is defined to inform RTEMS that the GNAT Ada
4622    run-time is to be used by the application.
4623
4624NOTES:
4625    This configuration parameter is critical as it makes``<rtems/confdefs.h>``
4626    configure the resources (POSIX API Threads, Mutexes, Condition Variables,
4627    and Keys) used implicitly by the GNAT run-time.
4628
4629.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
4630
4631.. _CONFIGURE_MAXIMUM_ADA_TASKS:
4632
4633CONFIGURE_MAXIMUM_ADA_TASKS
4634---------------------------
4635
4636CONSTANT:
4637    ``CONFIGURE_MAXIMUM_ADA_TASKS``
4638
4639DATA TYPE:
4640    Unsigned integer (``uint32_t``).
4641
4642RANGE:
4643    Undefined or positive.
4644
4645DEFAULT VALUE:
4646    If ``CONFIGURE_GNAT_RTEMS`` is defined, then the default value is 20,
4647    otherwise the default value is 0.
4648
4649DESCRIPTION:
4650    ``CONFIGURE_MAXIMUM_ADA_TASKS`` is the number of Ada tasks that can be
4651    concurrently active in the system.
4652
4653NOTES:
4654    None.
4655
4656.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4657
4658.. _CONFIGURE_MAXIMUM_FAKE_ADA_TASKS:
4659
4660CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4661--------------------------------
4662
4663CONSTANT:
4664    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS``
4665
4666DATA TYPE:
4667    Unsigned integer (``uint32_t``).
4668
4669RANGE:
4670    Zero or positive.
4671
4672DEFAULT VALUE:
4673    The default value is 0.
4674
4675DESCRIPTION:
4676    ``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS`` is the number of *fake* Ada tasks that
4677    can be concurrently active in the system.  A *fake* Ada task is a non-Ada
4678    task that makes calls back into Ada code and thus implicitly uses the Ada
4679    run-time.
4680
4681NOTES:
4682    None.
4683
4684PCI Library
4685===========
4686
4687This section defines the system configuration parameters supported by
4688``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
4689
4690The PCI Library startup behaviour can be configured in four different ways
4691depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
4692
4693.. index:: PCI_LIB_AUTO
4694
4695``PCI_LIB_AUTO``
4696  Used to enable the PCI auto configuration software. PCI will be automatically
4697  probed, PCI buses enumerated, all devices and bridges will be initialized
4698  using Plug & Play software routines. The PCI device tree will be populated
4699  based on the PCI devices found in the system, PCI devices will be configured
4700  by allocating address region resources automatically in PCI space according
4701  to the BSP or host bridge driver set up.
4702
4703.. index:: PCI_LIB_READ
4704
4705``PCI_LIB_READ``
4706  Used to enable the PCI read configuration software. The current PCI
4707  configuration is read to create the RAM representation (the PCI device tree)
4708  of the PCI devices present. PCI devices are assumed to already have been
4709  initialized and PCI buses enumerated, it is therefore required that a BIOS or
4710  a boot loader has set up configuration space prior to booting into RTEMS.
4711
4712.. index:: PCI_LIB_STATIC
4713
4714``PCI_LIB_STATIC``
4715  Used to enable the PCI static configuration software. The user provides a PCI
4716  tree with information how all PCI devices are to be configured at compile
4717  time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
4718  library will not probe PCI for devices, instead it will assume that all
4719  devices defined by the user are present, it will enumerate the PCI buses and
4720  configure all PCI devices in static configuration accordingly. Since probe
4721  and allocation software is not needed the startup is faster, has smaller
4722  footprint and does not require dynamic memory allocation.
4723
4724.. index:: PCI_LIB_PERIPHERAL
4725
4726``PCI_LIB_PERIPHERAL``
4727  Used to enable the PCI peripheral configuration. It is similar to
4728  ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
4729  devices since PCI peripherals are not allowed to access PCI configuration
4730  space.
4731
4732Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
4733defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
4734Plug & Play is not performed.
4735
4736Go Tasks
4737========
4738
4739.. index:: CONFIGURE_ENABLE_GO
4740
4741.. _CONFIGURE_ENABLE_GO:
4742
4743CONFIGURE_ENABLE_GO
4744-------------------
4745
4746CONSTANT:
4747    ``CONFIGURE_ENABLE_GO``
4748
4749DATA TYPE:
4750    Boolean feature macro.
4751
4752RANGE:
4753    Defined or undefined.
4754
4755DEFAULT VALUE:
4756    This is not defined by default.
4757
4758DESCRIPTION:
4759    ``CONFIGURE_ENABLE_GO`` is defined to inform RTEMS that the Go run-time is
4760    to be used by the application.
4761
4762NOTES:
4763    The Go language support is experimental
4764
4765.. index:: CONFIGURE_MAXIMUM_GOROUTINES
4766
4767.. _CONFIGURE_MAXIMUM_GOROUTINES:
4768
4769CONFIGURE_MAXIMUM_GOROUTINES
4770----------------------------
4771
4772CONSTANT:
4773    ``CONFIGURE_MAXIMUM_GOROUTINES``
4774
4775DATA TYPE:
4776    Unsigned integer (``uint32_t``).
4777
4778RANGE:
4779    Zero or positive.
4780
4781DEFAULT VALUE:
4782    The default value is 400
4783
4784DESCRIPTION:
4785    ``CONFIGURE_MAXIMUM_GOROUTINES`` is defined to specify the maximum number
4786    of Go routines.
4787
4788NOTES:
4789    The Go language support is experimental
4790
4791.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
4792
4793.. _CONFIGURE_MAXIMUM_GO_CHANNELS:
4794
4795CONFIGURE_MAXIMUM_GO_CHANNELS
4796-----------------------------
4797
4798CONSTANT:
4799    ``CONFIGURE_MAXIMUM_GO_CHANNELS``
4800
4801DATA TYPE:
4802    Unsigned integer (``uint32_t``).
4803
4804RANGE:
4805    Zero or positive.
4806
4807DEFAULT VALUE:
4808    The default value is 500
4809
4810DESCRIPTION:
4811    ``CONFIGURE_MAXIMUM_GO_CHANNELS`` is defined to specify the maximum number
4812    of Go channels.
4813
4814NOTES:
4815    The Go language support is experimental
4816
4817Obsolete Configuration Options
4818==============================
4819
4820.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
4821
4822CONFIGURE_BDBUF_BUFFER_COUNT
4823----------------------------
4824
4825This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4826RTEMS 4.10.0.
4827
4828.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
4829
4830CONFIGURE_BDBUF_BUFFER_SIZE
4831---------------------------
4832
4833This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4834RTEMS 4.10.0.
4835
4836.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
4837
4838CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
4839--------------------------------------
4840
4841This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
4842RTEMS 5.1.
4843
4844.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
4845
4846CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
4847-------------------------------------
4848
4849This configuration option is obsolete since RTEMS 5.1.
4850
4851.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
4852
4853CONFIGURE_HAS_OWN_BDBUF_TABLE
4854-----------------------------
4855
4856This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
4857RTEMS 4.10.0.
4858
4859.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
4860
4861CONFIGURE_HAS_OWN_MOUNT_TABLE
4862-----------------------------
4863
4864This configuration option is obsolete since RTEMS 5.1.
4865
4866.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4867
4868CONFIGURE_NUMBER_OF_TERMIOS_PORTS
4869---------------------------------
4870
4871This configuration option is obsolete since RTEMS 5.1.
4872
4873.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
4874
4875CONFIGURE_MAXIMUM_POSIX_BARRIERS
4876--------------------------------
4877
4878This configuration option is obsolete since RTEMS 5.1.
4879
4880.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
4881
4882CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
4883-------------------------------------------
4884
4885This configuration option is obsolete since RTEMS 5.1.
4886
4887.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
4888
4889CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
4890-------------------------------
4891
4892This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
4893RTEMS 5.1.
4894
4895.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
4896
4897CONFIGURE_MAXIMUM_POSIX_MUTEXES
4898-------------------------------
4899
4900This configuration option is obsolete since RTEMS 5.1.
4901
4902.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
4903
4904CONFIGURE_MAXIMUM_POSIX_RWLOCKS
4905-------------------------------
4906
4907This configuration option is obsolete since RTEMS 5.1.
4908
4909.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
4910
4911CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
4912---------------------------------
4913
4914This configuration option is obsolete since RTEMS 5.1.
4915
4916.. index:: CONFIGURE_TERMIOS_DISABLED
4917
4918CONFIGURE_TERMIOS_DISABLED
4919--------------------------
4920
4921This configuration option is obsolete since RTEMS 5.1.
4922
4923.. index:: CONFIGURE_SMP_APPLICATION
4924
4925CONFIGURE_SMP_APPLICATION
4926-------------------------
4927
4928This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4929RTEMS 5.1.
4930
4931.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
4932
4933CONFIGURE_SMP_MAXIMUM_PROCESSORS
4934--------------------------------
4935
4936This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
4937RTEMS 5.1.  See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
Note: See TracBrowser for help on using the repository browser.