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

5
Last change on this file since 988e7ca was 988e7ca, checked in by Sebastian Huber <sebastian.huber@…>, on 03/06/20 at 12:52:17

c-user: Clarify message queue configuration

Update #3836.

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