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

5
Last change on this file since 11040cf was 11040cf, checked in by Sebastian Huber <sebastian.huber@…>, on 09/17/18 at 09:58:03

c-user: Remove CONFIGURE_HAS_OWN_MOUNT_TABLE

Close #3488.

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