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

5
Last change on this file since e57733a was e57733a, checked in by Sebastian Huber <sebastian.huber@…>, on 02/10/20 at 09:28:49

c-user: Document CONFIGURE_DIRTY_MEMORY

Close #3843.

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