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

5
Last change on this file since 3384994 was 3384994, checked in by Chris Johns <chrisj@…>, on 11/13/17 at 02:25:18

Clean up sphinx warnings.

  • Fix minor formatting issues.
  • Fix reference the gloassary TLS using ':term:'.
  • Make sure nothing is between an anchor and the heading where ':ref:' references the anchor. This meant moving all the recently added '.. index::' entries.

Update #3232.
Update #3229.

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