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

5
Last change on this file since 8fd9e62 was 8fd9e62, checked in by Sebastian Huber <sebastian.huber@…>, on 08/07/18 at 06:04:28

c-user: Sort POSIX configuration options

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