source: rtems-docs/c-user/config/index.rst @ a9e6a1d

5
Last change on this file since a9e6a1d was a9e6a1d, checked in by Sebastian Huber <sebastian.huber@…>, on 03/09/20 at 07:47:12

c-user: Move "Classic API Initialization Task Configuration"

Update #3836.

  • Property mode set to 100644
File size: 89.9 KB
Line 
1.. SPDX-License-Identifier: CC-BY-SA-4.0
2
3.. Copyright (C) 2010 Gedare Bloom
4.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
5
6.. index:: configuring a system
7.. _Configuring a System:
8
9Configuring a System
10********************
11
12.. toctree::
13
14    intro
15    general
16    classic-api
17    classic-init-task
18
19POSIX API Configuration
20=======================
21
22The parameters in this section are used to configure resources for the POSIX
23API supported by RTEMS.  Most POSIX API objects are available by default since
24RTEMS 5.1.  The queued signals and timers are only available if RTEMS was built
25with the ``--enable-posix`` build configuration option.
26
27.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
28
29.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
30
31CONFIGURE_MAXIMUM_POSIX_KEYS
32----------------------------
33
34CONSTANT:
35    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
36
37DATA TYPE:
38    Unsigned integer (``uint32_t``).
39
40RANGE:
41    Zero or positive.
42
43DEFAULT VALUE:
44    The default value is 0.
45
46DESCRIPTION:
47    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
48    that can be concurrently active.
49
50NOTES:
51    This object class can be configured in unlimited allocation mode.
52
53.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
54
55.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS:
56
57CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
58---------------------------------------
59
60CONSTANT:
61    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
62
63DATA TYPE:
64    Unsigned integer (``uint32_t``).
65
66RANGE:
67    Zero or positive.
68
69DEFAULT VALUE:
70    The default value is
71    :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS <CONFIGURE_MAXIMUM_POSIX_KEYS>` *
72    :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>` +
73    :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
74
75DESCRIPTION:
76    ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS`` is the maximum number of key
77    value pairs used by POSIX API Keys that can be concurrently active.
78
79NOTES:
80    This object class can be configured in unlimited allocation mode.
81
82    A key value pair is created by :c:func:`pthread_setspecific` if the value
83    is not :c:macro:`NULL`, otherwise it is deleted.
84
85.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
86
87.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
88
89CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
90--------------------------------------
91
92CONSTANT:
93    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
94
95DATA TYPE:
96    Unsigned integer (``uint32_t``).
97
98RANGE:
99    Zero or positive.
100
101DEFAULT VALUE:
102    The default value is 0.
103
104DESCRIPTION:
105    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
106    API Message Queues that can be concurrently active.
107
108NOTES:
109    This object class can be configured in unlimited allocation mode.  You have
110    to account for the memory used to store the messages of each message queue,
111    see :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
112
113.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
114
115.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
116
117CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
118--------------------------------------
119
120CONSTANT:
121    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
122
123DATA TYPE:
124    Unsigned integer (``uint32_t``).
125
126RANGE:
127    Zero or positive.
128
129DEFAULT VALUE:
130    The default value is 0.
131
132DESCRIPTION:
133    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
134    API Queued Signals that can be concurrently active.
135
136NOTES:
137    Unlimited objects are not available for queued signals.
138
139    Queued signals are only available if RTEMS was built with the
140    ``--enable-posix`` build configuration option.
141
142.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
143
144.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
145
146CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
147----------------------------------
148
149CONSTANT:
150    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
151
152DATA TYPE:
153    Unsigned integer (``uint32_t``).
154
155RANGE:
156    Zero or positive.
157
158DEFAULT VALUE:
159    The default value is 0.
160
161DESCRIPTION:
162    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
163    Named Semaphores that can be concurrently active.
164
165NOTES:
166    This object class can be configured in unlimited allocation mode.
167
168    Named semaphores are created with ``sem_open()``.  Semaphores initialized
169    with ``sem_init()`` are not affected by this configuration option since the
170    storage space for these semaphores is user-provided.
171
172.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
173
174.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
175
176CONFIGURE_MAXIMUM_POSIX_TIMERS
177------------------------------
178
179CONSTANT:
180    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
181
182DATA TYPE:
183    Unsigned integer (``uint32_t``).
184
185RANGE:
186    Zero or positive.
187
188DEFAULT VALUE:
189    The default value is 0.
190
191DESCRIPTION:
192    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
193    Timers that can be concurrently active.
194
195NOTES:
196    This object class can be configured in unlimited allocation mode.
197
198    Timers are only available if RTEMS was built with the
199    ``--enable-posix`` build configuration option.
200
201.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
202
203.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
204
205CONFIGURE_MAXIMUM_POSIX_THREADS
206-------------------------------
207
208CONSTANT:
209    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
210
211DATA TYPE:
212    Unsigned integer (``uint32_t``).
213
214RANGE:
215    Zero or positive.
216
217DEFAULT VALUE:
218    The default value is 0.
219
220DESCRIPTION:
221    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
222    Threads that can be concurrently active.
223
224NOTES:
225    This object class can be configured in unlimited allocation mode.
226
227    This calculations for the required memory in the RTEMS Workspace for
228    threads assume that each thread has a minimum stack size and has floating
229    point support enabled.  The configuration parameter
230    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
231    requirements *ABOVE* the minimum size required.  See :ref:`Reserve
232    Task/Thread Stack Memory Above Minimum` for more information about
233    ``CONFIGURE_EXTRA_TASK_STACKS``.
234
235    The maximum number of Classic API Tasks is specified by
236    :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>`.
237
238    All POSIX threads have floating point enabled.
239
240.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
241.. index:: minimum POSIX thread stack size
242
243.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
244
245CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
246-----------------------------------------
247
248CONSTANT:
249    ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
250
251DATA TYPE:
252    Unsigned integer (``size_t``).
253
254RANGE:
255    Positive.
256
257DEFAULT VALUE:
258    The default value is two times the value of
259    :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE <CONFIGURE_MINIMUM_TASK_STACK_SIZE>`.
260
261DESCRIPTION:
262    This configuration parameter defines the minimum stack size in bytes for
263    every POSIX thread in the system.
264
265NOTES:
266    None.
267
268POSIX Initialization Thread Configuration
269=========================================
270
271The ``<rtems/confdefs.h>`` configuration system can automatically generate a
272POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
273a single entry.  The following parameters control the generation of that table.
274
275.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
276
277.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
278
279CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
280---------------------------------------
281
282CONSTANT:
283    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
284
285DATA TYPE:
286    POSIX thread function pointer (``void *(*entry_point)(void *)``).
287
288RANGE:
289    Undefined or a valid POSIX thread function pointer.
290
291DEFAULT VALUE:
292    The default value is ``POSIX_Init``.
293
294DESCRIPTION:
295    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
296    (a.k.a. function name) of the single initialization thread defined by the
297    POSIX API Initialization Threads Table.
298
299NOTES:
300    The user must implement the function ``POSIX_Init`` or the function name
301    provided in this configuration parameter.
302
303.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
304
305.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
306
307CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
308--------------------------------------
309
310CONSTANT:
311    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
312
313DATA TYPE:
314    Unsigned integer (``size_t``).
315
316RANGE:
317    Zero or positive.
318
319DEFAULT VALUE:
320    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
321
322DESCRIPTION:
323    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
324    initialization thread defined by the POSIX API Initialization Threads
325    Table.
326
327NOTES:
328    If the stack size specified is greater than the configured minimum, it must
329    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
330    Task/Thread Stack Memory Above Minimum` for more information about
331    ``CONFIGURE_EXTRA_TASK_STACKS``.
332
333.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
334
335.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
336
337CONFIGURE_POSIX_INIT_THREAD_TABLE
338---------------------------------
339
340CONSTANT:
341    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
342
343DATA TYPE:
344    Boolean feature macro.
345
346RANGE:
347    Defined or undefined.
348
349DEFAULT VALUE:
350    This field is not defined by default, as the user MUST select their own API
351    for initialization tasks.
352
353DESCRIPTION:
354    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
355    a POSIX API Initialization Threads Table.  The table built by
356    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
357    is sufficient for applications which initialization the system from a
358    single task.
359
360    By default, this field is not defined as the user MUST select their own API
361    for initialization tasks.
362
363NOTES:
364    The application may choose to use the initialization tasks or threads table
365    from another API.
366
367    A compile time error will be generated if the user does not configure any
368    initialization tasks or threads.
369
370Task Stack Allocator Configuration
371==================================
372
373RTEMS allows the application or BSP to define its own allocation and
374deallocation methods for task stacks. This can be used to place task stacks in
375special areas of memory or to utilize a Memory Management Unit so that stack
376overflows are detected in hardware.
377
378.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
379.. index:: task stack allocator
380
381.. _CONFIGURE_TASK_STACK_ALLOCATOR:
382
383CONFIGURE_TASK_STACK_ALLOCATOR
384------------------------------
385
386CONSTANT:
387    ``CONFIGURE_TASK_STACK_ALLOCATOR``
388
389DATA TYPE:
390    Function pointer.
391
392RANGE:
393    Undefined or valid function pointer.
394
395DEFAULT VALUE:
396    The default value is ``_Workspace_Allocate``, which indicates that task
397    stacks will be allocated from the RTEMS Workspace.
398
399DESCRIPTION:
400    ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
401    allocate task stacks.
402
403NOTES:
404    A correctly configured system must configure the following to be consistent:
405
406- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
407
408- ``CONFIGURE_TASK_STACK_ALLOCATOR``
409
410- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
411
412.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
413
414.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
415
416CONFIGURE_TASK_STACK_ALLOCATOR_INIT
417-----------------------------------
418
419CONSTANT:
420    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
421
422DATA TYPE:
423    Function pointer.
424
425RANGE:
426    Undefined, NULL or valid function pointer.
427
428DEFAULT VALUE:
429    The default value is NULL, which indicates that task stacks will be
430    allocated from the RTEMS Workspace.
431
432DESCRIPTION:
433    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
434    method for an application or BSP specific task stack allocation
435    implementation.
436
437NOTES:
438    A correctly configured system must configure the following to be consistent:
439
440- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
441
442- ``CONFIGURE_TASK_STACK_ALLOCATOR``
443
444- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
445
446.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
447.. index:: task stack deallocator
448
449.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
450
451CONFIGURE_TASK_STACK_DEALLOCATOR
452--------------------------------
453
454CONSTANT:
455    ``CONFIGURE_TASK_STACK_DEALLOCATOR``
456
457DATA TYPE:
458    Function pointer.
459
460RANGE:
461    Undefined or valid function pointer.
462
463DEFAULT VALUE:
464    The default value is ``_Workspace_Free``, which indicates that task stacks
465    will be allocated from the RTEMS Workspace.
466
467DESCRIPTION:
468    ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
469    to free task stacks.
470
471NOTES:
472    A correctly configured system must configure the following to be consistent:
473
474- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
475
476- ``CONFIGURE_TASK_STACK_ALLOCATOR``
477
478- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
479
480Message Queue Buffer Configuration
481==================================
482
483This section describes the configuration parameters related to specifying the
484amount of memory reserved for message queue message buffers.  See
485:ref:`CONFIGURE_MAXIMUM_MESSAGE_QUEUES` and
486:ref:`CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`.
487
488.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
489.. index:: configure message queue buffer memory
490
491.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
492
493CONFIGURE_MESSAGE_BUFFER_MEMORY
494-------------------------------
495
496CONSTANT:
497    ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
498
499DATA TYPE:
500    integer summation macro
501
502RANGE:
503    undefined (zero) or calculation resulting in a positive integer
504
505DEFAULT VALUE:
506    This is not defined by default, and zero (0) memory is reserved.
507
508DESCRIPTION:
509    This macro is set to the number of bytes the application requires to be
510    reserved for pending Classic API Message Queue buffers.
511
512NOTES:
513    The following illustrates how the help macro
514    :ref:`CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE` can be used to assist in
515    calculating the message buffer memory required.  In this example, there are
516    two message queues used in this application.  The first message queue has
517    maximum of 24 pending messages with the message structure defined by the
518    type ``one_message_type``.  The other message queue has maximum of 500
519    pending messages with the message structure defined by the type
520    ``other_message_type``.
521
522    .. code-block:: c
523
524        #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
525                    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
526                         24, sizeof(one_message_type) \
527                     ) + \
528                     CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
529                         500, sizeof(other_message_type) \
530                     )
531
532.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
533.. index:: memory for a single message queue's buffers
534
535.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
536
537CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
538-----------------------------------
539
540CONSTANT:
541    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
542
543DATA TYPE:
544    Unsigned integer (``size_t``).
545
546RANGE:
547    Positive.
548
549DEFAULT VALUE:
550    The default value is None.
551
552DESCRIPTION:
553    This is a helper macro which is used to assist in computing the total
554    amount of memory required for message buffers.  Each message queue will
555    have its own configuration with maximum message size and maximum number of
556    pending messages.
557
558    The interface for this macro is as follows:
559
560    .. code-block:: c
561
562        CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
563
564    Where ``max_messages`` is the maximum number of pending messages and
565    ``size_per`` is the size in bytes of the user message.
566
567NOTES:
568    This macro is only used in support of :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
569
570Filesystem Configuration
571========================
572
573By default, the In-Memory Filesystem (IMFS) is used as the base filesystem (also
574known as root filesystem).  In order to save some memory for your application,
575you can disable the filesystem support with the
576:ref:`CONFIGURE_APPLICATION_DISABLE_FILESYSTEM` configuration option.
577Alternatively, you can strip down the features of the base filesystem with the
578:ref:`CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM` and
579:ref:`CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM` configuration options.  These
580three configuration options are mutually exclusive.  They are intended for an
581advanced application configuration.
582
583Features of the IMFS can be disabled and enabled with the following
584configuration options:
585
586* :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`
587
588* :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`
589
590* :ref:`CONFIGURE_IMFS_DISABLE_LINK`
591
592* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD`
593
594* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`
595
596* :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`
597
598* :ref:`CONFIGURE_IMFS_DISABLE_READDIR`
599
600* :ref:`CONFIGURE_IMFS_DISABLE_READLINK`
601
602* :ref:`CONFIGURE_IMFS_DISABLE_RENAME`
603
604* :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`
605
606* :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`
607
608* :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`
609
610* :ref:`CONFIGURE_IMFS_DISABLE_UTIME`
611
612* :ref:`CONFIGURE_IMFS_ENABLE_MKFIFO`
613
614.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
615
616.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
617
618CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
619----------------------------------------
620
621CONSTANT:
622    ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
623
624DATA TYPE:
625    Boolean feature macro.
626
627RANGE:
628    Defined or undefined.
629
630DEFAULT VALUE:
631    This is not defined by default. If no other root file system configuration
632    parameters are specified, the IMFS will be used as the root file system.
633
634DESCRIPTION:
635    This configuration parameter is defined if the application dose not intend
636    to use any kind of filesystem support. This include the device
637    infrastructure necessary to support ``printf()``.
638
639NOTES:
640    None.
641
642.. index:: CONFIGURE_IMFS_ENABLE_MKFIFO
643
644.. _CONFIGURE_IMFS_ENABLE_MKFIFO:
645
646CONFIGURE_IMFS_ENABLE_MKFIFO
647----------------------------
648
649CONSTANT:
650    ``CONFIGURE_IMFS_ENABLE_MKFIFO``
651
652DATA TYPE:
653    Boolean feature macro.
654
655RANGE:
656    Defined or undefined.
657
658DEFAULT VALUE:
659    This is not defined by default.
660
661DESCRIPTION:
662    In case this configuration option is defined, then the support to make FIFOs
663    is enabled in the root IMFS.
664
665.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
666
667.. _CONFIGURE_IMFS_DISABLE_CHMOD:
668
669CONFIGURE_IMFS_DISABLE_CHMOD
670----------------------------
671
672CONSTANT:
673    ``CONFIGURE_IMFS_DISABLE_CHMOD``
674
675DATA TYPE:
676    Boolean feature macro.
677
678RANGE:
679    Defined or undefined.
680
681DEFAULT VALUE:
682    This is not defined by default.
683
684DESCRIPTION:
685    In case this configuration option is defined, then the support to change
686    the mode is disabled in the root IMFS.
687
688.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
689
690.. _CONFIGURE_IMFS_DISABLE_CHOWN:
691
692CONFIGURE_IMFS_DISABLE_CHOWN
693----------------------------
694
695CONSTANT:
696    ``CONFIGURE_IMFS_DISABLE_CHOWN``
697
698DATA TYPE:
699    Boolean feature macro.
700
701RANGE:
702    Defined or undefined.
703
704DEFAULT VALUE:
705    This is not defined by default.
706
707DESCRIPTION:
708    In case this configuration option is defined, then the support to change
709    the owner is disabled in the root IMFS.
710
711.. index:: CONFIGURE_IMFS_DISABLE_LINK
712
713.. _CONFIGURE_IMFS_DISABLE_LINK:
714
715CONFIGURE_IMFS_DISABLE_LINK
716---------------------------
717
718CONSTANT:
719    ``CONFIGURE_IMFS_DISABLE_LINK``
720
721DATA TYPE:
722    Boolean feature macro.
723
724RANGE:
725    Defined or undefined.
726
727DEFAULT VALUE:
728    This is not defined by default.
729
730DESCRIPTION:
731    In case this configuration option is defined, then the support to create
732    hard links is disabled in the root IMFS.
733
734.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
735
736.. _CONFIGURE_IMFS_DISABLE_MKNOD:
737
738CONFIGURE_IMFS_DISABLE_MKNOD
739----------------------------
740
741CONSTANT:
742    ``CONFIGURE_IMFS_DISABLE_MKNOD``
743
744DATA TYPE:
745    Boolean feature macro.
746
747RANGE:
748    Defined or undefined.
749
750DEFAULT VALUE:
751    This is not defined by default.
752
753DESCRIPTION:
754    In case this configuration option is defined, then the support to make
755    directories, devices, regular files and FIFOs is disabled in the root IMFS.
756
757.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
758
759.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
760
761CONFIGURE_IMFS_DISABLE_MKNOD_FILE
762---------------------------------
763
764CONSTANT:
765    ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
766
767DATA TYPE:
768    Boolean feature macro.
769
770RANGE:
771    Defined or undefined.
772
773DEFAULT VALUE:
774    This is not defined by default.
775
776DESCRIPTION:
777    In case this configuration option is defined, then the support to make
778    regular files is disabled in the root IMFS.
779
780.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
781
782.. _CONFIGURE_IMFS_DISABLE_MOUNT:
783
784CONFIGURE_IMFS_DISABLE_MOUNT
785----------------------------
786
787CONSTANT:
788    ``CONFIGURE_IMFS_DISABLE_MOUNT``
789
790DATA TYPE:
791    Boolean feature macro.
792
793RANGE:
794    Defined or undefined.
795
796DEFAULT VALUE:
797    This is not defined by default.
798
799DESCRIPTION:
800    In case this configuration option is defined, then the support to mount
801    other file systems is disabled in the root IMFS.
802
803.. index:: CONFIGURE_IMFS_DISABLE_READDIR
804
805.. _CONFIGURE_IMFS_DISABLE_READDIR:
806
807CONFIGURE_IMFS_DISABLE_READDIR
808------------------------------
809
810CONSTANT:
811    ``CONFIGURE_IMFS_DISABLE_READDIR``
812
813DATA TYPE:
814    Boolean feature macro.
815
816RANGE:
817    Defined or undefined.
818
819DEFAULT VALUE:
820    This is not defined by default.
821
822DESCRIPTION:
823    In case this configuration option is defined, then the support to read a
824    directory is disabled in the root IMFS.  It is still possible to open nodes
825    in a directory.
826
827.. index:: CONFIGURE_IMFS_DISABLE_READLINK
828
829.. _CONFIGURE_IMFS_DISABLE_READLINK:
830
831CONFIGURE_IMFS_DISABLE_READLINK
832-------------------------------
833
834CONSTANT:
835    ``CONFIGURE_IMFS_DISABLE_READLINK``
836
837DATA TYPE:
838    Boolean feature macro.
839
840RANGE:
841    Defined or undefined.
842
843DEFAULT VALUE:
844    This is not defined by default.
845
846DESCRIPTION:
847    In case this configuration option is defined, then the support to read
848    symbolic links is disabled in the root IMFS.
849
850.. index:: CONFIGURE_IMFS_DISABLE_RENAME
851
852.. _CONFIGURE_IMFS_DISABLE_RENAME:
853
854CONFIGURE_IMFS_DISABLE_RENAME
855-----------------------------
856
857CONSTANT:
858    ``CONFIGURE_IMFS_DISABLE_RENAME``
859
860DATA TYPE:
861    Boolean feature macro.
862
863RANGE:
864    Defined or undefined.
865
866DEFAULT VALUE:
867    This is not defined by default.
868
869DESCRIPTION:
870    In case this configuration option is defined, then the support to rename
871    nodes is disabled in the root IMFS.
872
873.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
874
875.. _CONFIGURE_IMFS_DISABLE_RMNOD:
876
877CONFIGURE_IMFS_DISABLE_RMNOD
878----------------------------
879
880CONSTANT:
881    ``CONFIGURE_IMFS_DISABLE_RMNOD``
882
883DATA TYPE:
884    Boolean feature macro.
885
886RANGE:
887    Defined or undefined.
888
889DEFAULT VALUE:
890    This is not defined by default.
891
892DESCRIPTION:
893    In case this configuration option is defined, then the support to remove
894    nodes is disabled in the root IMFS.
895
896.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
897
898.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
899
900CONFIGURE_IMFS_DISABLE_SYMLINK
901------------------------------
902
903CONSTANT:
904    ``CONFIGURE_IMFS_DISABLE_SYMLINK``
905
906DATA TYPE:
907    Boolean feature macro.
908
909RANGE:
910    Defined or undefined.
911
912DEFAULT VALUE:
913    This is not defined by default.
914
915DESCRIPTION:
916    In case this configuration option is defined, then the support to create
917    symbolic links is disabled in the root IMFS.
918
919.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
920
921.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
922
923CONFIGURE_IMFS_DISABLE_UNMOUNT
924------------------------------
925
926CONSTANT:
927    ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
928
929DATA TYPE:
930    Boolean feature macro.
931
932RANGE:
933    Defined or undefined.
934
935DEFAULT VALUE:
936    This is not defined by default.
937
938DESCRIPTION:
939    In case this configuration option is defined, then the support to unmount
940    file systems is disabled in the root IMFS.
941
942.. index:: CONFIGURE_IMFS_DISABLE_UTIME
943
944.. _CONFIGURE_IMFS_DISABLE_UTIME:
945
946CONFIGURE_IMFS_DISABLE_UTIME
947----------------------------
948
949CONSTANT:
950    ``CONFIGURE_IMFS_DISABLE_UTIME``
951
952DATA TYPE:
953    Boolean feature macro.
954
955RANGE:
956    Defined or undefined.
957
958DEFAULT VALUE:
959    This is not defined by default.
960
961DESCRIPTION:
962    In case this configuration option is defined, then the support to change
963    times is disabled in the root IMFS.
964
965.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
966
967.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
968
969CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
970--------------------------------------
971
972CONSTANT:
973    ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
974
975DATA TYPE:
976    Boolean feature macro.
977
978RANGE:
979    Valid values for this configuration parameter are a power of two (2)
980    between 16 and 512 inclusive.  In other words, valid values are 16, 32, 64,
981    128, 256,and 512.
982
983DEFAULT VALUE:
984    The default IMFS block size is 128 bytes.
985
986DESCRIPTION:
987    This configuration parameter specifies the block size for in-memory files
988    managed by the IMFS. The configured block size has two impacts. The first
989    is the average amount of unused memory in the last block of each file. For
990    example, when the block size is 512, on average one-half of the last block
991    of each file will remain unused and the memory is wasted. In contrast, when
992    the block size is 16, the average unused memory per file is only 8
993    bytes. However, it requires more allocations for the same size file and
994    thus more overhead per block for the dynamic memory management.
995
996    Second, the block size has an impact on the maximum size file that can be
997    stored in the IMFS. With smaller block size, the maximum file size is
998    correspondingly smaller. The following shows the maximum file size possible
999    based on the configured block size:
1000
1001    - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
1002
1003    - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
1004
1005    - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
1006
1007    - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
1008
1009    - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
1010
1011    - when the block size is 512 bytes, the maximum file size is 1,082,195,456
1012      bytes.
1013
1014.. index:: CONFIGURE_MAXIMUM_DEVICES
1015
1016.. _CONFIGURE_MAXIMUM_DEVICES:
1017
1018CONFIGURE_MAXIMUM_DEVICES
1019-------------------------
1020
1021CONSTANT:
1022    ``CONFIGURE_MAXIMUM_DEVICES``
1023
1024DATA TYPE:
1025    Unsigned integer (``uint32_t``).
1026
1027RANGE:
1028    Positive.
1029
1030DEFAULT VALUE:
1031    If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
1032    ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
1033
1034DESCRIPTION:
1035    ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
1036    devices that may be registered in the device file system (devFS).
1037
1038NOTES:
1039    This option is specific to the device file system (devFS) and should not be
1040    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
1041    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
1042    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
1043
1044.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
1045
1046.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
1047
1048CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
1049--------------------------------------
1050
1051CONSTANT:
1052    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
1053
1054DATA TYPE:
1055    Boolean feature macro.
1056
1057RANGE:
1058    Defined or undefined.
1059
1060DEFAULT VALUE:
1061    This is not defined by default. If no other root file system configuration
1062    parameters are specified, the IMFS will be used as the root file system.
1063
1064DESCRIPTION:
1065    This configuration parameter is defined if the application wishes to use
1066    the device-only filesytem as the root file system.
1067
1068NOTES:
1069    The device-only filesystem supports only device nodes and is smaller in
1070    executable code size than the full IMFS and miniIMFS.
1071
1072    The devFS is comparable in functionality to the pseudo-filesystem name
1073    space provided before RTEMS release 4.5.0.
1074
1075.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
1076
1077.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
1078
1079CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
1080-----------------------------------------
1081
1082CONSTANT:
1083    ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
1084
1085DATA TYPE:
1086    Boolean feature macro.
1087
1088RANGE:
1089    Defined or undefined.
1090
1091DEFAULT VALUE:
1092    This is not defined by default.
1093
1094DESCRIPTION:
1095    In case this configuration option is defined, then the following
1096    configuration options will be defined as well
1097
1098    - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
1099
1100    - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
1101
1102    - ``CONFIGURE_IMFS_DISABLE_UTIME``,
1103
1104    - ``CONFIGURE_IMFS_DISABLE_LINK``,
1105
1106    - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
1107
1108    - ``CONFIGURE_IMFS_DISABLE_READLINK``,
1109
1110    - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
1111
1112    - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
1113
1114Block Device Cache Configuration
1115================================
1116
1117This section defines Block Device Cache (bdbuf) related configuration
1118parameters.
1119
1120.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
1121
1122.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
1123
1124CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
1125------------------------------------
1126
1127CONSTANT:
1128    ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
1129
1130DATA TYPE:
1131    Boolean feature macro.
1132
1133RANGE:
1134    Defined or undefined.
1135
1136DEFAULT VALUE:
1137    This is not defined by default.
1138
1139DESCRIPTION:
1140    Provides a Block Device Cache configuration.
1141
1142NOTES:
1143    Each option of the Block Device Cache configuration can be explicitly set
1144    by the user with the configuration options below.  The Block Device Cache
1145    is used for example by the RFS and DOSFS file systems.
1146
1147.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
1148
1149.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
1150
1151CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
1152---------------------------------
1153
1154CONSTANT:
1155    ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
1156
1157DATA TYPE:
1158    Unsigned integer (``size_t``).
1159
1160RANGE:
1161    Positive.
1162
1163DEFAULT VALUE:
1164    The default value is 32768 bytes.
1165
1166DESCRIPTION:
1167    Size of the cache memory in bytes.
1168
1169NOTES:
1170    None.
1171
1172.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
1173
1174.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
1175
1176CONFIGURE_BDBUF_BUFFER_MAX_SIZE
1177-------------------------------
1178
1179CONSTANT:
1180    ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
1181
1182DATA TYPE:
1183    Unsigned integer (``uint32_t``).
1184
1185RANGE:
1186    It must be positive and an integral multiple of the buffer minimum size.
1187
1188DEFAULT VALUE:
1189    The default value is 4096 bytes.
1190
1191DESCRIPTION:
1192    Defines the maximum size of a buffer in bytes.
1193
1194NOTES:
1195    None.
1196
1197.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
1198
1199.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
1200
1201CONFIGURE_BDBUF_BUFFER_MIN_SIZE
1202-------------------------------
1203
1204CONSTANT:
1205    ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
1206
1207DATA TYPE:
1208    Unsigned integer (``uint32_t``).
1209
1210RANGE:
1211    Positive.
1212
1213DEFAULT VALUE:
1214    The default value is 512 bytes.
1215
1216DESCRIPTION:
1217    Defines the minimum size of a buffer in bytes.
1218
1219NOTES:
1220    None.
1221
1222.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
1223
1224.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
1225
1226CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
1227-------------------------------------
1228
1229CONSTANT:
1230    ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
1231
1232DATA TYPE:
1233    Unsigned integer (``uint32_t``).
1234
1235RANGE:
1236    Positive.
1237
1238DEFAULT VALUE:
1239    The default value is 0.
1240
1241DESCRIPTION:
1242    Defines the maximum blocks per read-ahead request.
1243
1244NOTES:
1245    A value of 0 disables the read-ahead task (default).  The read-ahead task
1246    will issue speculative read transfers if a sequential access pattern is
1247    detected.  This can improve the performance on some systems.
1248
1249.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
1250
1251.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
1252
1253CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
1254--------------------------------
1255
1256CONSTANT:
1257    ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
1258
1259DATA TYPE:
1260    Unsigned integer (``uint32_t``).
1261
1262RANGE:
1263    Positive.
1264
1265DEFAULT VALUE:
1266    The default value is 16.
1267
1268DESCRIPTION:
1269    Defines the maximum blocks per write request.
1270
1271NOTES:
1272    None.
1273
1274.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
1275
1276.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
1277
1278CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
1279----------------------------------------
1280
1281CONSTANT:
1282    ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
1283
1284DATA TYPE:
1285    Task priority (``rtems_task_priority``).
1286
1287RANGE:
1288    Valid task priority.
1289
1290DEFAULT VALUE:
1291    The default value is 15.
1292
1293DESCRIPTION:
1294    Defines the read-ahead task priority.
1295
1296NOTES:
1297    None.
1298
1299.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
1300
1301.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
1302
1303CONFIGURE_BDBUF_TASK_STACK_SIZE
1304-------------------------------
1305
1306CONSTANT:
1307    ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
1308
1309DATA TYPE:
1310    Unsigned integer (``size_t``).
1311
1312RANGE:
1313    Zero or positive.
1314
1315DEFAULT VALUE:
1316    The default value is RTEMS_MINIMUM_STACK_SIZE.
1317
1318DESCRIPTION:
1319    Defines the task stack size of the Block Device Cache tasks in bytes.
1320
1321NOTES:
1322    None.
1323
1324.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
1325
1326.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
1327
1328CONFIGURE_SWAPOUT_BLOCK_HOLD
1329----------------------------
1330
1331CONSTANT:
1332    ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
1333
1334DATA TYPE:
1335    Unsigned integer (``uint32_t``).
1336
1337RANGE:
1338    Positive.
1339
1340DEFAULT VALUE:
1341    The default value is 1000 milliseconds.
1342
1343DESCRIPTION:
1344    Defines the swapout task maximum block hold time in milliseconds.
1345
1346NOTES:
1347    None.
1348
1349.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
1350
1351.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
1352
1353CONFIGURE_SWAPOUT_SWAP_PERIOD
1354-----------------------------
1355
1356CONSTANT:
1357    ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
1358
1359DATA TYPE:
1360    Unsigned integer (``uint32_t``).
1361
1362RANGE:
1363    Positive.
1364
1365DEFAULT VALUE:
1366    The default value is 250 milliseconds.
1367
1368DESCRIPTION:
1369    Defines the swapout task swap period in milliseconds.
1370
1371NOTES:
1372    None.
1373
1374.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
1375
1376.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
1377
1378CONFIGURE_SWAPOUT_TASK_PRIORITY
1379-------------------------------
1380
1381CONSTANT:
1382    ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
1383
1384DATA TYPE:
1385    Task priority (``rtems_task_priority``).
1386
1387RANGE:
1388    Valid task priority.
1389
1390DEFAULT VALUE:
1391    The default value is 15.
1392
1393DESCRIPTION:
1394    Defines the swapout task priority.
1395
1396NOTES:
1397    None.
1398
1399.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
1400
1401.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
1402
1403CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
1404--------------------------------------
1405
1406CONSTANT:
1407    ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
1408
1409DATA TYPE:
1410    Task priority (``rtems_task_priority``).
1411
1412RANGE:
1413    Valid task priority.
1414
1415DEFAULT VALUE:
1416    The default value is 15.
1417
1418DESCRIPTION:
1419    Defines the swapout worker task priority.
1420
1421NOTES:
1422    None.
1423
1424.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
1425
1426.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
1427
1428CONFIGURE_SWAPOUT_WORKER_TASKS
1429------------------------------
1430
1431CONSTANT:
1432    ``CONFIGURE_SWAPOUT_WORKER_TASKS``
1433
1434DATA TYPE:
1435    Unsigned integer (``size_t``).
1436
1437RANGE:
1438    Zero or positive.
1439
1440DEFAULT VALUE:
1441    The default value is 0.
1442
1443DESCRIPTION:
1444    Defines the swapout worker task count.
1445
1446NOTES:
1447    None.
1448
1449BSP Related Configuration Options
1450=================================
1451
1452This section describes configuration options related to the BSP.  Some
1453configuration options may have a BSP-specific setting which is defined by
1454``<bsp.h>``.  The BSP-specific settings can be disabled by the
1455:ref:`CONFIGURE_DISABLE_BSP_SETTINGS` configuration option.
1456
1457.. index:: BSP_IDLE_TASK_BODY
1458
1459.. _BSP_IDLE_TASK_BODY:
1460
1461BSP_IDLE_TASK_BODY
1462------------------
1463
1464CONSTANT:
1465    ``BSP_IDLE_TASK_BODY``
1466
1467DATA TYPE:
1468    Function pointer.
1469
1470RANGE:
1471    Undefined or valid function pointer.
1472
1473DEFAULT VALUE:
1474    This option is BSP specific.
1475
1476DESCRIPTION:
1477    If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
1478    ``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
1479    BSP specific idle task body will be used.
1480
1481NOTES:
1482    As it has knowledge of the specific CPU model, system controller logic, and
1483    peripheral buses, a BSP specific IDLE task may be capable of turning
1484    components off to save power during extended periods of no task activity
1485
1486.. index:: BSP_IDLE_TASK_STACK_SIZE
1487
1488.. _BSP_IDLE_TASK_STACK_SIZE:
1489
1490BSP_IDLE_TASK_STACK_SIZE
1491------------------------
1492
1493CONSTANT:
1494    ``BSP_IDLE_TASK_STACK_SIZE``
1495
1496DATA TYPE:
1497    Unsigned integer (``size_t``).
1498
1499RANGE:
1500    Undefined or positive.
1501
1502DEFAULT VALUE:
1503    This option is BSP specific.
1504
1505DESCRIPTION:
1506    If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
1507    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
1508    this BSP suggested idle task stack size will be used.
1509
1510NOTES:
1511    The order of precedence for configuring the IDLE task stack size is:
1512
1513    - RTEMS default minimum stack size.
1514
1515    - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
1516
1517    - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
1518
1519    - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
1520
1521.. index:: BSP_INITIAL_EXTENSION
1522
1523.. _BSP_INITIAL_EXTENSION:
1524
1525BSP_INITIAL_EXTENSION
1526---------------------
1527
1528CONSTANT:
1529    ``BSP_INITIAL_EXTENSION``
1530
1531DATA TYPE:
1532    List of user extension initializers (``rtems_extensions_table``).
1533
1534RANGE:
1535    Undefined or a list of user extension initializers.
1536
1537DEFAULT VALUE:
1538    This option is BSP specific.
1539
1540DESCRIPTION:
1541    If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
1542    initial extension will be placed as the last entry in the initial extension
1543    table.
1544
1545NOTES:
1546    None.
1547
1548.. index:: BSP_INTERRUPT_STACK_SIZE
1549
1550.. _BSP_INTERRUPT_STACK_SIZE:
1551
1552BSP_INTERRUPT_STACK_SIZE
1553------------------------
1554
1555CONSTANT:
1556    ``BSP_INTERRUPT_STACK_SIZE``
1557
1558DATA TYPE:
1559    Unsigned integer (``size_t``).
1560
1561RANGE:
1562    Undefined or positive.
1563
1564DEFAULT VALUE:
1565    This option is BSP specific.
1566
1567DESCRIPTION:
1568    If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
1569    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
1570    this BSP specific interrupt stack size will be used.
1571
1572NOTES:
1573    None.
1574
1575.. index:: BSP_MAXIMUM_DEVICES
1576
1577.. _BSP_MAXIMUM_DEVICES:
1578
1579BSP_MAXIMUM_DEVICES
1580-------------------
1581
1582CONSTANT:
1583    ``BSP_MAXIMUM_DEVICES``
1584
1585DATA TYPE:
1586    Unsigned integer (``size_t``).
1587
1588RANGE:
1589    Undefined or positive.
1590
1591DEFAULT VALUE:
1592    This option is BSP specific.
1593
1594DESCRIPTION:
1595    If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
1596    ``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
1597    BSP specific maximum device count will be used.
1598
1599NOTES:
1600    This option is specific to the device file system (devFS) and should not be
1601    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
1602    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
1603    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
1604
1605.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
1606
1607.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
1608
1609CONFIGURE_BSP_PREREQUISITE_DRIVERS
1610----------------------------------
1611
1612CONSTANT:
1613    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
1614
1615DATA TYPE:
1616    List of device driver initializers (``rtems_driver_address_table``).
1617
1618RANGE:
1619    Undefined or array of device drivers.
1620
1621DEFAULT VALUE:
1622    This option is BSP specific.
1623
1624DESCRIPTION:
1625    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
1626    drivers it needs to include in the Device Driver Table.  This should be
1627    defined to the set of device driver entries that will be placed in the
1628    table at the *FRONT* of the Device Driver Table and initialized before any
1629    other drivers *INCLUDING* any application prerequisite drivers.
1630
1631NOTES:
1632    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
1633    configure common infrastructure such as bus controllers or probe for
1634    devices.
1635
1636.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
1637
1638.. _CONFIGURE_DISABLE_BSP_SETTINGS:
1639
1640CONFIGURE_DISABLE_BSP_SETTINGS
1641------------------------------
1642
1643CONSTANT:
1644    ``CONFIGURE_DISABLE_BSP_SETTINGS``
1645
1646DATA TYPE:
1647    Boolean feature macro.
1648
1649RANGE:
1650    Defined or undefined.
1651
1652DEFAULT VALUE:
1653    This is not defined by default.
1654
1655DESCRIPTION:
1656    All BSP specific configuration settings can be disabled by the application
1657    with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
1658
1659NOTES:
1660    None.
1661
1662.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
1663
1664.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
1665
1666CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
1667----------------------------------
1668
1669CONSTANT:
1670    ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
1671
1672DATA TYPE:
1673    Boolean feature macro.
1674
1675RANGE:
1676    Defined or undefined.
1677
1678DEFAULT VALUE:
1679    This option is BSP specific.
1680
1681DESCRIPTION:
1682    This configuration parameter is defined by a BSP to indicate that it does
1683    not allocate all available memory to the C Program Heap used by the Malloc
1684    Family of routines.
1685
1686    If defined, when ``malloc()`` is unable to allocate memory, it will call
1687    the BSP supplied ``sbrk()`` to obtain more memory.
1688
1689NOTES:
1690    This parameter should not be defined by the application. Only the BSP knows
1691    how it allocates memory to the C Program Heap.
1692
1693Idle Task Configuration
1694=======================
1695
1696This section defines the IDLE task related configuration parameters supported
1697by ``<rtems/confdefs.h>``.
1698
1699.. index:: CONFIGURE_IDLE_TASK_BODY
1700
1701.. _CONFIGURE_IDLE_TASK_BODY:
1702
1703CONFIGURE_IDLE_TASK_BODY
1704------------------------
1705
1706CONSTANT:
1707    ``CONFIGURE_IDLE_TASK_BODY``
1708
1709DATA TYPE:
1710    Function pointer.
1711
1712RANGE:
1713    Undefined or valid function pointer.
1714
1715DEFAULT VALUE:
1716    This is not defined by default.
1717
1718DESCRIPTION:
1719    ``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
1720    the application specific IDLE thread body.  If not specified, the BSP or
1721    RTEMS default IDLE thread body will be used.
1722
1723NOTES:
1724    None.
1725
1726.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
1727
1728.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
1729
1730CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
1731-------------------------------------------
1732
1733CONSTANT:
1734    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
1735
1736DATA TYPE:
1737    Boolean feature macro.
1738
1739RANGE:
1740    Defined or undefined.
1741
1742DEFAULT VALUE:
1743    This is not defined by default, the user is assumed to provide one or more
1744    initialization tasks.
1745
1746DESCRIPTION:
1747    ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`` is set to indicate that the
1748    user has configured *NO* user initialization tasks or threads and that the
1749    user provided IDLE task will perform application initialization and then
1750    transform itself into an IDLE task.
1751
1752NOTES:
1753    If you use this option be careful, the user IDLE task *CANNOT* block at all
1754    during the initialization sequence.  Further, once application
1755    initialization is complete, it must make itself preemptible and enter an
1756    IDLE body loop.
1757
1758    The IDLE task must run at the lowest priority of all tasks in the system.
1759
1760.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
1761
1762.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
1763
1764CONFIGURE_IDLE_TASK_STACK_SIZE
1765------------------------------
1766
1767CONSTANT:
1768    ``CONFIGURE_IDLE_TASK_STACK_SIZE``
1769
1770DATA TYPE:
1771    Unsigned integer (``size_t``).
1772
1773RANGE:
1774    Undefined or positive.
1775
1776DEFAULT VALUE:
1777    The default value is RTEMS_MINIMUM_STACK_SIZE.
1778
1779DESCRIPTION:
1780    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
1781    IDLE task.
1782
1783NOTES:
1784    None.
1785
1786General Scheduler Configuration
1787===============================
1788
1789This section defines the configuration parameters related to selecting a
1790scheduling algorithm for an application.  A scheduler configuration is optional
1791and only necessary in very specific circumstances.  A normal application
1792configuration does not need any of the configuration options described in this
1793section.  By default, the :ref:`Deterministic Priority Scheduler
1794<SchedulerPriority>` algorithm is used in uniprocessor configurations.  In case
1795SMP is enabled and the configured maximum processors
1796(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`) is greater
1797than one, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
1798<SchedulerSMPEDF>` is selected as the default scheduler algorithm.
1799
1800For the :ref:`schedulers built into
1801RTEMS <SchedulingConcepts>`, the configuration is straightforward.  All that is
1802required is to define the configuration macro which specifies which scheduler
1803you want for in your application.
1804
1805The pluggable scheduler interface also enables the user to provide their own
1806scheduling algorithm.  If you choose to do this, you must define multiple
1807configuration macros.
1808
1809.. index:: CONFIGURE_SCHEDULER_CBS
1810
1811.. _CONFIGURE_SCHEDULER_CBS:
1812
1813CONFIGURE_SCHEDULER_CBS
1814-----------------------
1815
1816CONSTANT:
1817    ``CONFIGURE_SCHEDULER_CBS``
1818
1819DATA TYPE:
1820    Boolean feature macro.
1821
1822RANGE:
1823    Defined or undefined.
1824
1825DEFAULT VALUE:
1826    This is not defined by default.
1827
1828DESCRIPTION:
1829    If defined, then the :ref:`Constant Bandwidth Server (CBS) Scheduler
1830    <SchedulerCBS>` algorithm is made available to the application.
1831
1832NOTES:
1833    This scheduler configuration option is an advanced configuration option.
1834    Think twice before you use it.
1835
1836    In case no explicit :ref:`clustered scheduler configuration
1837    <ConfigurationSchedulersClustered>` is present, then it is used as the
1838    scheduler for exactly one processor.
1839
1840.. index:: CONFIGURE_SCHEDULER_EDF
1841
1842.. _CONFIGURE_SCHEDULER_EDF:
1843
1844CONFIGURE_SCHEDULER_EDF
1845-----------------------
1846
1847CONSTANT:
1848    ``CONFIGURE_SCHEDULER_EDF``
1849
1850DATA TYPE:
1851    Boolean feature macro.
1852
1853RANGE:
1854    Defined or undefined.
1855
1856DEFAULT VALUE:
1857    This is not defined by default.
1858
1859DESCRIPTION:
1860    If defined, then the :ref:`Earliest Deadline First (EDF) Scheduler
1861    <SchedulerEDF>` algorithm is made available to the application.
1862
1863NOTES:
1864    This scheduler configuration option is an advanced configuration option.
1865    Think twice before you use it.
1866
1867    In case no explicit :ref:`clustered scheduler configuration
1868    <ConfigurationSchedulersClustered>` is present, then it is used as the
1869    scheduler for exactly one processor.
1870
1871.. index:: CONFIGURE_SCHEDULER_EDF_SMP
1872
1873.. _CONFIGURE_SCHEDULER_EDF_SMP:
1874
1875CONFIGURE_SCHEDULER_EDF_SMP
1876---------------------------
1877
1878CONSTANT:
1879    ``CONFIGURE_SCHEDULER_EDF_SMP``
1880
1881DATA TYPE:
1882    Boolean feature macro.
1883
1884RANGE:
1885    Defined or undefined.
1886
1887DEFAULT VALUE:
1888    This is not defined by default.
1889
1890DESCRIPTION:
1891    If defined, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
1892    <SchedulerSMPEDF>` algorithm is made available to the application.
1893
1894NOTES:
1895    This scheduler configuration option is an advanced configuration option.
1896    Think twice before you use it.
1897
1898    This scheduler algorithm is only available when RTEMS is built with SMP
1899    support enabled.
1900
1901    In case no explicit :ref:`clustered scheduler configuration
1902    <ConfigurationSchedulersClustered>` is present, then it is used as the
1903    scheduler for up to 32 processors.
1904
1905    This scheduler algorithm is the default in SMP configurations if
1906    :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
1907    greater than one.
1908
1909.. index:: CONFIGURE_SCHEDULER_NAME
1910
1911.. _CONFIGURE_SCHEDULER_NAME:
1912
1913CONFIGURE_SCHEDULER_NAME
1914------------------------
1915
1916CONSTANT:
1917    ``CONFIGURE_SCHEDULER_NAME``
1918
1919DATA TYPE:
1920    RTEMS Name (``rtems_name``).
1921
1922RANGE:
1923    Any value.
1924
1925DEFAULT VALUE:
1926    The default name is
1927
1928      - ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
1929      - ``"MPA "`` for the :ref:`Arbitrary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
1930      - ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
1931      - ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
1932      - ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
1933      - ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
1934      - ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
1935      - ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
1936
1937DESCRIPTION:
1938    Schedulers can be identified via ``rtems_scheduler_ident``.  The name of
1939    the scheduler is determined by the configuration.
1940
1941NOTES:
1942    This scheduler configuration option is an advanced configuration option.
1943    Think twice before you use it.
1944
1945.. index:: CONFIGURE_SCHEDULER_PRIORITY
1946
1947.. _CONFIGURE_SCHEDULER_PRIORITY:
1948
1949CONFIGURE_SCHEDULER_PRIORITY
1950----------------------------
1951
1952CONSTANT:
1953    ``CONFIGURE_SCHEDULER_PRIORITY``
1954
1955DATA TYPE:
1956    Boolean feature macro.
1957
1958RANGE:
1959    Defined or undefined.
1960
1961DEFAULT VALUE:
1962    This is defined by default.  This is the default scheduler and specifying
1963    this configuration parameter is redundant.
1964
1965DESCRIPTION:
1966    If defined, then the :ref:`Deterministic Priority Scheduler
1967    <SchedulerPriority>` algorithm is made available to the application.
1968
1969NOTES:
1970    This scheduler configuration option is an advanced configuration option.
1971    Think twice before you use it.
1972
1973    In case no explicit :ref:`clustered scheduler configuration
1974    <ConfigurationSchedulersClustered>` is present, then it is used as the
1975    scheduler for exactly one processor.
1976
1977    This scheduler algorithm is the default when
1978    :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
1979    exactly one.
1980
1981    The memory allocated for this scheduler depends on the
1982    :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
1983
1984.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
1985
1986.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
1987
1988CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
1989-----------------------------------------
1990
1991CONSTANT:
1992    ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
1993
1994DATA TYPE:
1995    Boolean feature macro.
1996
1997RANGE:
1998    Defined or undefined.
1999
2000DEFAULT VALUE:
2001    This is not defined by default.
2002
2003DESCRIPTION:
2004    If defined, then the :ref:`Arbitrary Processor Affinity SMP Scheduler
2005    <SchedulerSMPPriorityAffinity>` algorithm is made available to the
2006    application.
2007
2008NOTES:
2009    This scheduler configuration option is an advanced configuration option.
2010    Think twice before you use it.
2011
2012    This scheduler algorithm is only available when RTEMS is built with SMP
2013    support enabled.
2014
2015    In case no explicit :ref:`clustered scheduler configuration
2016    <ConfigurationSchedulersClustered>` is present, then it is used as the
2017    scheduler for up to 32 processors.
2018
2019    The memory allocated for this scheduler depends on the
2020    :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
2021
2022.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
2023
2024.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
2025
2026CONFIGURE_SCHEDULER_PRIORITY_SMP
2027--------------------------------
2028
2029CONSTANT:
2030    ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
2031
2032DATA TYPE:
2033    Boolean feature macro.
2034
2035RANGE:
2036    Defined or undefined.
2037
2038DEFAULT VALUE:
2039    This is not defined by default.
2040
2041DESCRIPTION:
2042    If defined, then the :ref:`Deterministic Priority SMP Scheduler
2043    <SchedulerSMPPriority>` algorithm is made available to the application.
2044
2045NOTES:
2046    This scheduler configuration option is an advanced configuration option.
2047    Think twice before you use it.
2048
2049    This scheduler algorithm is only available when RTEMS is built with SMP
2050    support enabled.
2051
2052    In case no explicit :ref:`clustered scheduler configuration
2053    <ConfigurationSchedulersClustered>` is present, then it is used as the
2054    scheduler for up to 32 processors.
2055
2056    The memory allocated for this scheduler depends on the
2057    :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
2058
2059.. index:: CONFIGURE_SCHEDULER_SIMPLE
2060
2061.. _CONFIGURE_SCHEDULER_SIMPLE:
2062
2063CONFIGURE_SCHEDULER_SIMPLE
2064--------------------------
2065
2066CONSTANT:
2067    ``CONFIGURE_SCHEDULER_SIMPLE``
2068
2069DATA TYPE:
2070    Boolean feature macro.
2071
2072RANGE:
2073    Defined or undefined.
2074
2075DEFAULT VALUE:
2076    This is not defined by default.
2077
2078DESCRIPTION:
2079    If defined, then the :ref:`Simple Priority Scheduler
2080    <SchedulerPrioritySimple>` algorithm is made available to the application.
2081
2082NOTES:
2083    This scheduler configuration option is an advanced configuration option.
2084    Think twice before you use it.
2085
2086    In case no explicit :ref:`clustered scheduler configuration
2087    <ConfigurationSchedulersClustered>` is present, then it is used as the
2088    scheduler for exactly one processor.
2089
2090.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
2091
2092.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
2093
2094CONFIGURE_SCHEDULER_SIMPLE_SMP
2095------------------------------
2096
2097CONSTANT:
2098    ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
2099
2100DATA TYPE:
2101    Boolean feature macro.
2102
2103RANGE:
2104    Defined or undefined.
2105
2106DEFAULT VALUE:
2107    This is not defined by default.
2108
2109DESCRIPTION:
2110    If defined, then the :ref:`Simple Priority SMP Scheduler
2111    <SchedulerSMPPrioritySimple>` algorithm is made available to the
2112    application.
2113
2114NOTES:
2115    This scheduler configuration option is an advanced configuration option.
2116    Think twice before you use it.
2117
2118    This scheduler algorithm is only available when RTEMS is built with SMP
2119    support enabled.
2120
2121    In case no explicit :ref:`clustered scheduler configuration
2122    <ConfigurationSchedulersClustered>` is present, then it is used as the
2123    scheduler for up to 32 processors.
2124
2125.. index:: CONFIGURE_SCHEDULER_USER
2126
2127.. _CONFIGURE_SCHEDULER_USER:
2128
2129CONFIGURE_SCHEDULER_USER
2130------------------------
2131
2132CONSTANT:
2133    ``CONFIGURE_SCHEDULER_USER``
2134
2135DATA TYPE:
2136    Boolean feature macro.
2137
2138RANGE:
2139    Defined or undefined.
2140
2141DEFAULT VALUE:
2142    This is not defined by default.
2143
2144DESCRIPTION:
2145    RTEMS allows the application to provide its own task/thread scheduling
2146    algorithm. In order to do this, one must define
2147    ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
2148    scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
2149    following additional macros must be defined:
2150
2151    - ``CONFIGURE_SCHEDULER`` must be defined to a static definition of
2152      the scheduler data structures of the user scheduler.
2153
2154    - ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` must be defined to a scheduler
2155      table entry initializer for the user scheduler.
2156
2157    - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
2158      the per-thread information of the user scheduler.
2159
2160NOTES:
2161    This scheduler configuration option is an advanced configuration option.
2162    Think twice before you use it.
2163
2164    At this time, the mechanics and requirements for writing a new scheduler
2165    are evolving and not fully documented.  It is recommended that you look at
2166    the existing Deterministic Priority Scheduler in
2167    ``cpukit/score/src/schedulerpriority*.c`` for guidance.  For guidance on
2168    the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
2169    for how these are defined for the Deterministic Priority Scheduler.
2170
2171.. _ConfigurationSchedulersClustered:
2172
2173Clustered Scheduler Configuration
2174=================================
2175
2176A clustered scheduler configuration is optional.  It is an advanced
2177configuration area and only necessary in specific circumstances.
2178
2179Clustered scheduling helps to control the worst-case latencies in a
2180multiprocessor system (SMP).  The goal is to reduce the amount of shared state
2181in the system and thus prevention of lock contention.  Modern multiprocessor
2182systems tend to have several layers of data and instruction caches.  With
2183clustered scheduling it is possible to honour the cache topology of a system
2184and thus avoid expensive cache synchronization traffic.
2185
2186We have clustered scheduling in case the set of processors of a system is
2187partitioned into non-empty pairwise-disjoint subsets.  These subsets are called
2188clusters.  Clusters with a cardinality of one are partitions.  Each cluster is
2189owned by exactly one scheduler.
2190
2191In order to use clustered scheduling the application designer has to answer two
2192questions.
2193
2194#. How is the set of processors partitioned into clusters?
2195
2196#. Which scheduler algorithm is used for which cluster?
2197
2198The schedulers are statically configured.
2199
2200Configuration Step 1 - Scheduler Algorithms
2201-------------------------------------------
2202
2203Firstly, the application must select which scheduling algorithms are available
2204with the following defines
2205
2206- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
2207
2208- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
2209
2210- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
2211
2212- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
2213
2214This is necessary to calculate the per-thread overhead introduced by the
2215scheduler algorithms.  After these definitions the configuration file must
2216``#include <rtems/scheduler.h>`` to have access to scheduler-specific
2217configuration macros.
2218
2219It is possible to make more than one scheduler algorithm available to the
2220application.  For example a :ref:`Simple Priority SMP Scheduler
2221<SchedulerSMPPrioritySimple>` could be used in a partition for low latency
2222tasks in addition to an :ref:`EDF SMP Scheduler <SchedulerSMPEDF>` for a
2223general-purpose cluster.  Since the per-thread overhead depends on the
2224scheduler algorithm only the scheduler algorithms used by the application
2225should be configured.
2226
2227Configuration Step 2 - Schedulers
2228---------------------------------
2229
2230Each scheduler needs some data structures.  Use the following macros to create
2231the scheduler data structures for a particular scheduler identified in the
2232configuration by ``name``.
2233
2234- ``RTEMS_SCHEDULER_EDF_SMP(name, max_cpu_count)``,
2235
2236- ``RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP(name, prio_count)``,
2237
2238- ``RTEMS_SCHEDULER_PRIORITY_SMP(name, prio_count)``, and
2239
2240- ``RTEMS_SCHEDULER_SIMPLE_SMP(name)``.
2241
2242The ``name`` parameter is used as part of a designator for scheduler-specific
2243data structures, so the usual C/C++ designator rules apply.  This ``name`` is
2244not the scheduler object name.  Additional parameters are scheduler-specific.
2245
2246.. _ConfigurationSchedulerTable:
2247
2248Configuration Step 3 - Scheduler Table
2249--------------------------------------
2250
2251The schedulers are registered in the system via the scheduler table.  To
2252populate the scheduler table define ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` to a
2253list of the following scheduler table entry initializers
2254
2255- ``RTEMS_SCHEDULER_TABLE_EDF_SMP(name, obj_name)``,
2256
2257- ``RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP(name, obj_name)``,
2258
2259- ``RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(name, obj_name)``, and
2260
2261- ``RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(name, obj_name)``.
2262
2263The ``name`` parameter must correspond to the parameter defining the scheduler
2264data structures of configuration step 2.  The ``obj_name`` determines the
2265scheduler object name and can be used in :ref:`rtems_scheduler_ident()
2266<rtems_scheduler_ident>` to get the scheduler object identifier.  The scheduler
2267index is defined by the index of the scheduler table.  It is a configuration
2268error to add a scheduler multiple times to the scheduler table.
2269
2270Configuration Step 4 - Processor to Scheduler Assignment
2271--------------------------------------------------------
2272
2273The last step is to define which processor uses which scheduler.  For this
2274purpose a scheduler assignment table must be defined.  The entry count of this
2275table must be equal to the configured maximum processors
2276(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).  A
2277processor assignment to a scheduler can be optional or mandatory.  The boot
2278processor must have a scheduler assigned.  In case the system needs more
2279mandatory processors than available then a fatal run-time error will occur.  To
2280specify the scheduler assignments define
2281``CONFIGURE_SCHEDULER_ASSIGNMENTS`` to a list of
2282
2283- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
2284
2285- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
2286
2287macros.  The ``scheduler_index`` parameter must be a valid index into the
2288scheduler table defined by configuration step 3.  The ``attr`` parameter
2289defines the scheduler assignment attributes.  By default, a scheduler
2290assignment to a processor is optional.  For the scheduler assignment attribute
2291use one of the mutually exclusive variants
2292
2293- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
2294
2295- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
2296
2297- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
2298
2299It is possible to add/remove processors to/from schedulers at run-time, see
2300:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
2301:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
2302
2303Configuration Example
2304---------------------
2305
2306The following example shows a scheduler configuration for a hypothetical
2307product using two chip variants.  One variant has four processors which is used
2308for the normal product line and another provides eight processors for the
2309high-performance product line.  The first processor performs hard-real time
2310control of actuators and sensors.  The second processor is not used by RTEMS at
2311all and runs a Linux instance to provide a graphical user interface.  The
2312additional processors are used for a worker thread pool to perform data
2313processing operations.
2314
2315The processors managed by RTEMS use two Deterministic Priority SMP schedulers
2316capable of dealing with 256 priority levels.  The scheduler with index zero has
2317the name ``"IO "``.  The scheduler with index one has the name ``"WORK"``.  The
2318scheduler assignments of the first, third and fourth processor are mandatory,
2319so the system must have at least four processors, otherwise a fatal run-time
2320error will occur during system startup.  The processor assignments for the
2321fifth up to the eighth processor are optional so that the same application can
2322be used for the normal and high-performance product lines.  The second
2323processor has no scheduler assigned and runs Linux.  A hypervisor will ensure
2324that the two systems cannot interfere in an undesirable way.
2325
2326.. code-block:: c
2327
2328    #define CONFIGURE_MAXIMUM_PROCESSORS 8
2329    #define CONFIGURE_MAXIMUM_PRIORITY 255
2330
2331    /* Configuration Step 1 - Scheduler Algorithms */
2332    #define CONFIGURE_SCHEDULER_PRIORITY_SMP
2333    #include <rtems/scheduler.h>
2334
2335    /* Configuration Step 2 - Schedulers */
2336    RTEMS_SCHEDULER_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
2337    RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
2338
2339    /* Configuration Step 3 - Scheduler Table */
2340    #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
2341      RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
2342        io, \
2343         rtems_build_name('I', 'O', ' ', ' ') \
2344      ), \
2345      RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
2346        work, \
2347        rtems_build_name('W', 'O', 'R', 'K') \
2348      )
2349
2350    /* Configuration Step 4 - Processor to Scheduler Assignment */
2351    #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
2352      RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
2353      RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
2354      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
2355      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
2356      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
2357      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
2358      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
2359      RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
2360
2361Configuration Errors
2362--------------------
2363
2364In case one of the scheduler indices in ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
2365is invalid a link-time error will occur with an undefined reference to
2366``RTEMS_SCHEDULER_INVALID_INDEX``.
2367
2368Some fatal errors may occur in case of scheduler configuration inconsistencies
2369or a lack of processors on the system.  The fatal source is
2370``RTEMS_FATAL_SOURCE_SMP``.
2371
2372- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
2373  must have a scheduler assigned.
2374
2375- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
2376  processor beyond the range of physically or virtually available processors.
2377  The processor demand must be reduced for this system.
2378
2379- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
2380  processor failed during system initialization.  The system may not have this
2381  processor at all or it could be a problem with a boot loader for example.
2382  Check the ``CONFIGURE_SCHEDULER_ASSIGNMENTS`` definition.
2383
2384- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
2385  to start multitasking on a processor with no scheduler assigned.
2386
2387Device Driver Configuration
2388===========================
2389
2390This section defines the configuration parameters related to the automatic
2391generation of a Device Driver Table.  As ``<rtems/confdefs.h>`` only is aware
2392of a small set of standard device drivers, the generated Device Driver Table is
2393suitable for simple applications with no custom device drivers.
2394
2395Note that network device drivers are not configured in the Device Driver Table.
2396
2397.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
2398
2399.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
2400
2401CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
2402------------------------------------------------
2403
2404CONSTANT:
2405    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
2406
2407DATA TYPE:
2408    Boolean feature macro.
2409
2410RANGE:
2411    Defined or undefined.
2412
2413DEFAULT VALUE:
2414    This is not defined by default.
2415
2416DESCRIPTION:
2417    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
2418    application does *NOT* want the Clock Device Driver and is *NOT* using the
2419    Timer Driver.  The inclusion or exclusion of the Clock Driver must be
2420    explicit in user applications.
2421
2422NOTES:
2423    This configuration parameter is intended to prevent the common user error
2424    of using the Hello World example as the baseline for an application and
2425    leaving out a clock tick source.
2426
2427.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
2428
2429.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
2430
2431CONFIGURE_APPLICATION_EXTRA_DRIVERS
2432-----------------------------------
2433
2434CONSTANT:
2435    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
2436
2437DATA TYPE:
2438    device driver entry structures
2439
2440RANGE:
2441    Undefined or set of device driver entry structures
2442
2443DEFAULT VALUE:
2444    This is not defined by default.
2445
2446DESCRIPTION:
2447    ``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
2448    device drivers it needs to include in the Device Driver Table.  This should
2449    be defined to the set of device driver entries that will be placed in the
2450    table at the *END* of the Device Driver Table.
2451
2452NOTES:
2453    None.
2454
2455.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
2456
2457.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
2458
2459CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
2460----------------------------------------
2461
2462CONSTANT:
2463    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
2464
2465DATA TYPE:
2466    Boolean feature macro.
2467
2468RANGE:
2469    Defined or undefined.
2470
2471DEFAULT VALUE:
2472    This is not defined by default.
2473
2474DESCRIPTION:
2475    ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
2476    wishes to include the Clock Device Driver.
2477
2478NOTES:
2479    This device driver is responsible for providing a regular interrupt which
2480    invokes a clock tick directive.
2481
2482    If neither the Clock Driver not Benchmark Timer is enabled and the
2483    configuration parameter
2484    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
2485    compile time error will occur.
2486
2487.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
2488
2489.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
2490
2491CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
2492------------------------------------------
2493
2494CONSTANT:
2495    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
2496
2497DATA TYPE:
2498    Boolean feature macro.
2499
2500RANGE:
2501    Defined or undefined.
2502
2503DEFAULT VALUE:
2504    This is not defined by default.
2505
2506DESCRIPTION:
2507    ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
2508    application wishes to include the Console Device Driver.
2509
2510NOTES:
2511    This device driver is responsible for providing the :file:`/dev/console`
2512    device file.  This device is used to initialize the standard input, output,
2513    and error file descriptors.
2514
2515    BSPs should be constructed in a manner that allows ``printk()`` to work
2516    properly without the need for the console driver to be configured.
2517
2518    The
2519
2520    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
2521
2522    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
2523
2524    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
2525
2526    configuration options are mutually exclusive.
2527
2528.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
2529
2530.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
2531
2532CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
2533-----------------------------------------------
2534
2535CONSTANT:
2536    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
2537
2538DATA TYPE:
2539    Boolean feature macro.
2540
2541RANGE:
2542    Defined or undefined.
2543
2544DEFAULT VALUE:
2545    This is not defined by default.
2546
2547DESCRIPTION:
2548    ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
2549    application wishes to include the BSP's Frame Buffer Device Driver.
2550
2551NOTES:
2552    Most BSPs do not include support for a Frame Buffer Device Driver. This is
2553    because many boards do not include the required hardware.
2554
2555    If this is defined and the BSP does not have this device driver, then the
2556    user will get a link time error for an undefined symbol.
2557
2558.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
2559.. index:: /dev/null
2560
2561.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
2562
2563CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
2564---------------------------------------
2565
2566CONSTANT:
2567    ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
2568
2569DATA TYPE:
2570    Boolean feature macro.
2571
2572RANGE:
2573    Defined or undefined.
2574
2575DEFAULT VALUE:
2576    This is not defined by default.
2577
2578DESCRIPTION:
2579    This configuration variable is specified to enable ``/dev/null`` device driver.
2580
2581NOTES:
2582    This device driver is supported by all BSPs.
2583
2584.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
2585
2586.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
2587
2588CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
2589--------------------------------------
2590
2591CONSTANT:
2592    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
2593
2594DATA TYPE:
2595    Boolean feature macro.
2596
2597RANGE:
2598    Defined or undefined.
2599
2600DEFAULT VALUE:
2601    This is not defined by default.
2602
2603DESCRIPTION:
2604    ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
2605    wishes to include the Real-Time Clock Driver.
2606
2607NOTES:
2608    Most BSPs do not include support for a real-time clock. This is because
2609    many boards do not include the required hardware.
2610
2611    If this is defined and the BSP does not have this device driver, then the
2612    user will get a link time error for an undefined symbol.
2613
2614.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
2615
2616.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
2617
2618CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
2619-------------------------------------------------
2620
2621CONSTANT:
2622    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
2623
2624DATA TYPE:
2625    Boolean feature macro.
2626
2627RANGE:
2628    Defined or undefined.
2629
2630DEFAULT VALUE:
2631    This is not defined by default.
2632
2633DESCRIPTION:
2634    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`` is defined if the
2635    application wishes to include the Simple Console Device Driver.
2636
2637NOTES:
2638    This device driver is responsible for providing the :file:`/dev/console`
2639    device file.  This device is used to initialize the standard input, output,
2640    and error file descriptors.
2641
2642    This device driver reads via ``getchark()``.
2643
2644    This device driver writes via ``rtems_putc()``.
2645
2646    The Termios framework is not used.  There is no support to change device
2647    settings, e.g. baud, stop bits, parity, etc.
2648
2649    The
2650
2651    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
2652
2653    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
2654
2655    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
2656
2657    configuration options are mutually exclusive.
2658
2659.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
2660
2661.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
2662
2663CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
2664------------------------------------------------------
2665
2666CONSTANT:
2667    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
2668
2669DATA TYPE:
2670    Boolean feature macro.
2671
2672RANGE:
2673    Defined or undefined.
2674
2675DEFAULT VALUE:
2676    This is not defined by default.
2677
2678DESCRIPTION:
2679    ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`` is defined if
2680    the application wishes to include the Simple Task Console Device Driver.
2681
2682NOTES:
2683    This device driver is responsible for providing the :file:`/dev/console`
2684    device file.  This device is used to initialize the standard input, output,
2685    and error file descriptors.
2686
2687    This device driver reads via ``getchark()``.
2688
2689    This device driver writes into a write buffer.  The count of characters
2690    written into the write buffer is returned.  It might be less than the
2691    requested count, in case the write buffer is full.  The write is
2692    non-blocking and may be called from interrupt context.  A dedicated task
2693    reads from the write buffer and outputs the characters via
2694    ``rtems_putc()``.  This task runs with the least important priority.  The
2695    write buffer size is 2047 characters and it is not configurable.
2696
2697    Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
2698    write buffer.
2699
2700    The Termios framework is not used.  There is no support to change device
2701    settings, e.g.  baud, stop bits, parity, etc.
2702
2703    The
2704
2705    * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
2706
2707    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
2708
2709    * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
2710
2711    configuration options are mutually exclusive.
2712
2713.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
2714
2715.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
2716
2717CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
2718---------------------------------------
2719
2720CONSTANT:
2721    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
2722
2723DATA TYPE:
2724    Boolean feature macro.
2725
2726RANGE:
2727    Defined or undefined.
2728
2729DEFAULT VALUE:
2730    This is not defined by default.
2731
2732DESCRIPTION:
2733    ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
2734    wishes to include the Stub Device Driver.
2735
2736NOTES:
2737    This device driver simply provides entry points that return successful and
2738    is primarily a test fixture. It is supported by all BSPs.
2739
2740.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
2741
2742.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
2743
2744CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
2745----------------------------------------
2746
2747CONSTANT:
2748    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
2749
2750DATA TYPE:
2751    Boolean feature macro.
2752
2753RANGE:
2754    Defined or undefined.
2755
2756DEFAULT VALUE:
2757    This is not defined by default.
2758
2759DESCRIPTION:
2760    ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
2761    wishes to include the Timer Driver.  This device driver is used to
2762    benchmark execution times by the RTEMS Timing Test Suites.
2763
2764NOTES:
2765    If neither the Clock Driver not Benchmark Timer is enabled and the
2766    configuration parameter
2767    ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
2768    compile time error will occur.
2769
2770.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
2771
2772.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
2773
2774CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
2775-------------------------------------------
2776
2777CONSTANT:
2778    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
2779
2780DATA TYPE:
2781    Boolean feature macro.
2782
2783RANGE:
2784    Defined or undefined.
2785
2786DEFAULT VALUE:
2787    This is not defined by default.
2788
2789DESCRIPTION:
2790    ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
2791    application wishes to include the Watchdog Driver.
2792
2793NOTES:
2794    Most BSPs do not include support for a watchdog device driver. This is
2795    because many boards do not include the required hardware.
2796
2797    If this is defined and the BSP does not have this device driver, then the
2798    user will get a link time error for an undefined symbol.
2799
2800.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
2801.. index:: /dev/zero
2802
2803.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
2804
2805CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
2806---------------------------------------
2807
2808CONSTANT:
2809    ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
2810
2811DATA TYPE:
2812    Boolean feature macro.
2813
2814RANGE:
2815    Defined or undefined.
2816
2817DEFAULT VALUE:
2818    This is not defined by default.
2819
2820DESCRIPTION:
2821    This configuration variable is specified to enable ``/dev/zero`` device driver.
2822
2823NOTES:
2824    This device driver is supported by all BSPs.
2825
2826.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
2827
2828.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
2829
2830CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
2831------------------------------------------
2832
2833CONSTANT:
2834    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
2835
2836DATA TYPE:
2837    device driver entry structures
2838
2839RANGE:
2840    Undefined or set of device driver entry structures
2841
2842DEFAULT VALUE:
2843    This is not defined by default.
2844
2845DESCRIPTION:
2846    ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
2847    application has device drivers it needs to include in the Device Driver
2848    Table.  This should be defined to the set of device driver entries that
2849    will be placed in the table at the *FRONT* of the Device Driver Table and
2850    initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
2851
2852NOTES:
2853    In some cases, it is used by System On Chip BSPs to support peripheral
2854    buses beyond those normally found on the System On Chip. For example, this
2855    is used by one RTEMS system which has implemented a SPARC/ERC32 based board
2856    with VMEBus. The VMEBus Controller initialization is performed by a device
2857    driver configured via this configuration parameter.
2858
2859.. index:: CONFIGURE_MAXIMUM_DRIVERS
2860
2861.. _CONFIGURE_MAXIMUM_DRIVERS:
2862
2863CONFIGURE_MAXIMUM_DRIVERS
2864-------------------------
2865
2866CONSTANT:
2867    ``CONFIGURE_MAXIMUM_DRIVERS``
2868
2869DATA TYPE:
2870    Unsigned integer (``uint32_t``).
2871
2872RANGE:
2873    Zero or positive.
2874
2875DEFAULT VALUE:
2876    This is computed by default, and is set to the number of device drivers
2877    configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
2878    configuration parameters.
2879
2880DESCRIPTION:
2881    ``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
2882    per node.
2883
2884NOTES:
2885    If the application will dynamically install device drivers, then this
2886    configuration parameter must be larger than the number of statically
2887    configured device drivers. Drivers configured using the
2888    ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
2889    statically installed.
2890
2891Multiprocessing Configuration
2892=============================
2893
2894This section defines the multiprocessing related system configuration
2895parameters supported by ``<rtems/confdefs.h>``.  They are only used if RTEMS
2896was built with the ``--enable-multiprocessing`` build configuration option.
2897The multiprocessing (MPCI) support must not be confused with the SMP support.
2898
2899Additionally, this class of Configuration Constants are only applicable if
2900``CONFIGURE_MP_APPLICATION`` is defined.
2901
2902.. index:: CONFIGURE_MP_APPLICATION
2903
2904.. _CONFIGURE_MP_APPLICATION:
2905
2906CONFIGURE_MP_APPLICATION
2907------------------------
2908
2909CONSTANT:
2910    ``CONFIGURE_MP_APPLICATION``
2911
2912DATA TYPE:
2913    Boolean feature macro.
2914
2915RANGE:
2916    Defined or undefined.
2917
2918DEFAULT VALUE:
2919    This is not defined by default.
2920
2921DESCRIPTION:
2922    This configuration parameter must be defined to indicate that the
2923    application intends to be part of a multiprocessing
2924    configuration. Additional configuration parameters are assumed to be
2925    provided.
2926
2927NOTES:
2928    This has no impact unless RTEMS was built with the
2929    ``--enable-multiprocessing`` build configuration option.
2930
2931.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
2932
2933.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
2934
2935CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
2936-----------------------------------
2937
2938CONSTANT:
2939    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
2940
2941DATA TYPE:
2942    Unsigned integer (``uint32_t``).
2943
2944RANGE:
2945    Positive.
2946
2947DEFAULT VALUE:
2948    The default value is 32.
2949
2950DESCRIPTION:
2951    ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
2952    concurrently active global objects in a multiprocessor system.
2953
2954NOTES:
2955    This value corresponds to the total number of objects which can be created
2956    with the ``RTEMS_GLOBAL`` attribute.
2957
2958.. index:: CONFIGURE_MP_MAXIMUM_NODES
2959
2960.. _CONFIGURE_MP_MAXIMUM_NODES:
2961
2962CONFIGURE_MP_MAXIMUM_NODES
2963--------------------------
2964
2965CONSTANT:
2966    ``CONFIGURE_MP_MAXIMUM_NODES``
2967
2968DATA TYPE:
2969    Unsigned integer (``uint32_t``).
2970
2971RANGE:
2972    Positive.
2973
2974DEFAULT VALUE:
2975    The default value is 2.
2976
2977DESCRIPTION:
2978    ``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
2979    multiprocessor system.
2980
2981NOTES:
2982    None.
2983
2984.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
2985
2986.. _CONFIGURE_MP_MAXIMUM_PROXIES:
2987
2988CONFIGURE_MP_MAXIMUM_PROXIES
2989----------------------------
2990
2991CONSTANT:
2992    ``CONFIGURE_MP_MAXIMUM_PROXIES``
2993
2994DATA TYPE:
2995    Unsigned integer (``uint32_t``).
2996
2997RANGE:
2998    Undefined or positive.
2999
3000DEFAULT VALUE:
3001    The default value is 32.
3002
3003DESCRIPTION:
3004    ``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
3005    active thread/task proxies on this node in a multiprocessor system.
3006
3007NOTES:
3008    Since a proxy is used to represent a remote task/thread which is blocking
3009    on this node. This configuration parameter reflects the maximum number of
3010    remote tasks/threads which can be blocked on objects on this node.
3011
3012.. COMMENT: XXX - add xref to proxy discussion in MP chapter
3013
3014.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
3015
3016.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
3017
3018CONFIGURE_MP_MPCI_TABLE_POINTER
3019-------------------------------
3020
3021CONSTANT:
3022    ``CONFIGURE_MP_MPCI_TABLE_POINTER``
3023
3024DATA TYPE:
3025    pointer to ``rtems_mpci_table``
3026
3027RANGE:
3028    undefined or valid pointer
3029
3030DEFAULT VALUE:
3031    This is not defined by default.
3032
3033DESCRIPTION:
3034    ``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
3035    Configuration Table.  The default value of this field is``&MPCI_table``.
3036
3037NOTES:
3038    RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
3039    Multiprocessor System assuming the BSP provides the proper set of
3040    supporting methods.
3041
3042.. index:: CONFIGURE_MP_NODE_NUMBER
3043
3044.. _CONFIGURE_MP_NODE_NUMBER:
3045
3046CONFIGURE_MP_NODE_NUMBER
3047------------------------
3048
3049CONSTANT:
3050    ``CONFIGURE_MP_NODE_NUMBER``
3051
3052DATA TYPE:
3053    Unsigned integer (``uint32_t``).
3054
3055RANGE:
3056    Positive.
3057
3058DEFAULT VALUE:
3059    The default value is ``NODE_NUMBER``, which is assumed to be set by the
3060    compilation environment.
3061
3062DESCRIPTION:
3063    ``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
3064    multiprocessor system.
3065
3066NOTES:
3067    In the RTEMS Multiprocessing Test Suite, the node number is derived from
3068    the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
3069    ``NODE_NUMBER`` set to different values. The test programs behave
3070    differently based upon their node number.
3071
3072PCI Library Configuration
3073=========================
3074
3075This section defines the system configuration parameters supported by
3076``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
3077
3078The PCI Library startup behaviour can be configured in four different ways
3079depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
3080
3081.. index:: PCI_LIB_AUTO
3082
3083``PCI_LIB_AUTO``
3084  Used to enable the PCI auto configuration software. PCI will be automatically
3085  probed, PCI buses enumerated, all devices and bridges will be initialized
3086  using Plug & Play software routines. The PCI device tree will be populated
3087  based on the PCI devices found in the system, PCI devices will be configured
3088  by allocating address region resources automatically in PCI space according
3089  to the BSP or host bridge driver set up.
3090
3091.. index:: PCI_LIB_READ
3092
3093``PCI_LIB_READ``
3094  Used to enable the PCI read configuration software. The current PCI
3095  configuration is read to create the RAM representation (the PCI device tree)
3096  of the PCI devices present. PCI devices are assumed to already have been
3097  initialized and PCI buses enumerated, it is therefore required that a BIOS or
3098  a boot loader has set up configuration space prior to booting into RTEMS.
3099
3100.. index:: PCI_LIB_STATIC
3101
3102``PCI_LIB_STATIC``
3103  Used to enable the PCI static configuration software. The user provides a PCI
3104  tree with information how all PCI devices are to be configured at compile
3105  time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
3106  library will not probe PCI for devices, instead it will assume that all
3107  devices defined by the user are present, it will enumerate the PCI buses and
3108  configure all PCI devices in static configuration accordingly. Since probe
3109  and allocation software is not needed the startup is faster, has smaller
3110  footprint and does not require dynamic memory allocation.
3111
3112.. index:: PCI_LIB_PERIPHERAL
3113
3114``PCI_LIB_PERIPHERAL``
3115  Used to enable the PCI peripheral configuration. It is similar to
3116  ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
3117  devices since PCI peripherals are not allowed to access PCI configuration
3118  space.
3119
3120Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
3121defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
3122Plug & Play is not performed.
3123
3124Event Recording Configuration
3125=============================
3126
3127.. index:: CONFIGURE_RECORD_EXTENSIONS_ENABLED
3128
3129.. _CONFIGURE_RECORD_EXTENSIONS_ENABLED:
3130
3131CONFIGURE_RECORD_EXTENSIONS_ENABLED
3132-----------------------------------
3133
3134CONSTANT:
3135    ``CONFIGURE_RECORD_EXTENSIONS_ENABLED``
3136
3137DATA TYPE:
3138    Boolean feature macro.
3139
3140RANGE:
3141    Defined or undefined.
3142
3143DEFAULT VALUE:
3144    This is not defined by default.
3145
3146DESCRIPTION:
3147    If defined and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
3148    <CONFIGURE_RECORD_PER_PROCESSOR_ITEMS>` is also defined properly, then the
3149    record extensions are enabled.
3150
3151NOTES:
3152    The record extensions capture thread create, start, restart, delete,
3153    switch, begin, exitted and terminate events.
3154
3155.. index:: CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
3156
3157.. _CONFIGURE_RECORD_PER_PROCESSOR_ITEMS:
3158
3159CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
3160------------------------------------
3161
3162CONSTANT:
3163    ``CONFIGURE_RECORD_PER_PROCESSOR_ITEMS``
3164
3165DATA TYPE:
3166    Unsigned integer (``unsigned int``).
3167
3168RANGE:
3169    A power of two greater than or equal to 16.
3170
3171DEFAULT VALUE:
3172    This is not defined by default.
3173
3174DESCRIPTION:
3175    If defined, then a record item buffer of the specified item count is
3176    statically allocated for each configured processor
3177    (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).
3178
3179NOTES:
3180    None.
3181
3182.. _ConfigAda:
3183
3184Ada Configuration
3185=================
3186
3187The GNU Ada runtime library (libgnarl) uses threads, mutexes, condition
3188variables, and signals from the pthreads API.  It uses also thread-local storage
3189for the Ada Task Control Block (ATCB).  From these resources only the threads
3190need to be accounted for in the configuration.  You should include the Ada tasks
3191in your setting of the :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS` configuration
3192option.
3193
3194Obsolete Configuration Options
3195==============================
3196
3197.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
3198
3199CONFIGURE_BDBUF_BUFFER_COUNT
3200----------------------------
3201
3202This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
3203RTEMS 4.10.0.
3204
3205.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
3206
3207CONFIGURE_BDBUF_BUFFER_SIZE
3208---------------------------
3209
3210This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
3211RTEMS 4.10.0.
3212
3213.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
3214
3215CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
3216--------------------------------------
3217
3218This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
3219RTEMS 5.1.
3220
3221.. index:: CONFIGURE_ENABLE_GO
3222
3223CONFIGURE_ENABLE_GO
3224-------------------
3225
3226This configuration option is obsolete since RTEMS 5.1.
3227
3228.. index:: CONFIGURE_GNAT_RTEMS
3229
3230CONFIGURE_GNAT_RTEMS
3231--------------------
3232
3233This configuration option was present in all RTEMS versions since at 1997 and is
3234obsolete since RTEMS 5.1.  See also :ref:`ConfigAda`.
3235
3236.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
3237
3238CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
3239-------------------------------------
3240
3241This configuration option is obsolete since RTEMS 5.1.
3242
3243.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
3244
3245CONFIGURE_HAS_OWN_BDBUF_TABLE
3246-----------------------------
3247
3248This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
3249RTEMS 4.10.0.
3250
3251.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
3252
3253CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
3254-------------------------------------
3255
3256This configuration option was present in all RTEMS versions since at least 1995
3257and is obsolete since RTEMS 5.1.
3258
3259.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
3260
3261.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
3262
3263CONFIGURE_HAS_OWN_INIT_TASK_TABLE
3264---------------------------------
3265
3266This configuration option was present in all RTEMS versions since at least 1995
3267and is obsolete since RTEMS 5.1.  If you used this configuration option or you
3268think that there should be a way to configure more than one Classic API
3269initialization task, then please ask on the :r:list:`users`.
3270
3271.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
3272
3273CONFIGURE_HAS_OWN_MOUNT_TABLE
3274-----------------------------
3275
3276This configuration option is obsolete since RTEMS 5.1.
3277
3278.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
3279
3280CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
3281---------------------------------------
3282
3283This configuration option is obsolete since RTEMS 5.1.
3284
3285.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
3286
3287CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
3288--------------------------------
3289
3290This configuration option was present in all RTEMS versions since at 1998 and is
3291obsolete since RTEMS 5.1.  See also :ref:`CONFIGURE_MAXIMUM_FILE_DESCRIPTORS`.
3292
3293.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
3294
3295CONFIGURE_MAXIMUM_ADA_TASKS
3296---------------------------
3297
3298This configuration option was present in all RTEMS versions since at 1997 and is
3299obsolete since RTEMS 5.1.  See also :ref:`ConfigAda`.
3300
3301.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
3302
3303CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
3304--------------------------------
3305
3306This configuration option was present in all RTEMS versions since at 1997 and is
3307obsolete since RTEMS 5.1.  See also :ref:`ConfigAda`.
3308
3309.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
3310
3311CONFIGURE_MAXIMUM_GO_CHANNELS
3312-----------------------------
3313
3314This configuration option is obsolete since RTEMS 5.1.
3315
3316.. index:: CONFIGURE_MAXIMUM_GOROUTINES
3317
3318CONFIGURE_MAXIMUM_GOROUTINES
3319----------------------------
3320
3321This configuration option is obsolete since RTEMS 5.1.
3322
3323.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
3324
3325CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
3326---------------------------------
3327
3328This configuration option is obsolete since RTEMS 5.1.
3329
3330.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
3331
3332CONFIGURE_NUMBER_OF_TERMIOS_PORTS
3333---------------------------------
3334
3335This configuration option is obsolete since RTEMS 5.1.
3336
3337.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
3338
3339CONFIGURE_MAXIMUM_POSIX_BARRIERS
3340--------------------------------
3341
3342This configuration option is obsolete since RTEMS 5.1.
3343
3344.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
3345
3346CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
3347-------------------------------------------
3348
3349This configuration option is obsolete since RTEMS 5.1.
3350
3351.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
3352
3353CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
3354-------------------------------
3355
3356This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
3357RTEMS 5.1.
3358
3359.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
3360
3361CONFIGURE_MAXIMUM_POSIX_MUTEXES
3362-------------------------------
3363
3364This configuration option is obsolete since RTEMS 5.1.
3365
3366.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
3367
3368CONFIGURE_MAXIMUM_POSIX_RWLOCKS
3369-------------------------------
3370
3371This configuration option is obsolete since RTEMS 5.1.
3372
3373.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
3374
3375CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
3376---------------------------------
3377
3378This configuration option is obsolete since RTEMS 5.1.
3379
3380.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
3381
3382.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
3383
3384CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
3385-----------------------------------------
3386
3387This configuration option was present in all RTEMS versions since at least 1995
3388and is obsolete since RTEMS 5.1.  If you used this configuration option or you
3389think that there should be a way to configure more than one POSIX initialization
3390thread, then please ask on the  :r:list:`users`.
3391
3392.. index:: CONFIGURE_SMP_APPLICATION
3393
3394CONFIGURE_SMP_APPLICATION
3395-------------------------
3396
3397This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
3398RTEMS 5.1.
3399
3400.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
3401
3402CONFIGURE_SMP_MAXIMUM_PROCESSORS
3403--------------------------------
3404
3405This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
3406RTEMS 5.1.  See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
3407
3408.. index:: CONFIGURE_TERMIOS_DISABLED
3409
3410CONFIGURE_TERMIOS_DISABLED
3411--------------------------
3412
3413This configuration option is obsolete since RTEMS 5.1.
Note: See TracBrowser for help on using the repository browser.