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

5
Last change on this file since 806806c was 806806c, checked in by Sebastian Huber <sebastian.huber@…>, on 08/07/18 at 06:37:22

c-user: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE

Close #3434.

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