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

5
Last change on this file since c68af1b was c68af1b, checked in by Sebastian Huber <sebastian.huber@…>, on 10/30/18 at 06:46:39

Document CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS

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