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

5
Last change on this file since ac0eaff was 6c56401, checked in by Chris Johns <chrisj@…>, on 11/12/17 at 03:34:48

c-user: Fix index locations.

Update #3229.

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