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

5
Last change on this file since 7a414f9 was 7a414f9, checked in by Sebastian Huber <sebastian.huber@…>, on 03/06/20 at 13:32:37

c-user: Sort configuration options alphabetically

Update #3836.

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