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

5
Last change on this file since 93d5323 was 93d5323, checked in by Sebastian Huber <sebastian.huber@…>, on 12/11/19 at 14:59:41

c-user: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE

Obsolete the CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE configuration
option.

Update #3735.

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