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

5
Last change on this file since 6c56401 was 6c56401, checked in by Chris Johns <chrisj@…>, on 11/12/17 at 03:34:48

c-user: Fix index locations.

Update #3229.

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