source: rtems/cpukit/doxygen/appl-config.h @ 4e5327ff

Last change on this file since 4e5327ff was 4e5327ff, checked in by Sebastian Huber <sebastian.huber@…>, on 09/18/20 at 06:19:37

doxygen: Wrap long lines

  • Property mode set to 100644
File size: 137.3 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/*
4 * Copyright (C) 2019, 2020 embedded brains GmbH (http://www.embedded-brains.de)
5 * Copyright (C) 2010 Gedare Bloom
6 * Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/*
31 * This file was automatically generated.  Do not edit it manually.
32 * Please have a look at
33 *
34 * https://docs.rtems.org/branches/master/eng/req/howto.html
35 *
36 * for information how to maintain and re-generate this file.
37 */
38
39/**
40 * @defgroup RTEMSApplConfig Application Configuration Options
41 *
42 * @ingroup RTEMSAPI
43 */
44
45/**
46 * @defgroup RTEMSApplConfigBlockDeviceCacheConfiguration \
47 *   Block Device Cache Configuration
48 *
49 * @ingroup RTEMSApplConfig
50 *
51 * This section describes configuration options related to the Block Device
52 * Cache (bdbuf).
53 *
54 * @{
55 */
56
57/**
58 * @brief This configuration option is a boolean feature define.
59 *
60 * In case this configuration option is defined, then the Block Device Cache is
61 * initialized during system initialization.
62 *
63 * @par Default Configuration
64 * If this configuration option is undefined, then the described feature is not
65 * enabled.
66 *
67 * @par Notes
68 * Each option of the Block Device Cache (bdbuf) configuration can be
69 * explicitly set by the user with the configuration options below.  The Block
70 * Device Cache is used for example by the RFS and DOSFS filesystems.
71 */
72#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
73
74/**
75 * @brief This configuration option is an integer define.
76 *
77 * The value of this configuration option defines the maximum size of a buffer
78 * in bytes.
79 *
80 * @par Default Value
81 * The default value is 4096.
82 *
83 * @par Value Constraints
84 * @parblock
85 * The value of this configuration option shall satisfy all of the following
86 * constraints:
87 *
88 * * It shall be greater than or equal to 0.
89 *
90 * * It shall be an integral multiple of #CONFIGURE_BDBUF_BUFFER_MIN_SIZE.
91 * @endparblock
92 */
93#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE
94
95/**
96 * @brief This configuration option is an integer define.
97 *
98 * The value of this configuration option defines the minimum size of a buffer
99 * in bytes.
100 *
101 * @par Default Value
102 * The default value is 512.
103 *
104 * @par Value Constraints
105 * The value of this configuration option shall be greater than or equal to 0
106 * and less than or equal to <a
107 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
108 */
109#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE
110
111/**
112 * @brief This configuration option is an integer define.
113 *
114 * The value of this configuration option defines the size of the cache memory
115 * in bytes.
116 *
117 * @par Default Value
118 * The default value is 32768.
119 *
120 * @par Value Constraints
121 * The value of this configuration option shall be greater than or equal to 0
122 * and less than or equal to <a
123 * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
124 */
125#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
126
127/**
128 * @brief This configuration option is an integer define.
129 *
130 * The value of this configuration option defines the maximum blocks per
131 * read-ahead request.
132 *
133 * @par Default Value
134 * The default value is 0.
135 *
136 * @par Value Constraints
137 * The value of this configuration option shall be greater than or equal to 0
138 * and less than or equal to <a
139 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
140 *
141 * @par Notes
142 * A value of 0 disables the read-ahead task (default).  The read-ahead task
143 * will issue speculative read transfers if a sequential access pattern is
144 * detected.  This can improve the performance on some systems.
145 */
146#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
147
148/**
149 * @brief This configuration option is an integer define.
150 *
151 * The value of this configuration option defines the maximum blocks per write
152 * request.
153 *
154 * @par Default Value
155 * The default value is 16.
156 *
157 * @par Value Constraints
158 * The value of this configuration option shall be greater than or equal to 0
159 * and less than or equal to <a
160 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
161 */
162#define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
163
164/**
165 * @brief This configuration option is an integer define.
166 *
167 * The value of this configuration option defines the read-ahead task priority.
168 *
169 * @par Default Value
170 * The default value is 15.
171 *
172 * @par Value Constraints
173 * The value of this configuration option shall be a valid Classic API task
174 * priority.  The set of valid task priorities is scheduler-specific.
175 */
176#define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
177
178/**
179 * @brief This configuration option is an integer define.
180 *
181 * The value of this configuration option defines the task stack size of the
182 * Block Device Cache tasks in bytes.
183 *
184 * @par Default Value
185 * The default value is #RTEMS_MINIMUM_STACK_SIZE.
186 *
187 * @par Value Constraints
188 * @parblock
189 * The value of this configuration option shall satisfy all of the following
190 * constraints:
191 *
192 * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
193 *
194 * * It shall be less than or equal to a BSP-specific and application-specific
195 *   value which depends on the size of the memory available to the
196 *   application.
197 *
198 * * It shall be small enough so that the task stack space calculation carried
199 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
200 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
201 * @endparblock
202 */
203#define CONFIGURE_BDBUF_TASK_STACK_SIZE
204
205/**
206 * @brief This configuration option is an integer define.
207 *
208 * The value of this configuration option defines the swapout task maximum
209 * block hold time in milliseconds.
210 *
211 * @par Default Value
212 * The default value is 1000.
213 *
214 * @par Value Constraints
215 * The value of this configuration option shall be greater than or equal to 0
216 * and less than or equal to <a
217 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
218 */
219#define CONFIGURE_SWAPOUT_BLOCK_HOLD
220
221/**
222 * @brief This configuration option is an integer define.
223 *
224 * The value of this configuration option defines the swapout task swap period
225 * in milliseconds.
226 *
227 * @par Default Value
228 * The default value is 250.
229 *
230 * @par Value Constraints
231 * The value of this configuration option shall be greater than or equal to 0
232 * and less than or equal to <a
233 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
234 */
235#define CONFIGURE_SWAPOUT_SWAP_PERIOD
236
237/**
238 * @brief This configuration option is an integer define.
239 *
240 * The value of this configuration option defines the swapout task priority.
241 *
242 * @par Default Value
243 * The default value is 15.
244 *
245 * @par Value Constraints
246 * The value of this configuration option shall be a valid Classic API task
247 * priority.  The set of valid task priorities is scheduler-specific.
248 */
249#define CONFIGURE_SWAPOUT_TASK_PRIORITY
250
251/**
252 * @brief This configuration option is an integer define.
253 *
254 * The value of this configuration option defines the swapout worker task
255 * count.
256 *
257 * @par Default Value
258 * The default value is 0.
259 *
260 * @par Value Constraints
261 * The value of this configuration option shall be greater than or equal to 0
262 * and less than or equal to <a
263 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
264 */
265#define CONFIGURE_SWAPOUT_WORKER_TASKS
266
267/**
268 * @brief This configuration option is an integer define.
269 *
270 * The value of this configuration option defines the swapout worker task
271 * priority.
272 *
273 * @par Default Value
274 * The default value is 15.
275 *
276 * @par Value Constraints
277 * The value of this configuration option shall be a valid Classic API task
278 * priority.  The set of valid task priorities is scheduler-specific.
279 */
280#define CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
281
282/** @} */
283
284/**
285 * @defgroup RTEMSApplConfigBSPRelatedConfigurationOptions \
286 *   BSP Related Configuration Options
287 *
288 * @ingroup RTEMSApplConfig
289 *
290 * This section describes configuration options related to the BSP.  Some
291 * configuration options may have a BSP-specific setting which is defined by
292 * ``<bsp.h>``.  The BSP-specific settings can be disabled by the
293 * #CONFIGURE_DISABLE_BSP_SETTINGS configuration option.
294 *
295 * @{
296 */
297
298/**
299 * @brief This configuration option is an initializer define.
300 *
301 * If
302 *
303 * * this configuration option is defined by the BSP
304 *
305 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
306 *
307 * then the value of this configuration option defines the default value of
308 * #CONFIGURE_IDLE_TASK_BODY.
309 *
310 * @par Default Value
311 * The default value is BSP-specific.
312 *
313 * @par Value Constraints
314 * The value of this configuration option shall be defined to a valid function
315 * pointer of the type ``void *( *idle_body )( uintptr_t )``.
316 *
317 * @par Notes
318 * As it has knowledge of the specific CPU model, system controller logic, and
319 * peripheral buses, a BSP-specific IDLE task may be capable of turning
320 * components off to save power during extended periods of no task activity.
321 */
322#define BSP_IDLE_TASK_BODY
323
324/**
325 * @brief This configuration option is an integer define.
326 *
327 * If
328 *
329 * * this configuration option is defined by the BSP
330 *
331 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
332 *
333 * then the value of this configuration option defines the default value of
334 * #CONFIGURE_IDLE_TASK_STACK_SIZE.
335 *
336 * @par Default Value
337 * The default value is BSP-specific.
338 *
339 * @par Value Constraints
340 * @parblock
341 * The value of this configuration option shall satisfy all of the following
342 * constraints:
343 *
344 * * It shall be greater than or equal to a BSP-specific and
345 *   application-specific minimum value.
346 *
347 * * It shall be small enough so that the IDLE task stack area calculation
348 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
349 *   <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
350 * @endparblock
351 */
352#define BSP_IDLE_TASK_STACK_SIZE
353
354/**
355 * @brief This configuration option is an initializer define.
356 *
357 * If
358 *
359 * * this configuration option is defined by the BSP
360 *
361 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
362 *
363 * then the value of this configuration option is used to initialize the table
364 * of initial user extensions.
365 *
366 * @par Default Value
367 * The default value is BSP-specific.
368 *
369 * @par Value Constraints
370 * The value of this configuration option shall be a list of initializers for
371 * structures of type ::rtems_extensions_table.
372 *
373 * @par Notes
374 * The value of this configuration option is placed after the entries of all
375 * other initial user extensions.
376 */
377#define BSP_INITIAL_EXTENSION
378
379/**
380 * @brief This configuration option is an integer define.
381 *
382 * If
383 *
384 * * this configuration option is defined by the BSP
385 *
386 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
387 *
388 * then the value of this configuration option defines the default value of
389 * #CONFIGURE_INTERRUPT_STACK_SIZE.
390 *
391 * @par Default Value
392 * The default value is BSP-specific.
393 *
394 * @par Value Constraints
395 * @parblock
396 * The value of this configuration option shall satisfy all of the following
397 * constraints:
398 *
399 * * It shall be greater than or equal to a BSP-specific and
400 *   application-specific minimum value.
401 *
402 * * It shall be small enough so that the interrupt stack area calculation
403 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
404 *   <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
405 *
406 * * It shall be aligned according to #CPU_INTERRUPT_STACK_ALIGNMENT.
407 * @endparblock
408 */
409#define BSP_INTERRUPT_STACK_SIZE
410
411/**
412 * @brief This configuration option is an initializer define.
413 *
414 * If
415 *
416 * * this configuration option is defined by the BSP
417 *
418 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
419 *
420 * then the value of this configuration option is used to initialize the table
421 * of initial user extensions.
422 *
423 * @par Default Value
424 * The default value is BSP-specific.
425 *
426 * @par Value Constraints
427 * The value of this configuration option shall be a list of initializers for
428 * structures of type ::rtems_extensions_table.
429 *
430 * @par Notes
431 * The value of this configuration option is placed before the entries of all
432 * other initial user extensions (including
433 * #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS).
434 */
435#define CONFIGURE_BSP_PREREQUISITE_DRIVERS
436
437/**
438 * @brief This configuration option is a boolean feature define.
439 *
440 * In case this configuration option is defined, then the following BSP related
441 * configuration options are undefined:
442 *
443 * * #BSP_IDLE_TASK_BODY
444 *
445 * * #BSP_IDLE_TASK_STACK_SIZE
446 *
447 * * #BSP_INITIAL_EXTENSION
448 *
449 * * #BSP_INTERRUPT_STACK_SIZE
450 *
451 * * #CONFIGURE_BSP_PREREQUISITE_DRIVERS
452 *
453 * * #CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
454 *
455 * @par Default Configuration
456 * If this configuration option is undefined, then the described feature is not
457 * enabled.
458 */
459#define CONFIGURE_DISABLE_BSP_SETTINGS
460
461/**
462 * @brief This configuration option is a boolean feature define.
463 *
464 * If
465 *
466 * * this configuration option is defined by the BSP
467 *
468 * * and #CONFIGURE_DISABLE_BSP_SETTINGS is undefined,
469 *
470 * then not all memory is made available to the C Program Heap immediately at
471 * system initialization time.  When malloc() or other standard memory
472 * allocation functions are unable to allocate memory, they will call the BSP
473 * supplied sbrk() function to obtain more memory.
474 *
475 * @par Default Configuration
476 * If this configuration option is undefined, then the described feature is not
477 * enabled.
478 *
479 * @par Notes
480 * This option should not be defined by the application. Only the BSP knows how
481 * it allocates memory to the C Program Heap.
482 */
483#define CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
484
485/** @} */
486
487/**
488 * @defgroup RTEMSApplConfigClassicAPIConfiguration Classic API Configuration
489 *
490 * @ingroup RTEMSApplConfig
491 *
492 * This section describes configuration options related to the Classic API.
493 *
494 * @{
495 */
496
497/**
498 * @brief This configuration option is an integer define.
499 *
500 * The value of this configuration option defines the maximum number of Classic
501 * API Barriers that can be concurrently active.
502 *
503 * @par Default Value
504 * The default value is 0.
505 *
506 * @par Value Constraints
507 * @parblock
508 * The value of this configuration option shall satisfy all of the following
509 * constraints:
510 *
511 * * It shall be greater than or equal to 0.
512 *
513 * * It shall be less than or equal to 65535.
514 *
515 * * It shall be less than or equal to a BSP-specific and application-specific
516 *   value which depends on the size of the memory available to the
517 *   application.
518 *
519 * * It may be defined through rtems_resource_unlimited() the enable unlimited
520 *   objects for this object class, if the value passed to
521 *   rtems_resource_unlimited() satisfies all other constraints of this
522 *   configuration option.
523 * @endparblock
524 *
525 * @par Notes
526 * This object class can be configured in unlimited allocation mode, see <a
527 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
528 * Objects</a>.
529 */
530#define CONFIGURE_MAXIMUM_BARRIERS
531
532/**
533 * @brief This configuration option is an integer define.
534 *
535 * The value of this configuration option defines the maximum number of Classic
536 * API Message Queues that can be concurrently active.
537 *
538 * @par Default Value
539 * The default value is 0.
540 *
541 * @par Value Constraints
542 * @parblock
543 * The value of this configuration option shall satisfy all of the following
544 * constraints:
545 *
546 * * It shall be greater than or equal to 0.
547 *
548 * * It shall be less than or equal to 65535.
549 *
550 * * It shall be less than or equal to a BSP-specific and application-specific
551 *   value which depends on the size of the memory available to the
552 *   application.
553 *
554 * * It may be defined through rtems_resource_unlimited() the enable unlimited
555 *   objects for this object class, if the value passed to
556 *   rtems_resource_unlimited() satisfies all other constraints of this
557 *   configuration option.
558 * @endparblock
559 *
560 * @par Notes
561 * This object class can be configured in unlimited allocation mode, see <a
562 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
563 * Objects</a>.  You have to account for the memory used to store the messages
564 * of each message queue, see #CONFIGURE_MESSAGE_BUFFER_MEMORY.
565 */
566#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES
567
568/**
569 * @brief This configuration option is an integer define.
570 *
571 * The value of this configuration option defines the maximum number of Classic
572 * API Partitions that can be concurrently active.
573 *
574 * @par Default Value
575 * The default value is 0.
576 *
577 * @par Value Constraints
578 * @parblock
579 * The value of this configuration option shall satisfy all of the following
580 * constraints:
581 *
582 * * It shall be greater than or equal to 0.
583 *
584 * * It shall be less than or equal to 65535.
585 *
586 * * It shall be less than or equal to a BSP-specific and application-specific
587 *   value which depends on the size of the memory available to the
588 *   application.
589 *
590 * * It may be defined through rtems_resource_unlimited() the enable unlimited
591 *   objects for this object class, if the value passed to
592 *   rtems_resource_unlimited() satisfies all other constraints of this
593 *   configuration option.
594 * @endparblock
595 *
596 * @par Notes
597 * This object class can be configured in unlimited allocation mode, see <a
598 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
599 * Objects</a>.
600 */
601#define CONFIGURE_MAXIMUM_PARTITIONS
602
603/**
604 * @brief This configuration option is an integer define.
605 *
606 * The value of this configuration option defines the maximum number of Classic
607 * API Periods that can be concurrently active.
608 *
609 * @par Default Value
610 * The default value is 0.
611 *
612 * @par Value Constraints
613 * @parblock
614 * The value of this configuration option shall satisfy all of the following
615 * constraints:
616 *
617 * * It shall be greater than or equal to 0.
618 *
619 * * It shall be less than or equal to 65535.
620 *
621 * * It shall be less than or equal to a BSP-specific and application-specific
622 *   value which depends on the size of the memory available to the
623 *   application.
624 *
625 * * It may be defined through rtems_resource_unlimited() the enable unlimited
626 *   objects for this object class, if the value passed to
627 *   rtems_resource_unlimited() satisfies all other constraints of this
628 *   configuration option.
629 * @endparblock
630 *
631 * @par Notes
632 * This object class can be configured in unlimited allocation mode, see <a
633 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
634 * Objects</a>.
635 */
636#define CONFIGURE_MAXIMUM_PERIODS
637
638/**
639 * @brief This configuration option is an integer define.
640 *
641 * The value of this configuration option defines the maximum number of Classic
642 * API Ports that can be concurrently active.
643 *
644 * @par Default Value
645 * The default value is 0.
646 *
647 * @par Value Constraints
648 * @parblock
649 * The value of this configuration option shall satisfy all of the following
650 * constraints:
651 *
652 * * It shall be greater than or equal to 0.
653 *
654 * * It shall be less than or equal to 65535.
655 *
656 * * It shall be less than or equal to a BSP-specific and application-specific
657 *   value which depends on the size of the memory available to the
658 *   application.
659 *
660 * * It may be defined through rtems_resource_unlimited() the enable unlimited
661 *   objects for this object class, if the value passed to
662 *   rtems_resource_unlimited() satisfies all other constraints of this
663 *   configuration option.
664 * @endparblock
665 *
666 * @par Notes
667 * This object class can be configured in unlimited allocation mode, see <a
668 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
669 * Objects</a>.
670 */
671#define CONFIGURE_MAXIMUM_PORTS
672
673/**
674 * @brief This configuration option is an integer define.
675 *
676 * The value of this configuration option defines the maximum number of Classic
677 * API Regions that can be concurrently active.
678 *
679 * @par Default Value
680 * The default value is 0.
681 *
682 * @par Value Constraints
683 * @parblock
684 * The value of this configuration option shall satisfy all of the following
685 * constraints:
686 *
687 * * It shall be greater than or equal to 0.
688 *
689 * * It shall be less than or equal to 65535.
690 *
691 * * It shall be less than or equal to a BSP-specific and application-specific
692 *   value which depends on the size of the memory available to the
693 *   application.
694 *
695 * * It may be defined through rtems_resource_unlimited() the enable unlimited
696 *   objects for this object class, if the value passed to
697 *   rtems_resource_unlimited() satisfies all other constraints of this
698 *   configuration option.
699 * @endparblock
700 *
701 * @par Notes
702 * This object class can be configured in unlimited allocation mode, see <a
703 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
704 * Objects</a>.
705 */
706#define CONFIGURE_MAXIMUM_REGIONS
707
708/**
709 * @brief This configuration option is an integer define.
710 *
711 * The value of this configuration option defines the maximum number of Classic
712 * API Semaphore that can be concurrently active.
713 *
714 * @par Default Value
715 * The default value is 0.
716 *
717 * @par Value Constraints
718 * @parblock
719 * The value of this configuration option shall satisfy all of the following
720 * constraints:
721 *
722 * * It shall be greater than or equal to 0.
723 *
724 * * It shall be less than or equal to 65535.
725 *
726 * * It shall be less than or equal to a BSP-specific and application-specific
727 *   value which depends on the size of the memory available to the
728 *   application.
729 *
730 * * It may be defined through rtems_resource_unlimited() the enable unlimited
731 *   objects for this object class, if the value passed to
732 *   rtems_resource_unlimited() satisfies all other constraints of this
733 *   configuration option.
734 * @endparblock
735 *
736 * @par Notes
737 * @parblock
738 * This object class can be configured in unlimited allocation mode, see <a
739 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
740 * Objects</a>.
741 *
742 * In SMP configurations, the size of a Semaphore Control Block depends on the
743 * scheduler count (see <a
744 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html#configuration-step-3-scheduler-table>Configuration
745 * Step 3 - Scheduler Table</a>).  The semaphores using the <a
746 * href=https://docs.rtems.org/branches/master/c-user/key_concepts.html#multiprocessor-resource-sharing-protocol-mrsp>Multiprocessor
747 * Resource Sharing Protocol (MrsP)</a> need a ceiling priority per scheduler.
748 * @endparblock
749 */
750#define CONFIGURE_MAXIMUM_SEMAPHORES
751
752/**
753 * @brief This configuration option is an integer define.
754 *
755 * The value of this configuration option defines the maximum number of Classic
756 * API Tasks that can be concurrently active.
757 *
758 * @par Default Value
759 * The default value is 0.
760 *
761 * @par Value Constraints
762 * @parblock
763 * The value of this configuration option shall satisfy all of the following
764 * constraints:
765 *
766 * * It shall be greater than or equal to 0.
767 *
768 * * It shall be less than or equal to 65535.
769 *
770 * * It shall be less than or equal to a BSP-specific and application-specific
771 *   value which depends on the size of the memory available to the
772 *   application.
773 *
774 * * It shall be small enough so that the task stack space calculation carried
775 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
776 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
777 *
778 * * It may be defined through rtems_resource_unlimited() the enable unlimited
779 *   objects for this object class, if the value passed to
780 *   rtems_resource_unlimited() satisfies all other constraints of this
781 *   configuration option.
782 * @endparblock
783 *
784 * @par Notes
785 * @parblock
786 * This object class can be configured in unlimited allocation mode, see <a
787 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
788 * Objects</a>.
789 *
790 * The calculations for the required memory in the RTEMS Workspace for tasks
791 * assume that each task has a minimum stack size and has floating point
792 * support enabled.  The configuration option #CONFIGURE_EXTRA_TASK_STACKS is
793 * used to specify task stack requirements *above* the minimum size required.
794 *
795 * The maximum number of POSIX threads is specified by
796 * #CONFIGURE_MAXIMUM_POSIX_THREADS.
797 *
798 * A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
799 * assumption that all tasks have floating point enabled. This would require
800 * the addition of a new configuration parameter to specify the number of tasks
801 * which enable floating point support.
802 * @endparblock
803 */
804#define CONFIGURE_MAXIMUM_TASKS
805
806/**
807 * @brief This configuration option is an integer define.
808 *
809 * If the value of this configuration option is greater than zero, then it
810 * defines the maximum thread-local storage size, otherwise the thread-local
811 * storage size is defined by the linker depending on the thread-local storage
812 * objects used by the application in the statically-linked executable.
813 *
814 * @par Default Value
815 * The default value is 0.
816 *
817 * @par Value Constraints
818 * The value of this configuration option shall be greater than or equal to 0
819 * and less than or equal to <a
820 * href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
821 *
822 * @par Notes
823 * @parblock
824 * This configuration option can be used to reserve space for the dynamic
825 * linking of modules with thread-local storage objects.
826 *
827 * If the thread-local storage size defined by the thread-local storage objects
828 * used by the application in the statically-linked executable is greater than
829 * a non-zero value of this configuration option, then a fatal error will occur
830 * during system initialization.
831 *
832 * Use RTEMS_ALIGN_UP() and #RTEMS_TASK_STORAGE_ALIGNMENT to adjust the size to
833 * meet the minimum alignment requirement of a thread-local storage area.
834 *
835 * The actual thread-local storage size is determined when the application
836 * executable is linked.  The ``rtems-exeinfo`` command line tool included in
837 * the RTEMS Tools can be used to obtain the thread-local storage size and
838 * alignment of an application executable.
839 * @endparblock
840 */
841#define CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
842
843/**
844 * @brief This configuration option is an integer define.
845 *
846 * The value of this configuration option defines the maximum number of Classic
847 * API Timers that can be concurrently active.
848 *
849 * @par Default Value
850 * The default value is 0.
851 *
852 * @par Value Constraints
853 * @parblock
854 * The value of this configuration option shall satisfy all of the following
855 * constraints:
856 *
857 * * It shall be greater than or equal to 0.
858 *
859 * * It shall be less than or equal to 65535.
860 *
861 * * It shall be less than or equal to a BSP-specific and application-specific
862 *   value which depends on the size of the memory available to the
863 *   application.
864 *
865 * * It may be defined through rtems_resource_unlimited() the enable unlimited
866 *   objects for this object class, if the value passed to
867 *   rtems_resource_unlimited() satisfies all other constraints of this
868 *   configuration option.
869 * @endparblock
870 *
871 * @par Notes
872 * This object class can be configured in unlimited allocation mode, see <a
873 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
874 * Objects</a>.
875 */
876#define CONFIGURE_MAXIMUM_TIMERS
877
878/**
879 * @brief This configuration option is an integer define.
880 *
881 * The value of this configuration option defines the maximum number of Classic
882 * API User Extensions that can be concurrently active.
883 *
884 * @par Default Value
885 * The default value is 0.
886 *
887 * @par Value Constraints
888 * @parblock
889 * The value of this configuration option shall satisfy all of the following
890 * constraints:
891 *
892 * * It shall be greater than or equal to 0.
893 *
894 * * It shall be less than or equal to 65535.
895 *
896 * * It shall be less than or equal to a BSP-specific and application-specific
897 *   value which depends on the size of the memory available to the
898 *   application.
899 * @endparblock
900 *
901 * @par Notes
902 * This object class cannot be configured in unlimited allocation mode.
903 */
904#define CONFIGURE_MAXIMUM_USER_EXTENSIONS
905
906/**
907 * @brief This configuration option is an integer define.
908 *
909 * The value of this configuration option defines the minimum count of Classic
910 * API Tasks which are constructed by rtems_task_construct().
911 *
912 * @par Default Value
913 * The default value is 0.
914 *
915 * @par Value Constraints
916 * The value of this configuration option shall be greater than or equal to 0
917 * and less than or equal to #CONFIGURE_MAXIMUM_TASKS.
918 *
919 * @par Notes
920 * By default, the calculation for the required memory in the RTEMS Workspace
921 * for tasks assumes that all Classic API Tasks are created by
922 * rtems_task_create().  This configuration option can be used to reduce the
923 * required memory for the system-provided task storage areas since tasks
924 * constructed by rtems_task_construct() use a user-provided task storage area.
925 */
926#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
927
928/** @} */
929
930/**
931 * @defgroup RTEMSApplConfigClassicAPIInitializationTaskConfiguration \
932 *   Classic API Initialization Task Configuration
933 *
934 * @ingroup RTEMSApplConfig
935 *
936 * This section describes configuration options related to the Classic API
937 * initialization task.
938 *
939 * @{
940 */
941
942/**
943 * @brief This configuration option is an integer define.
944 *
945 * The value of this configuration option defines task argument of the Classic
946 * API initialization task.
947 *
948 * @par Default Value
949 * The default value is 0.
950 *
951 * @par Value Constraints
952 * The value of this configuration option shall be a valid integer of type
953 * ::rtems_task_argument.
954 */
955#define CONFIGURE_INIT_TASK_ARGUMENTS
956
957/**
958 * @brief This configuration option is an integer define.
959 *
960 * The value of this configuration option defines the task attributes of the
961 * Classic API initialization task.
962 *
963 * @par Default Value
964 * The default value is #RTEMS_DEFAULT_ATTRIBUTES.
965 *
966 * @par Value Constraints
967 * The value of this configuration option shall be a valid task attribute set.
968 */
969#define CONFIGURE_INIT_TASK_ATTRIBUTES
970
971/**
972 * @brief This configuration option is an initializer define.
973 *
974 * The value of this configuration option initializes the entry point of the
975 * Classic API initialization task.
976 *
977 * @par Default Value
978 * The default value is ``Init``.
979 *
980 * @par Value Constraints
981 * The value of this configuration option shall be defined to a valid function
982 * pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
983 *
984 * @par Notes
985 * The application shall provide the function referenced by this configuration
986 * option.
987 */
988#define CONFIGURE_INIT_TASK_ENTRY_POINT
989
990/**
991 * @brief This configuration option is an integer define.
992 *
993 * The value of this configuration option defines the initial execution mode of
994 * the Classic API initialization task.
995 *
996 * @par Default Value
997 * In SMP  configurations, the default value is #RTEMS_DEFAULT_MODES otherwise
998 * the default value is #RTEMS_NO_PREEMPT.
999 *
1000 * @par Value Constraints
1001 * The value of this configuration option shall be a valid task mode set.
1002 */
1003#define CONFIGURE_INIT_TASK_INITIAL_MODES
1004
1005/**
1006 * @brief This configuration option is an integer define.
1007 *
1008 * The value of this configuration option defines the name of the Classic API
1009 * initialization task.
1010 *
1011 * @par Default Value
1012 * The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
1013 *
1014 * @par Value Constraints
1015 * The value of this configuration option shall be a valid integer of type
1016 * ::rtems_name.
1017 *
1018 * @par Notes
1019 * Use rtems_build_name() to define the task name.
1020 */
1021#define CONFIGURE_INIT_TASK_NAME
1022
1023/**
1024 * @brief This configuration option is an integer define.
1025 *
1026 * The value of this configuration option defines the initial priority of the
1027 * Classic API initialization task.
1028 *
1029 * @par Default Value
1030 * The default value is 1.
1031 *
1032 * @par Value Constraints
1033 * The value of this configuration option shall be a valid Classic API task
1034 * priority.  The set of valid task priorities is scheduler-specific.
1035 */
1036#define CONFIGURE_INIT_TASK_PRIORITY
1037
1038/**
1039 * @brief This configuration option is an integer define.
1040 *
1041 * The value of this configuration option defines the task stack size of the
1042 * Classic API initialization task.
1043 *
1044 * @par Default Value
1045 * The default value is #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
1046 *
1047 * @par Value Constraints
1048 * @parblock
1049 * The value of this configuration option shall satisfy all of the following
1050 * constraints:
1051 *
1052 * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
1053 *
1054 * * It shall be small enough so that the task stack space calculation carried
1055 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
1056 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
1057 * @endparblock
1058 */
1059#define CONFIGURE_INIT_TASK_STACK_SIZE
1060
1061/**
1062 * @brief This configuration option is a boolean feature define.
1063 *
1064 * In case this configuration option is defined, then exactly one Classic API
1065 * initialization task is configured.
1066 *
1067 * @par Default Configuration
1068 * If this configuration option is undefined, then the described feature is not
1069 * enabled.
1070 *
1071 * @par Notes
1072 * @parblock
1073 * The application shall define exactly one of the following configuration
1074 * options
1075 *
1076 * * ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``,
1077 *
1078 * * #CONFIGURE_POSIX_INIT_THREAD_TABLE, or
1079 *
1080 * * #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
1081 *
1082 * otherwise a compile time error in the configuration file will occur.
1083 * @endparblock
1084 */
1085#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
1086
1087/** @} */
1088
1089/**
1090 * @defgroup RTEMSApplConfigDeviceDriverConfiguration \
1091 *   Device Driver Configuration
1092 *
1093 * @ingroup RTEMSApplConfig
1094 *
1095 * This section describes configuration options related to the device drivers.
1096 * Note that network device drivers are not covered by the following options.
1097 *
1098 * @{
1099 */
1100
1101/**
1102 * @brief This configuration option is a boolean feature define.
1103 *
1104 * In case this configuration option is defined, then **no** Clock Driver is
1105 * initialized during system initialization.
1106 *
1107 * @par Default Configuration
1108 * If this configuration option is undefined, then a Clock Driver may be
1109 * initialized during system initialization.
1110 *
1111 * @par Notes
1112 * @parblock
1113 * This configuration parameter is intended to prevent the common user error of
1114 * using the Hello World example as the baseline for an application and leaving
1115 * out a clock tick source.
1116 *
1117 * The application shall define exactly one of the following configuration
1118 * options
1119 *
1120 * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER,
1121 *
1122 * * ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``, or
1123 *
1124 * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER,
1125 *
1126 * otherwise a compile time error in the configuration file will occur.
1127 * @endparblock
1128 */
1129#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
1130
1131/**
1132 * @brief This configuration option is an initializer define.
1133 *
1134 * The value of this configuration option is used to initialize the Device
1135 * Driver Table.
1136 *
1137 * @par Default Value
1138 * The default value is the empty list.
1139 *
1140 * @par Value Constraints
1141 * The value of this configuration option shall be a list of initializers for
1142 * structures of type ::rtems_driver_address_table.
1143 *
1144 * @par Notes
1145 * @parblock
1146 * The value of this configuration option is placed after the entries of other
1147 * device driver configuration options.
1148 *
1149 * See #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS for an alternative placement
1150 * of application device driver initializers.
1151 * @endparblock
1152 */
1153#define CONFIGURE_APPLICATION_EXTRA_DRIVERS
1154
1155/**
1156 * @brief This configuration option is a boolean feature define.
1157 *
1158 * In case this configuration option is defined, then the ATA Driver is
1159 * initialized during system initialization.
1160 *
1161 * @par Default Configuration
1162 * If this configuration option is undefined, then the described feature is not
1163 * enabled.
1164 *
1165 * @par Notes
1166 * @parblock
1167 * Most BSPs do not include support for an ATA Driver.
1168 *
1169 * If this option is defined and the BSP does not have this device driver, then
1170 * the user will get a link time error for an undefined symbol.
1171 * @endparblock
1172 */
1173#define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1174
1175/**
1176 * @brief This configuration option is a boolean feature define.
1177 *
1178 * In case this configuration option is defined, then the Clock Driver is
1179 * initialized during system initialization.
1180 *
1181 * @par Default Configuration
1182 * If this configuration option is undefined, then the described feature is not
1183 * enabled.
1184 *
1185 * @par Notes
1186 * @parblock
1187 * The Clock Driver is responsible for providing a regular interrupt which
1188 * invokes a clock tick directive.
1189 *
1190 * The application shall define exactly one of the following configuration
1191 * options
1192 *
1193 * * ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``,
1194 *
1195 * * #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER, or
1196 *
1197 * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER,
1198 *
1199 * otherwise a compile time error in the configuration file will occur.
1200 * @endparblock
1201 */
1202#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
1203
1204/**
1205 * @brief This configuration option is a boolean feature define.
1206 *
1207 * In case this configuration option is defined, then the Console Driver is
1208 * initialized during system initialization.
1209 *
1210 * @par Default Configuration
1211 * If this configuration option is undefined, then the described feature is not
1212 * enabled.
1213 *
1214 * @par Notes
1215 * @parblock
1216 * The Console Driver is responsible for providing the ``/dev/console`` device
1217 * file.  This device is used to initialize the standard input, output, and
1218 * error file descriptors.
1219 *
1220 * BSPs should be constructed in a manner that allows printk() to work properly
1221 * without the need for the Console Driver to be configured.
1222 *
1223 * The
1224 *
1225 * * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
1226 *
1227 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and
1228 *
1229 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
1230 *
1231 * configuration options are mutually exclusive.
1232 * @endparblock
1233 */
1234#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
1235
1236/**
1237 * @brief This configuration option is a boolean feature define.
1238 *
1239 * In case this configuration option is defined, then the Frame Buffer Driver
1240 * is initialized during system initialization.
1241 *
1242 * @par Default Configuration
1243 * If this configuration option is undefined, then the described feature is not
1244 * enabled.
1245 *
1246 * @par Notes
1247 * @parblock
1248 * Most BSPs do not include support for a Frame Buffer Driver. This is because
1249 * many boards do not include the required hardware.
1250 *
1251 * If this option is defined and the BSP does not have this device driver, then
1252 * the user will get a link time error for an undefined symbol.
1253 * @endparblock
1254 */
1255#define CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
1256
1257/**
1258 * @brief This configuration option is a boolean feature define.
1259 *
1260 * In case this configuration option is defined, then the IDE Driver is
1261 * initialized during system initialization.
1262 *
1263 * @par Default Configuration
1264 * If this configuration option is undefined, then the described feature is not
1265 * enabled.
1266 *
1267 * @par Notes
1268 * @parblock
1269 * Most BSPs do not include support for an IDE Driver.
1270 *
1271 * If this option is defined and the BSP does not have this device driver, then
1272 * the user will get a link time error for an undefined symbol.
1273 * @endparblock
1274 */
1275#define CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
1276
1277/**
1278 * @brief This configuration option is a boolean feature define.
1279 *
1280 * In case this configuration option is defined, then the ``/dev/null`` Driver
1281 * is initialized during system initialization.
1282 *
1283 * @par Default Configuration
1284 * If this configuration option is undefined, then the described feature is not
1285 * enabled.
1286 *
1287 * @par Notes
1288 * This device driver is supported by all BSPs.
1289 */
1290#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
1291
1292/**
1293 * @brief This configuration option is a boolean feature define.
1294 *
1295 * In case this configuration option is defined, then the Real-Time Clock
1296 * Driver is initialized during system initialization.
1297 *
1298 * @par Default Configuration
1299 * If this configuration option is undefined, then the described feature is not
1300 * enabled.
1301 *
1302 * @par Notes
1303 * @parblock
1304 * Most BSPs do not include support for a real-time clock (RTC). This is
1305 * because many boards do not include the required hardware.
1306 *
1307 * If this is defined and the BSP does not have this device driver, then the
1308 * user will get a link time error for an undefined symbol.
1309 * @endparblock
1310 */
1311#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
1312
1313/**
1314 * @brief This configuration option is a boolean feature define.
1315 *
1316 * In case this configuration option is defined, then the Simple Console Driver
1317 * is initialized during system initialization.
1318 *
1319 * @par Default Configuration
1320 * If this configuration option is undefined, then the described feature is not
1321 * enabled.
1322 *
1323 * @par Notes
1324 * @parblock
1325 * This device driver is responsible for providing the ``/dev/console`` device
1326 * file.  This device is used to initialize the standard input, output, and
1327 * error file descriptors.
1328 *
1329 * This device driver reads via rtems_putc().
1330 *
1331 * This device driver writes via getchark().
1332 *
1333 * The Termios framework is not used.  There is no support to change device
1334 * settings, e.g. baud, stop bits, parity, etc.
1335 *
1336 * The
1337 *
1338 * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER,
1339 *
1340 * * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
1341 *
1342 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
1343 *
1344 * configuration options are mutually exclusive.
1345 * @endparblock
1346 */
1347#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
1348
1349/**
1350 * @brief This configuration option is a boolean feature define.
1351 *
1352 * In case this configuration option is defined, then the Simple Task Console
1353 * Driver is initialized during system initialization.
1354 *
1355 * @par Default Configuration
1356 * If this configuration option is undefined, then the described feature is not
1357 * enabled.
1358 *
1359 * @par Notes
1360 * @parblock
1361 * This device driver is responsible for providing the ``/dev/console`` device
1362 * file.  This device is used to initialize the standard input, output, and
1363 * error file descriptors.
1364 *
1365 * This device driver reads via rtems_putc().
1366 *
1367 * This device driver writes into a write buffer.  The count of characters
1368 * written into the write buffer is returned.  It might be less than the
1369 * requested count, in case the write buffer is full.  The write is
1370 * non-blocking and may be called from interrupt context.  A dedicated task
1371 * reads from the write buffer and outputs the characters via getchark().  This
1372 * task runs with the least important priority. The write buffer size is 2047
1373 * characters and it is not configurable.
1374 *
1375 * Use ``fsync( STDOUT_FILENO )`` or ``fdatasync( STDOUT_FILENO )`` to drain
1376 * the write buffer.
1377 *
1378 * The Termios framework is not used.  There is no support to change device
1379 * settings, e.g.  baud, stop bits, parity, etc.
1380 *
1381 * The
1382 *
1383 * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER,
1384 *
1385 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and
1386 *
1387 * * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
1388 *
1389 * configuration options are mutually exclusive.
1390 * @endparblock
1391 */
1392#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
1393
1394/**
1395 * @brief This configuration option is a boolean feature define.
1396 *
1397 * In case this configuration option is defined, then the Stub Driver is
1398 * initialized during system initialization.
1399 *
1400 * @par Default Configuration
1401 * If this configuration option is undefined, then the described feature is not
1402 * enabled.
1403 *
1404 * @par Notes
1405 * This device driver simply provides entry points that return successful and
1406 * is primarily a test fixture. It is supported by all BSPs.
1407 */
1408#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
1409
1410/**
1411 * @brief This configuration option is a boolean feature define.
1412 *
1413 * In case this configuration option is defined, then the Benchmark Timer
1414 * Driver is initialized during system initialization.
1415 *
1416 * @par Default Configuration
1417 * If this configuration option is undefined, then the described feature is not
1418 * enabled.
1419 *
1420 * @par Notes
1421 * @parblock
1422 * The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS
1423 * Testsuite.  Applications should not use this driver.
1424 *
1425 * The application shall define exactly one of the following configuration
1426 * options
1427 *
1428 * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER,
1429 *
1430 * * #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER, or
1431 *
1432 * * ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``,
1433 *
1434 * otherwise a compile time error will occur.
1435 * @endparblock
1436 */
1437#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
1438
1439/**
1440 * @brief This configuration option is a boolean feature define.
1441 *
1442 * In case this configuration option is defined, then the Watchdog Driver is
1443 * initialized during system initialization.
1444 *
1445 * @par Default Configuration
1446 * If this configuration option is undefined, then the described feature is not
1447 * enabled.
1448 *
1449 * @par Notes
1450 * @parblock
1451 * Most BSPs do not include support for a watchdog device driver. This is
1452 * because many boards do not include the required hardware.
1453 *
1454 * If this is defined and the BSP does not have this device driver, then the
1455 * user will get a link time error for an undefined symbol.
1456 * @endparblock
1457 */
1458#define CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
1459
1460/**
1461 * @brief This configuration option is a boolean feature define.
1462 *
1463 * In case this configuration option is defined, then the ``/dev/zero`` Driver
1464 * is initialized during system initialization.
1465 *
1466 * @par Default Configuration
1467 * If this configuration option is undefined, then the described feature is not
1468 * enabled.
1469 *
1470 * @par Notes
1471 * This device driver is supported by all BSPs.
1472 */
1473#define CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
1474
1475/**
1476 * @brief This configuration option is an initializer define.
1477 *
1478 * The value of this configuration option is used to initialize the Device
1479 * Driver Table.
1480 *
1481 * @par Default Value
1482 * The default value is the empty list.
1483 *
1484 * @par Value Constraints
1485 * The value of this configuration option shall be a list of initializers for
1486 * structures of type ::rtems_driver_address_table.
1487 *
1488 * @par Notes
1489 * @parblock
1490 * The value of this configuration option is placed after the entries defined
1491 * by #CONFIGURE_BSP_PREREQUISITE_DRIVERS and before all other device driver
1492 * configuration options.
1493 *
1494 * See #CONFIGURE_APPLICATION_EXTRA_DRIVERS for an alternative placement of
1495 * application device driver initializers.
1496 * @endparblock
1497 */
1498#define CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
1499
1500/**
1501 * @brief This configuration option is an integer define.
1502 *
1503 * The value of this configuration option defines the ATA task priority.
1504 *
1505 * @par Default Value
1506 * The default value is 140.
1507 *
1508 * @par Value Constraints
1509 * The value of this configuration option shall be a valid Classic API task
1510 * priority.  The set of valid task priorities is scheduler-specific.
1511 *
1512 * @par Notes
1513 * This configuration option is only evaluated if the configuration option
1514 * #CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER is defined.
1515 */
1516#define CONFIGURE_ATA_DRIVER_TASK_PRIORITY
1517
1518/**
1519 * @brief This configuration option is an integer define.
1520 *
1521 * The value of this configuration option defines the number of device drivers.
1522 *
1523 * @par Default Value
1524 * @parblock
1525 * This is computed by default, and is set to the number of statically
1526 * configured device drivers configured using the following configuration
1527 * options:
1528 *
1529 * * #CONFIGURE_APPLICATION_EXTRA_DRIVERS
1530 *
1531 * * #CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1532 *
1533 * * #CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
1534 *
1535 * * #CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
1536 *
1537 * * #CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
1538 *
1539 * * #CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
1540 *
1541 * * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
1542 *
1543 * * #CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
1544 *
1545 * * #CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
1546 *
1547 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
1548 *
1549 * * #CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
1550 *
1551 * * #CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
1552 *
1553 * * #CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
1554 *
1555 * * #CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
1556 *
1557 * * #CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
1558 *
1559 * * #CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
1560 *
1561 * * #CONFIGURE_BSP_PREREQUISITE_DRIVERS
1562 * @endparblock
1563 *
1564 * @par Value Constraints
1565 * @parblock
1566 * The value of this configuration option shall satisfy all of the following
1567 * constraints:
1568 *
1569 * * It shall be less than or equal to <a
1570 *   href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
1571 *
1572 * * It shall be greater than or equal than the number of statically configured
1573 *   device drivers.
1574 *
1575 * * It shall be less than or equal to a BSP-specific and application-specific
1576 *   value which depends on the size of the memory available to the
1577 *   application.
1578 * @endparblock
1579 *
1580 * @par Notes
1581 * If the application will dynamically install device drivers, then the
1582 * configuration option value shall be larger than the number of statically
1583 * configured device drivers.
1584 */
1585#define CONFIGURE_MAXIMUM_DRIVERS
1586
1587/** @} */
1588
1589/**
1590 * @defgroup RTEMSApplConfigEventRecordingConfiguration \
1591 *   Event Recording Configuration
1592 *
1593 * @ingroup RTEMSApplConfig
1594 *
1595 * This section describes configuration options related to the event recording.
1596 *
1597 * @{
1598 */
1599
1600/**
1601 * @brief This configuration option is a boolean feature define.
1602 *
1603 * In case
1604 *
1605 * * this configuration option is defined
1606 *
1607 * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
1608 *
1609 * then the event record extensions are enabled.
1610 *
1611 * @par Default Configuration
1612 * If this configuration option is undefined, then the described feature is not
1613 * enabled.
1614 *
1615 * @par Notes
1616 * The record extensions capture thread create, start, restart, delete, switch,
1617 * begin, exitted and terminate events.
1618 */
1619#define CONFIGURE_RECORD_EXTENSIONS_ENABLED
1620
1621/**
1622 * @brief This configuration option is a boolean feature define.
1623 *
1624 * In case
1625 *
1626 * * this configuration option is defined
1627 *
1628 * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
1629 *
1630 * * and #CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB is undefined,
1631 *
1632 * then the event records are dumped in Base64 encoding in a fatal error
1633 * extension (see <a
1634 * href=https://docs.rtems.org/branches/master/c-user/fatal_error.html#announcing-a-fatal-error>Announcing
1635 * a Fatal Error</a>).
1636 *
1637 * @par Default Configuration
1638 * If this configuration option is undefined, then the described feature is not
1639 * enabled.
1640 *
1641 * @par Notes
1642 * This extension can be used to produce crash dumps.
1643 */
1644#define CONFIGURE_RECORD_FATAL_DUMP_BASE64
1645
1646/**
1647 * @brief This configuration option is a boolean feature define.
1648 *
1649 * In case
1650 *
1651 * * this configuration option is defined
1652 *
1653 * * and #CONFIGURE_RECORD_PER_PROCESSOR_ITEMS is properly defined,
1654 *
1655 * then the event records are compressed by zlib and dumped in Base64 encoding
1656 * in a fatal error extension (see <a
1657 * href=https://docs.rtems.org/branches/master/c-user/fatal_error.html#announcing-a-fatal-error>Announcing
1658 * a Fatal Error</a>).
1659 *
1660 * @par Default Configuration
1661 * If this configuration option is undefined, then the described feature is not
1662 * enabled.
1663 *
1664 * @par Notes
1665 * The zlib compression needs about 512KiB of RAM.  This extension can be used
1666 * to produce crash dumps.
1667 */
1668#define CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
1669
1670/**
1671 * @brief This configuration option is an integer define.
1672 *
1673 * The value of this configuration option defines the event record item count
1674 * per processor.
1675 *
1676 * @par Default Value
1677 * The default value is 0.
1678 *
1679 * @par Value Constraints
1680 * @parblock
1681 * The value of this configuration option shall satisfy all of the following
1682 * constraints:
1683 *
1684 * * It shall be greater than or equal to 16.
1685 *
1686 * * It shall be less than or equal to <a
1687 *   href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
1688 *
1689 * * It shall be a power of two.
1690 *
1691 * * It shall be less than or equal to a BSP-specific and application-specific
1692 *   value which depends on the size of the memory available to the
1693 *   application.
1694 * @endparblock
1695 *
1696 * @par Notes
1697 * The event record buffers are statically allocated for each configured
1698 * processor (#CONFIGURE_MAXIMUM_PROCESSORS).  If the value of this
1699 * configuration option is zero, then nothing is allocated.
1700 */
1701#define CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
1702
1703/** @} */
1704
1705/**
1706 * @defgroup RTEMSApplConfigFilesystemConfiguration Filesystem Configuration
1707 *
1708 * @ingroup RTEMSApplConfig
1709 *
1710 * This section describes configuration options related to filesytems. By
1711 * default, the In-Memory Filesystem (IMFS) is used as the base filesystem
1712 * (also known as root filesystem).  In order to save some memory for your
1713 * application, you can disable the filesystem support with the
1714 * #CONFIGURE_APPLICATION_DISABLE_FILESYSTEM configuration option.
1715 * Alternatively, you can strip down the features of the base filesystem with
1716 * the #CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM and
1717 * #CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM configuration options.  These three
1718 * configuration options are mutually exclusive.  They are intended for an
1719 * advanced application configuration.
1720 *
1721 * Features of the IMFS can be disabled and enabled with the following
1722 * configuration options:
1723 *
1724 * * #CONFIGURE_IMFS_DISABLE_CHMOD
1725 *
1726 * * #CONFIGURE_IMFS_DISABLE_CHOWN
1727 *
1728 * * #CONFIGURE_IMFS_DISABLE_LINK
1729 *
1730 * * #CONFIGURE_IMFS_DISABLE_MKNOD
1731 *
1732 * * #CONFIGURE_IMFS_DISABLE_MKNOD_FILE
1733 *
1734 * * #CONFIGURE_IMFS_DISABLE_MOUNT
1735 *
1736 * * #CONFIGURE_IMFS_DISABLE_READDIR
1737 *
1738 * * #CONFIGURE_IMFS_DISABLE_READLINK
1739 *
1740 * * #CONFIGURE_IMFS_DISABLE_RENAME
1741 *
1742 * * #CONFIGURE_IMFS_DISABLE_RMNOD
1743 *
1744 * * #CONFIGURE_IMFS_DISABLE_SYMLINK
1745 *
1746 * * #CONFIGURE_IMFS_DISABLE_UNMOUNT
1747 *
1748 * * #CONFIGURE_IMFS_DISABLE_UTIME
1749 *
1750 * * #CONFIGURE_IMFS_ENABLE_MKFIFO
1751 *
1752 * @{
1753 */
1754
1755/**
1756 * @brief This configuration option is a boolean feature define.
1757 *
1758 * In case this configuration option is defined, then **no base filesystem** is
1759 * initialized during system initialization and **no filesystems** are
1760 * configured.
1761 *
1762 * @par Default Configuration
1763 * If this configuration option is undefined, then a base filesystem and the
1764 * configured filesystems are initialized during system initialization.
1765 *
1766 * @par Notes
1767 * Filesystems shall be initialized to support file descriptor based device
1768 * drivers and basic input/output functions such as printf(). Filesystems can
1769 * be disabled to reduce the memory footprint of an application.
1770 */
1771#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
1772
1773/**
1774 * @brief This configuration option is a boolean feature define.
1775 *
1776 * In case this configuration option is defined, then the following
1777 * configuration options will be defined as well
1778 *
1779 * * #CONFIGURE_FILESYSTEM_DOSFS,
1780 *
1781 * * #CONFIGURE_FILESYSTEM_FTPFS,
1782 *
1783 * * #CONFIGURE_FILESYSTEM_IMFS,
1784 *
1785 * * #CONFIGURE_FILESYSTEM_JFFS2,
1786 *
1787 * * #CONFIGURE_FILESYSTEM_NFS,
1788 *
1789 * * #CONFIGURE_FILESYSTEM_RFS, and
1790 *
1791 * * #CONFIGURE_FILESYSTEM_TFTPFS.
1792 *
1793 * @par Default Configuration
1794 * If this configuration option is undefined, then the described feature is not
1795 * enabled.
1796 */
1797#define CONFIGURE_FILESYSTEM_ALL
1798
1799/**
1800 * @brief This configuration option is a boolean feature define.
1801 *
1802 * In case this configuration option is defined, then the DOS (FAT) filesystem
1803 * is registered, so that instances of this filesystem can be mounted by the
1804 * application.
1805 *
1806 * @par Default Configuration
1807 * If this configuration option is undefined, then the described feature is not
1808 * enabled.
1809 *
1810 * @par Notes
1811 * This filesystem requires a Block Device Cache configuration, see
1812 * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK.
1813 */
1814#define CONFIGURE_FILESYSTEM_DOSFS
1815
1816/**
1817 * @brief This configuration option is a boolean feature define.
1818 *
1819 * In case this configuration option is defined, then the FTP filesystem (FTP
1820 * client) is registered, so that instances of this filesystem can be mounted
1821 * by the application.
1822 *
1823 * @par Default Configuration
1824 * If this configuration option is undefined, then the described feature is not
1825 * enabled.
1826 */
1827#define CONFIGURE_FILESYSTEM_FTPFS
1828
1829/**
1830 * @brief This configuration option is a boolean feature define.
1831 *
1832 * In case this configuration option is defined, then the In-Memory Filesystem
1833 * (IMFS) is registered, so that instances of this filesystem can be mounted by
1834 * the application.
1835 *
1836 * @par Default Configuration
1837 * If this configuration option is undefined, then the described feature is not
1838 * enabled.
1839 *
1840 * @par Notes
1841 * Applications will rarely need this configuration option.  This configuration
1842 * option is intended for test programs.  You do not need to define this
1843 * configuration option for the base filesystem (also known as root
1844 * filesystem).
1845 */
1846#define CONFIGURE_FILESYSTEM_IMFS
1847
1848/**
1849 * @brief This configuration option is a boolean feature define.
1850 *
1851 * In case this configuration option is defined, then the JFFS2 filesystem is
1852 * registered, so that instances of this filesystem can be mounted by the
1853 * application.
1854 *
1855 * @par Default Configuration
1856 * If this configuration option is undefined, then the described feature is not
1857 * enabled.
1858 */
1859#define CONFIGURE_FILESYSTEM_JFFS2
1860
1861/**
1862 * @brief This configuration option is a boolean feature define.
1863 *
1864 * In case this configuration option is defined, then the Network Filesystem
1865 * (NFS) client is registered, so that instances of this filesystem can be
1866 * mounted by the application.
1867 *
1868 * @par Default Configuration
1869 * If this configuration option is undefined, then the described feature is not
1870 * enabled.
1871 */
1872#define CONFIGURE_FILESYSTEM_NFS
1873
1874/**
1875 * @brief This configuration option is a boolean feature define.
1876 *
1877 * In case this configuration option is defined, then the RTEMS Filesystem
1878 * (RFS) is registered, so that instances of this filesystem can be mounted by
1879 * the application.
1880 *
1881 * @par Default Configuration
1882 * If this configuration option is undefined, then the described feature is not
1883 * enabled.
1884 *
1885 * @par Notes
1886 * This filesystem requires a Block Device Cache configuration, see
1887 * #CONFIGURE_APPLICATION_NEEDS_LIBBLOCK.
1888 */
1889#define CONFIGURE_FILESYSTEM_RFS
1890
1891/**
1892 * @brief This configuration option is a boolean feature define.
1893 *
1894 * In case this configuration option is defined, then the TFTP filesystem (TFTP
1895 * client) is registered, so that instances of this filesystem can be mounted
1896 * by the application.
1897 *
1898 * @par Default Configuration
1899 * If this configuration option is undefined, then the described feature is not
1900 * enabled.
1901 */
1902#define CONFIGURE_FILESYSTEM_TFTPFS
1903
1904/**
1905 * @brief This configuration option is a boolean feature define.
1906 *
1907 * In case this configuration option is defined, then the root IMFS does not
1908 * support changing the mode of files (no support for chmod()).
1909 *
1910 * @par Default Configuration
1911 * If this configuration option is undefined, then the root IMFS supports
1912 * changing the mode of files.
1913 */
1914#define CONFIGURE_IMFS_DISABLE_CHMOD
1915
1916/**
1917 * @brief This configuration option is a boolean feature define.
1918 *
1919 * In case this configuration option is defined, then the root IMFS does not
1920 * support changing the ownership of files (no support for chown()).
1921 *
1922 * @par Default Configuration
1923 * If this configuration option is undefined, then the root IMFS supports
1924 * changing the ownership of files.
1925 */
1926#define CONFIGURE_IMFS_DISABLE_CHOWN
1927
1928/**
1929 * @brief This configuration option is a boolean feature define.
1930 *
1931 * In case this configuration option is defined, then the root IMFS does not
1932 * support hard links (no support for link()).
1933 *
1934 * @par Default Configuration
1935 * If this configuration option is undefined, then the root IMFS supports hard
1936 * links.
1937 */
1938#define CONFIGURE_IMFS_DISABLE_LINK
1939
1940/**
1941 * @brief This configuration option is a boolean feature define.
1942 *
1943 * In case this configuration option is defined, then the root IMFS does not
1944 * support making files (no support for mknod()).
1945 *
1946 * @par Default Configuration
1947 * If this configuration option is undefined, then the root IMFS supports
1948 * making files.
1949 */
1950#define CONFIGURE_IMFS_DISABLE_MKNOD
1951
1952/**
1953 * @brief This configuration option is a boolean feature define.
1954 *
1955 * In case this configuration option is defined, then the root IMFS does not
1956 * support making device files.
1957 *
1958 * @par Default Configuration
1959 * If this configuration option is undefined, then the root IMFS supports
1960 * making device files.
1961 */
1962#define CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
1963
1964/**
1965 * @brief This configuration option is a boolean feature define.
1966 *
1967 * In case this configuration option is defined, then the root IMFS does not
1968 * support making regular files.
1969 *
1970 * @par Default Configuration
1971 * If this configuration option is undefined, then the root IMFS supports
1972 * making regular files.
1973 */
1974#define CONFIGURE_IMFS_DISABLE_MKNOD_FILE
1975
1976/**
1977 * @brief This configuration option is a boolean feature define.
1978 *
1979 * In case this configuration option is defined, then the root IMFS does not
1980 * support mounting other filesystems (no support for mount()).
1981 *
1982 * @par Default Configuration
1983 * If this configuration option is undefined, then the root IMFS supports
1984 * mounting other filesystems.
1985 */
1986#define CONFIGURE_IMFS_DISABLE_MOUNT
1987
1988/**
1989 * @brief This configuration option is a boolean feature define.
1990 *
1991 * In case this configuration option is defined, then the root IMFS does not
1992 * support reading directories (no support for readdir()).  It is still
1993 * possible to open files in a directory.
1994 *
1995 * @par Default Configuration
1996 * If this configuration option is undefined, then the root IMFS supports
1997 * reading directories.
1998 */
1999#define CONFIGURE_IMFS_DISABLE_READDIR
2000
2001/**
2002 * @brief This configuration option is a boolean feature define.
2003 *
2004 * In case this configuration option is defined, then the root IMFS does not
2005 * support reading symbolic links (no support for readlink()).
2006 *
2007 * @par Default Configuration
2008 * If this configuration option is undefined, then the root IMFS supports
2009 * reading symbolic links.
2010 */
2011#define CONFIGURE_IMFS_DISABLE_READLINK
2012
2013/**
2014 * @brief This configuration option is a boolean feature define.
2015 *
2016 * In case this configuration option is defined, then the root IMFS does not
2017 * support renaming files (no support for rename()).
2018 *
2019 * @par Default Configuration
2020 * If this configuration option is undefined, then the root IMFS supports
2021 * renaming files.
2022 */
2023#define CONFIGURE_IMFS_DISABLE_RENAME
2024
2025/**
2026 * @brief This configuration option is a boolean feature define.
2027 *
2028 * In case this configuration option is defined, then the root IMFS does not
2029 * support removing files (no support for rmnod()).
2030 *
2031 * @par Default Configuration
2032 * If this configuration option is undefined, then the root IMFS supports
2033 * removing files.
2034 */
2035#define CONFIGURE_IMFS_DISABLE_RMNOD
2036
2037/**
2038 * @brief This configuration option is a boolean feature define.
2039 *
2040 * In case this configuration option is defined, then the root IMFS does not
2041 * support creating symbolic links (no support for symlink()).
2042 *
2043 * @par Default Configuration
2044 * If this configuration option is undefined, then the root IMFS supports
2045 * creating symbolic links.
2046 */
2047#define CONFIGURE_IMFS_DISABLE_SYMLINK
2048
2049/**
2050 * @brief This configuration option is a boolean feature define.
2051 *
2052 * In case this configuration option is defined, then the root IMFS does not
2053 * support unmounting other filesystems (no support for unmount()).
2054 *
2055 * @par Default Configuration
2056 * If this configuration option is undefined, then the root IMFS supports
2057 * unmounting other filesystems.
2058 */
2059#define CONFIGURE_IMFS_DISABLE_UNMOUNT
2060
2061/**
2062 * @brief This configuration option is a boolean feature define.
2063 *
2064 * In case this configuration option is defined, then the root IMFS does not
2065 * support changing file times (no support for utime()).
2066 *
2067 * @par Default Configuration
2068 * If this configuration option is undefined, then the root IMFS supports
2069 * changing file times.
2070 */
2071#define CONFIGURE_IMFS_DISABLE_UTIME
2072
2073/**
2074 * @brief This configuration option is a boolean feature define.
2075 *
2076 * In case this configuration option is defined, then the root IMFS supports
2077 * making FIFOs.
2078 *
2079 * @par Default Configuration
2080 * If this configuration option is undefined, then the root IMFS does not
2081 * support making FIFOs (no support for mkfifo()).
2082 */
2083#define CONFIGURE_IMFS_ENABLE_MKFIFO
2084
2085/**
2086 * @brief This configuration option is an integer define.
2087 *
2088 * The value of this configuration option defines the block size for in-memory
2089 * files managed by the IMFS.
2090 *
2091 * @par Default Value
2092 * The default value is 128.
2093 *
2094 * @par Value Constraints
2095 * The value of this configuration option shall be an element of {16, 32, 64,
2096 * 128, 256, 512}.
2097 *
2098 * @par Notes
2099 * @parblock
2100 * The configured block size has two impacts. The first is the average amount
2101 * of unused memory in the last block of each file.  For example, when the
2102 * block size is 512, on average one-half of the last block of each file will
2103 * remain unused and the memory is wasted. In contrast, when the block size is
2104 * 16, the average unused memory per file is only 8 bytes. However, it requires
2105 * more allocations for the same size file and thus more overhead per block for
2106 * the dynamic memory management.
2107 *
2108 * Second, the block size has an impact on the maximum size file that can be
2109 * stored in the IMFS. With smaller block size, the maximum file size is
2110 * correspondingly smaller. The following shows the maximum file size possible
2111 * based on the configured block size:
2112 *
2113 * * when the block size is 16 bytes, the maximum file size is 1,328 bytes.
2114 *
2115 * * when the block size is 32 bytes, the maximum file size is 18,656 bytes.
2116 *
2117 * * when the block size is 64 bytes, the maximum file size is 279,488 bytes.
2118 *
2119 * * when the block size is 128 bytes, the maximum file size is 4,329,344
2120 *   bytes.
2121 *
2122 * * when the block size is 256 bytes, the maximum file size is 68,173,568
2123 *   bytes.
2124 *
2125 * * when the block size is 512 bytes, the maximum file size is 1,082,195,456
2126 *   bytes.
2127 * @endparblock
2128 */
2129#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2130
2131/**
2132 * @brief This configuration option is a boolean feature define.
2133 *
2134 * In case this configuration option is defined, then an IMFS with a reduced
2135 * feature set will be the base filesystem (also known as root filesystem).
2136 *
2137 * @par Default Configuration
2138 * If this configuration option is undefined, then the described feature is not
2139 * enabled.
2140 *
2141 * @par Notes
2142 * @parblock
2143 * In case this configuration option is defined, then the following
2144 * configuration options will be defined as well
2145 *
2146 * * #CONFIGURE_IMFS_DISABLE_CHMOD,
2147 *
2148 * * #CONFIGURE_IMFS_DISABLE_CHOWN,
2149 *
2150 * * #CONFIGURE_IMFS_DISABLE_LINK,
2151 *
2152 * * #CONFIGURE_IMFS_DISABLE_MKNOD_FILE,
2153 *
2154 * * #CONFIGURE_IMFS_DISABLE_MOUNT,
2155 *
2156 * * #CONFIGURE_IMFS_DISABLE_READDIR,
2157 *
2158 * * #CONFIGURE_IMFS_DISABLE_READLINK,
2159 *
2160 * * #CONFIGURE_IMFS_DISABLE_RENAME,
2161 *
2162 * * #CONFIGURE_IMFS_DISABLE_RMNOD,
2163 *
2164 * * #CONFIGURE_IMFS_DISABLE_SYMLINK,
2165 *
2166 * * #CONFIGURE_IMFS_DISABLE_UTIME, and
2167 *
2168 * * #CONFIGURE_IMFS_DISABLE_UNMOUNT.
2169 *
2170 * In addition, a simplified path evaluation is enabled.  It allows only a look
2171 * up of absolute paths.
2172 *
2173 * This configuration of the IMFS is basically a device-only filesystem.  It is
2174 * comparable in functionality to the pseudo-filesystem name space provided
2175 * before RTEMS release 4.5.0.
2176 * @endparblock
2177 */
2178#define CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2179
2180/**
2181 * @brief This configuration option is a boolean feature define.
2182 *
2183 * In case this configuration option is defined, then an IMFS with a reduced
2184 * feature set will be the base filesystem (also known as root filesystem).
2185 *
2186 * @par Default Configuration
2187 * If this configuration option is undefined, then the described feature is not
2188 * enabled.
2189 *
2190 * @par Notes
2191 * @parblock
2192 * In case this configuration option is defined, then the following
2193 * configuration options will be defined as well
2194 *
2195 * * #CONFIGURE_IMFS_DISABLE_CHMOD,
2196 *
2197 * * #CONFIGURE_IMFS_DISABLE_CHOWN,
2198 *
2199 * * #CONFIGURE_IMFS_DISABLE_LINK,
2200 *
2201 * * #CONFIGURE_IMFS_DISABLE_READLINK,
2202 *
2203 * * #CONFIGURE_IMFS_DISABLE_RENAME,
2204 *
2205 * * #CONFIGURE_IMFS_DISABLE_SYMLINK,
2206 *
2207 * * #CONFIGURE_IMFS_DISABLE_UTIME, and
2208 *
2209 * * #CONFIGURE_IMFS_DISABLE_UNMOUNT.
2210 * @endparblock
2211 */
2212#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2213
2214/** @} */
2215
2216/**
2217 * @defgroup RTEMSApplConfigGeneralSystemConfiguration \
2218 *   General System Configuration
2219 *
2220 * @ingroup RTEMSApplConfig
2221 *
2222 * This section describes general system configuration options.
2223 *
2224 * @{
2225 */
2226
2227/**
2228 * @brief This configuration option is a boolean feature define.
2229 *
2230 * In case this configuration option is defined, then the memory areas used for
2231 * the RTEMS Workspace and the C Program Heap are dirtied with a ``0xCF`` byte
2232 * pattern during system initialization.
2233 *
2234 * @par Default Configuration
2235 * If this configuration option is undefined, then the described feature is not
2236 * enabled.
2237 *
2238 * @par Notes
2239 * @parblock
2240 * Dirtying memory can add significantly to system initialization time.  It may
2241 * assist in finding code that incorrectly assumes the contents of free memory
2242 * areas is cleared to zero during system initialization.  In case
2243 * #CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY is also defined, then the memory is
2244 * first dirtied and then zeroed.
2245 *
2246 * See also #CONFIGURE_MALLOC_DIRTY.
2247 * @endparblock
2248 */
2249#define CONFIGURE_DIRTY_MEMORY
2250
2251/**
2252 * @brief This configuration option is a boolean feature define.
2253 *
2254 * In case this configuration option is defined, then the Newlib reentrancy
2255 * support per thread is disabled and a global reentrancy structure is used.
2256 *
2257 * @par Default Configuration
2258 * If this configuration option is undefined, then the described feature is not
2259 * enabled.
2260 *
2261 * @par Notes
2262 * You can enable this option to reduce the size of the :term:`TCB`.  Use this
2263 * option with care, since it can lead to race conditions and undefined system
2264 * behaviour.  For example, #errno is no longer a thread-local variable if this
2265 * option is enabled.
2266 */
2267#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY
2268
2269/**
2270 * @brief This configuration option is an integer define.
2271 *
2272 * The value of this configuration option defines the RTEMS Workspace size in
2273 * bytes.
2274 *
2275 * @par Default Value
2276 * If this configuration option is undefined, then the RTEMS Workspace and task
2277 * stack space size is calculated by ``<rtems/confdefs.h>`` based on the values
2278 * configuration options.
2279 *
2280 * @par Value Constraints
2281 * @parblock
2282 * The value of this configuration option shall satisfy all of the following
2283 * constraints:
2284 *
2285 * * It shall be greater than or equal to 0.
2286 *
2287 * * It shall be less than or equal to <a
2288 *   href="https://en.cppreference.com/w/c/types/integer">UINTPTR_MAX</a>.
2289 *
2290 * * It shall be less than or equal to a BSP-specific and application-specific
2291 *   value which depends on the size of the memory available to the
2292 *   application.
2293 * @endparblock
2294 *
2295 * @par Notes
2296 * This is an advanced configuration option.  Use it only if you know exactly
2297 * what you are doing.
2298 */
2299#define CONFIGURE_EXECUTIVE_RAM_SIZE
2300
2301/**
2302 * @brief This configuration option is an integer define.
2303 *
2304 * The value of this configuration option defines the number of bytes the
2305 * applications wishes to add to the task stack requirements calculated by
2306 * ``<rtems/confdefs.h>``.
2307 *
2308 * @par Default Value
2309 * The default value is 0.
2310 *
2311 * @par Value Constraints
2312 * @parblock
2313 * The value of this configuration option shall satisfy all of the following
2314 * constraints:
2315 *
2316 * * It shall be greater than or equal to 0.
2317 *
2318 * * It shall be small enough so that the task stack space calculation carried
2319 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
2320 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
2321 * @endparblock
2322 *
2323 * @par Notes
2324 * This parameter is very important.  If the application creates tasks with
2325 * stacks larger then the minimum, then that memory is **not** accounted for by
2326 * ``<rtems/confdefs.h>``.
2327 */
2328#define CONFIGURE_EXTRA_TASK_STACKS
2329
2330/**
2331 * @brief This configuration option is an initializer define.
2332 *
2333 * The value of this configuration option is used to initialize the table of
2334 * initial user extensions.
2335 *
2336 * @par Default Value
2337 * The default value is the empty list.
2338 *
2339 * @par Value Constraints
2340 * The value of this configuration option shall be a list of initializers for
2341 * structures of type ::rtems_extensions_table.
2342 *
2343 * @par Notes
2344 * The value of this configuration option is placed before the entries of
2345 * #BSP_INITIAL_EXTENSION and after the entries of all other initial user
2346 * extensions.
2347 */
2348#define CONFIGURE_INITIAL_EXTENSIONS
2349
2350/**
2351 * @brief This configuration option is an integer define.
2352 *
2353 * The value of this configuration option defines the size of an interrupt
2354 * stack in bytes.
2355 *
2356 * @par Default Value
2357 * The default value is #BSP_INTERRUPT_STACK_SIZE in case it is defined,
2358 * otherwise the default value is #CPU_STACK_MINIMUM_SIZE.
2359 *
2360 * @par Value Constraints
2361 * @parblock
2362 * The value of this configuration option shall satisfy all of the following
2363 * constraints:
2364 *
2365 * * It shall be greater than or equal to a BSP-specific and
2366 *   application-specific minimum value.
2367 *
2368 * * It shall be small enough so that the interrupt stack area calculation
2369 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
2370 *   <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
2371 *
2372 * * It shall be aligned according to #CPU_INTERRUPT_STACK_ALIGNMENT.
2373 * @endparblock
2374 *
2375 * @par Notes
2376 * @parblock
2377 * There is one interrupt stack available for each configured processor
2378 * (#CONFIGURE_MAXIMUM_PROCESSORS).  The interrupt stack areas are statically
2379 * allocated in a special linker section (``.rtemsstack.interrupt``). The
2380 * placement of this linker section is BSP-specific.
2381 *
2382 * Some BSPs use the interrupt stack as the initialization stack which is used
2383 * to perform the sequential system initialization before the multithreading is
2384 * started.
2385 *
2386 * The interrupt stacks are covered by the stack checker, see
2387 * #CONFIGURE_STACK_CHECKER_ENABLED.  However, using a too small interrupt
2388 * stack size may still result in undefined behaviour.
2389 *
2390 * In releases before RTEMS 5.1 the default value was
2391 * #CONFIGURE_MINIMUM_TASK_STACK_SIZE instead of #CPU_STACK_MINIMUM_SIZE.
2392 * @endparblock
2393 */
2394#define CONFIGURE_INTERRUPT_STACK_SIZE
2395
2396/**
2397 * @brief This configuration option is a boolean feature define.
2398 *
2399 * In case this configuration option is defined, then each memory area returned
2400 * by C Program Heap allocator functions such as malloc() is dirtied with a
2401 * ``0xCF`` byte pattern before it is handed over to the application.
2402 *
2403 * @par Default Configuration
2404 * If this configuration option is undefined, then the described feature is not
2405 * enabled.
2406 *
2407 * @par Notes
2408 * The dirtying performed by this option is carried out for each successful
2409 * memory allocation from the C Program Heap in contrast to
2410 * #CONFIGURE_DIRTY_MEMORY which dirties the memory only once during the system
2411 * initialization.
2412 */
2413#define CONFIGURE_MALLOC_DIRTY
2414
2415/**
2416 * @brief This configuration option is an integer define.
2417 *
2418 * The value of this configuration option defines the maximum number of file
2419 * like objects that can be concurrently open.
2420 *
2421 * @par Default Value
2422 * The default value is 3.
2423 *
2424 * @par Value Constraints
2425 * @parblock
2426 * The value of this configuration option shall satisfy all of the following
2427 * constraints:
2428 *
2429 * * It shall be greater than or equal to 0.
2430 *
2431 * * It shall be less than or equal to <a
2432 *   href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
2433 *
2434 * * It shall be less than or equal to a BSP-specific and application-specific
2435 *   value which depends on the size of the memory available to the
2436 *   application.
2437 * @endparblock
2438 *
2439 * @par Notes
2440 * The default value of three file descriptors allows RTEMS to support standard
2441 * input, output, and error I/O streams on ``/dev/console``.
2442 */
2443#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
2444
2445/**
2446 * @brief This configuration option is an integer define.
2447 *
2448 * The value of this configuration option defines the maximum number of
2449 * processors an application intends to use.  The number of actually available
2450 * processors depends on the hardware and may be less.  It is recommended to
2451 * use the smallest value suitable for the application in order to save memory.
2452 * Each processor needs an IDLE task stack and interrupt stack for example.
2453 *
2454 * @par Default Value
2455 * The default value is 1.
2456 *
2457 * @par Value Constraints
2458 * The value of this configuration option shall be greater than or equal to 1
2459 * and less than or equal to #CPU_MAXIMUM_PROCESSORS.
2460 *
2461 * @par Notes
2462 * @parblock
2463 * If there are more processors available than configured, the rest will be
2464 * ignored.
2465 *
2466 * This configuration option is only evaluated in SMP configurations (e.g.
2467 * RTEMS was built with the ``--enable-smp`` build configuration option).  In
2468 * all other configurations it has no effect.
2469 * @endparblock
2470 */
2471#define CONFIGURE_MAXIMUM_PROCESSORS
2472
2473/**
2474 * @brief This configuration option is an integer define.
2475 *
2476 * The value of this configuration option defines the maximum thread name size
2477 * including the terminating ``NUL`` character.
2478 *
2479 * @par Default Value
2480 * The default value is 16.
2481 *
2482 * @par Value Constraints
2483 * @parblock
2484 * The value of this configuration option shall satisfy all of the following
2485 * constraints:
2486 *
2487 * * It shall be greater than or equal to 0.
2488 *
2489 * * It shall be less than or equal to <a
2490 *   href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
2491 *
2492 * * It shall be less than or equal to a BSP-specific and application-specific
2493 *   value which depends on the size of the memory available to the
2494 *   application.
2495 * @endparblock
2496 *
2497 * @par Notes
2498 * @parblock
2499 * The default value was chosen for Linux compatibility, see <a
2500 * href=http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>PTHREAD_SETNAME_NP(3)</a>.
2501 *
2502 * The size of the thread control block is increased by the maximum thread name
2503 * size.
2504 *
2505 * This configuration option is available since RTEMS 5.1.
2506 * @endparblock
2507 */
2508#define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
2509
2510/**
2511 * @brief This configuration option is an integer define.
2512 *
2513 * The value of this configuration option defines the number of kilobytes the
2514 * application wishes to add to the RTEMS Workspace size calculated by
2515 * ``<rtems/confdefs.h>``.
2516 *
2517 * @par Default Value
2518 * The default value is 0.
2519 *
2520 * @par Value Constraints
2521 * @parblock
2522 * The value of this configuration option shall satisfy all of the following
2523 * constraints:
2524 *
2525 * * It shall be greater than or equal to 0.
2526 *
2527 * * It shall be less than or equal to a BSP-specific and application-specific
2528 *   value which depends on the size of the memory available to the
2529 *   application.
2530 *
2531 * * It shall be small enough so that the RTEMS Workspace size calculation
2532 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
2533 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
2534 * @endparblock
2535 *
2536 * @par Notes
2537 * This configuration option should only be used when it is suspected that a
2538 * bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.  Typically
2539 * the memory allocation will be too low when an application does not account
2540 * for all message queue buffers or task stacks, see
2541 * #CONFIGURE_MESSAGE_BUFFER_MEMORY.
2542 */
2543#define CONFIGURE_MEMORY_OVERHEAD
2544
2545/**
2546 * @brief This configuration option is an integer define.
2547 *
2548 * The value of this configuration option defines the number of bytes reserved
2549 * for message queue buffers in the RTEMS Workspace.
2550 *
2551 * @par Default Value
2552 * The default value is 0.
2553 *
2554 * @par Value Constraints
2555 * @parblock
2556 * The value of this configuration option shall satisfy all of the following
2557 * constraints:
2558 *
2559 * * It shall be greater than or equal to 0.
2560 *
2561 * * It shall be less than or equal to a BSP-specific and application-specific
2562 *   value which depends on the size of the memory available to the
2563 *   application.
2564 *
2565 * * It shall be small enough so that the RTEMS Workspace size calculation
2566 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
2567 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
2568 * @endparblock
2569 *
2570 * @par Notes
2571 * @parblock
2572 * The configuration options #CONFIGURE_MAXIMUM_MESSAGE_QUEUES and
2573 * #CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES define only how many message queues
2574 * can be created by the application.  The memory for the message buffers is
2575 * configured by this option.  For each message queue you have to reserve some
2576 * memory for the message buffers.  The size depends on the maximum number of
2577 * pending messages and the maximum size of the messages of a message queue.
2578 * Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro to specify the
2579 * message buffer memory for each message queue and sum them up to define the
2580 * value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``.
2581 *
2582 * The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro
2583 * is as follows:
2584 *
2585 * @code
2586 * CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size )
2587 * @endcode
2588 *
2589 * Where ``max_messages`` is the maximum number of pending messages and
2590 * ``max_msg_size`` is the maximum size in bytes of the messages of the
2591 * corresponding message queue.  Both parameters shall be compile time
2592 * constants.  Not using this help macro (e.g. just using ``max_messages *
2593 * max_msg_size``) may result in an underestimate of the RTEMS Workspace size.
2594 *
2595 * The following example illustrates how the
2596 * ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro can be used to assist
2597 * in calculating the message buffer memory required.  In this example, there
2598 * are two message queues used in this application.  The first message queue
2599 * has a maximum of 24 pending messages with the message structure defined by
2600 * the type ``one_message_type``.  The other message queue has a maximum of 500
2601 * pending messages with the message structure defined by the type
2602 * ``other_message_type``.
2603 *
2604 * @code
2605 * #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \
2606 *     CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2607 *       24, \
2608 *       sizeof( one_message_type ) \
2609 *     ) \
2610 *     + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2611 *       500, \
2612 *       sizeof( other_message_type ) \
2613 *     ) \
2614 *   )
2615 * @endcode
2616 * @endparblock
2617 */
2618#define CONFIGURE_MESSAGE_BUFFER_MEMORY
2619
2620/**
2621 * @brief This configuration option is an integer define.
2622 *
2623 * The value of this configuration option defines the length of time in
2624 * microseconds between clock ticks (clock tick quantum).
2625 *
2626 * When the clock tick quantum value is too low, the system will spend so much
2627 * time processing clock ticks that it does not have processing time available
2628 * to perform application work. In this case, the system will become
2629 * unresponsive.
2630 *
2631 * The lowest practical time quantum varies widely based upon the speed of the
2632 * target hardware and the architectural overhead associated with interrupts.
2633 * In general terms, you do not want to configure it lower than is needed for
2634 * the application.
2635 *
2636 * The clock tick quantum should be selected such that it all blocking and
2637 * delay times in the application are evenly divisible by it. Otherwise,
2638 * rounding errors will be introduced which may negatively impact the
2639 * application.
2640 *
2641 * @par Default Value
2642 * The default value is 10000.
2643 *
2644 * @par Value Constraints
2645 * @parblock
2646 * The value of this configuration option shall satisfy all of the following
2647 * constraints:
2648 *
2649 * * It shall be greater than or equal to a Clock Driver specific value.
2650 *
2651 * * It shall be less than or equal to a Clock Driver specific value.
2652 *
2653 * * The resulting clock ticks per second should be an integer.
2654 * @endparblock
2655 *
2656 * @par Notes
2657 * @parblock
2658 * This configuration option has no impact if the Clock Driver is not
2659 * configured, see #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER.
2660 *
2661 * There may be Clock Driver specific limits on the resolution or maximum value
2662 * of a clock tick quantum.
2663 * @endparblock
2664 */
2665#define CONFIGURE_MICROSECONDS_PER_TICK
2666
2667/**
2668 * @brief This configuration option is an integer define.
2669 *
2670 * The value of this configuration option defines the minimum stack size in
2671 * bytes for every user task or thread in the system.
2672 *
2673 * @par Default Value
2674 * The default value is #CPU_STACK_MINIMUM_SIZE.
2675 *
2676 * @par Value Constraints
2677 * @parblock
2678 * The value of this configuration option shall satisfy all of the following
2679 * constraints:
2680 *
2681 * * It shall be small enough so that the task stack space calculation carried
2682 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
2683 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
2684 *
2685 * * It shall be greater than or equal to a BSP-specific and
2686 *   application-specific minimum value.
2687 * @endparblock
2688 *
2689 * @par Notes
2690 * @parblock
2691 * Adjusting this parameter should be done with caution.  Examining the actual
2692 * stack usage using the stack checker usage reporting facility is recommended
2693 * (see also #CONFIGURE_STACK_CHECKER_ENABLED).
2694 *
2695 * This parameter can be used to lower the minimum from that recommended. This
2696 * can be used in low memory systems to reduce memory consumption for stacks.
2697 * However, this shall be done with caution as it could increase the
2698 * possibility of a blown task stack.
2699 *
2700 * This parameter can be used to increase the minimum from that recommended.
2701 * This can be used in higher memory systems to reduce the risk of stack
2702 * overflow without performing analysis on actual consumption.
2703 *
2704 * By default, this configuration parameter defines also the minimum stack size
2705 * of POSIX threads.  This can be changed with the
2706 * #CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE configuration option.
2707 *
2708 * In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
2709 * used to define the default value of #CONFIGURE_INTERRUPT_STACK_SIZE.
2710 * @endparblock
2711 */
2712#define CONFIGURE_MINIMUM_TASK_STACK_SIZE
2713
2714/**
2715 * @brief This configuration option is a boolean feature define.
2716 *
2717 * In case this configuration option is defined, then the stack checker is
2718 * enabled.
2719 *
2720 * @par Default Configuration
2721 * If this configuration option is undefined, then the described feature is not
2722 * enabled.
2723 *
2724 * @par Notes
2725 * @parblock
2726 * The stack checker performs run-time stack bounds checking.  This increases
2727 * the time required to create tasks as well as adding overhead to each context
2728 * switch.
2729 *
2730 * In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``.
2731 * @endparblock
2732 */
2733#define CONFIGURE_STACK_CHECKER_ENABLED
2734
2735/**
2736 * @brief This configuration option is an integer define.
2737 *
2738 * The value of this configuration option defines the length of the timeslice
2739 * quantum in ticks for each task.
2740 *
2741 * @par Default Value
2742 * The default value is 50.
2743 *
2744 * @par Value Constraints
2745 * The value of this configuration option shall be greater than or equal to 0
2746 * and less than or equal to <a
2747 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
2748 *
2749 * @par Notes
2750 * This configuration option has no impact if the Clock Driver is not
2751 * configured, see #CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER.
2752 */
2753#define CONFIGURE_TICKS_PER_TIMESLICE
2754
2755/**
2756 * @brief This configuration option is a boolean feature define.
2757 *
2758 * In case this configuration option is defined, then the RTEMS Workspace and
2759 * the C Program Heap will be one pool of memory.
2760 *
2761 * @par Default Configuration
2762 * If this configuration option is undefined, then there will be separate
2763 * memory pools for the RTEMS Workspace and C Program Heap.
2764 *
2765 * @par Notes
2766 * @parblock
2767 * Having separate pools does have some advantages in the event a task blows a
2768 * stack or writes outside its memory area. However, in low memory systems the
2769 * overhead of the two pools plus the potential for unused memory in either
2770 * pool is very undesirable.
2771 *
2772 * In high memory environments, this is desirable when you want to use the <a
2773 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
2774 * Objects</a> option.  You will be able to create objects until you run out of
2775 * all available memory rather then just until you run out of RTEMS Workspace.
2776 * @endparblock
2777 */
2778#define CONFIGURE_UNIFIED_WORK_AREAS
2779
2780/**
2781 * @brief This configuration option is an integer define.
2782 *
2783 * If #CONFIGURE_UNLIMITED_OBJECTS is defined, then the value of this
2784 * configuration option defines the default objects maximum of all object
2785 * classes supporting <a
2786 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
2787 * Objects</a> to ``rtems_resource_unlimited(
2788 * CONFIGURE_UNLIMITED_ALLOCATION_SIZE )``.
2789 *
2790 * @par Default Value
2791 * The default value is 8.
2792 *
2793 * @par Value Constraints
2794 * The value of this configuration option shall meet the constraints of all
2795 * object classes to which it is applied.
2796 *
2797 * @par Notes
2798 * @parblock
2799 * By allowing users to declare all resources as being unlimited the user can
2800 * avoid identifying and limiting the resources used.
2801 *
2802 * The object maximum of each class can be configured also individually using
2803 * the rtems_resource_unlimited() macro.
2804 * @endparblock
2805 */
2806#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE
2807
2808/**
2809 * @brief This configuration option is a boolean feature define.
2810 *
2811 * In case this configuration option is defined, then unlimited objects are
2812 * used by default.
2813 *
2814 * @par Default Configuration
2815 * If this configuration option is undefined, then the described feature is not
2816 * enabled.
2817 *
2818 * @par Notes
2819 * @parblock
2820 * When using unlimited objects, it is common practice to also specify
2821 * #CONFIGURE_UNIFIED_WORK_AREAS so the system operates with a single pool of
2822 * memory for both RTEMS Workspace and C Program Heap.
2823 *
2824 * This option does not override an explicit configuration for a particular
2825 * object class by the user.
2826 *
2827 * See also #CONFIGURE_UNLIMITED_ALLOCATION_SIZE.
2828 * @endparblock
2829 */
2830#define CONFIGURE_UNLIMITED_OBJECTS
2831
2832/**
2833 * @brief This configuration option is a boolean feature define.
2834 *
2835 * In case this configuration option is defined, then the system initialization
2836 * is verbose.
2837 *
2838 * @par Default Configuration
2839 * If this configuration option is undefined, then the described feature is not
2840 * enabled.
2841 *
2842 * @par Notes
2843 * You may use this feature to debug system initialization issues.  The
2844 * printk() function is used to print the information.
2845 */
2846#define CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
2847
2848/**
2849 * @brief This configuration option is a boolean feature define.
2850 *
2851 * In case this configuration option is defined, then the memory areas used for
2852 * the RTEMS Workspace and the C Program Heap are zeroed with a ``0x00`` byte
2853 * pattern during system initialization.
2854 *
2855 * @par Default Configuration
2856 * If this configuration option is undefined, then the described feature is not
2857 * enabled.
2858 *
2859 * @par Notes
2860 * Zeroing memory can add significantly to the system initialization time. It
2861 * is not necessary for RTEMS but is often assumed by support libraries.  In
2862 * case #CONFIGURE_DIRTY_MEMORY is also defined, then the memory is first
2863 * dirtied and then zeroed.
2864 */
2865#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
2866
2867/** @} */
2868
2869/**
2870 * @defgroup RTEMSApplConfigIdleTaskConfiguration Idle Task Configuration
2871 *
2872 * @ingroup RTEMSApplConfig
2873 *
2874 * This section describes configuration options related to the idle tasks.
2875 *
2876 * @{
2877 */
2878
2879/**
2880 * @brief This configuration option is an initializer define.
2881 *
2882 * The value of this configuration option initializes the IDLE thread body.
2883 *
2884 * @par Default Value
2885 * If #BSP_IDLE_TASK_BODY is defined, then this will be the default value,
2886 * otherwise the default value is ``_CPU_Thread_Idle_body``.
2887 *
2888 * @par Value Constraints
2889 * The value of this configuration option shall be defined to a valid function
2890 * pointer of the type ``void *( *idle_body )( uintptr_t )``.
2891 *
2892 * @par Notes
2893 * @parblock
2894 * IDLE threads shall not block.  A blocking IDLE thread results in undefined
2895 * system behaviour because the scheduler assume that at least one ready thread
2896 * exists.
2897 *
2898 * IDLE threads can be used to initialize the application, see configuration
2899 * option #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION.
2900 * @endparblock
2901 */
2902#define CONFIGURE_IDLE_TASK_BODY
2903
2904/**
2905 * @brief This configuration option is a boolean feature define.
2906 *
2907 * This configuration option is defined to indicate that the user has
2908 * configured **no** user initialization tasks or threads and that the user
2909 * provided IDLE task will perform application initialization and then
2910 * transform itself into an IDLE task.
2911 *
2912 * @par Default Configuration
2913 * If this configuration option is undefined, then the user is assumed to
2914 * provide one or more initialization tasks.
2915 *
2916 * @par Notes
2917 * @parblock
2918 * If you use this option be careful, the user IDLE task **cannot** block at
2919 * all during the initialization sequence.  Further, once application
2920 * initialization is complete, it shall make itself preemptible and enter an
2921 * idle body loop.
2922 *
2923 * The IDLE task shall run at the lowest priority of all tasks in the system.
2924 *
2925 * If this configuration option is defined, then it is mandatory to configure a
2926 * user IDLE task with the #CONFIGURE_IDLE_TASK_BODY configuration option,
2927 * otherwise a compile time error in the configuration file will occur.
2928 *
2929 * The application shall define exactly one of the following configuration
2930 * options
2931 *
2932 * * #CONFIGURE_RTEMS_INIT_TASKS_TABLE,
2933 *
2934 * * #CONFIGURE_POSIX_INIT_THREAD_TABLE, or
2935 *
2936 * * ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
2937 *
2938 * otherwise a compile time error in the configuration file will occur.
2939 * @endparblock
2940 */
2941#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
2942
2943/**
2944 * @brief This configuration option is an integer define.
2945 *
2946 * The value of this configuration option defines the task stack size for an
2947 * IDLE task.
2948 *
2949 * @par Default Value
2950 * The default value is #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
2951 *
2952 * @par Value Constraints
2953 * @parblock
2954 * The value of this configuration option shall satisfy all of the following
2955 * constraints:
2956 *
2957 * * It shall be greater than or equal to a BSP-specific and
2958 *   application-specific minimum value.
2959 *
2960 * * It shall be small enough so that the IDLE task stack area calculation
2961 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
2962 *   <a href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
2963 * @endparblock
2964 *
2965 * @par Notes
2966 * In SMP configurations, there is one IDLE task per configured processor, see
2967 * #CONFIGURE_MAXIMUM_PROCESSORS.
2968 */
2969#define CONFIGURE_IDLE_TASK_STACK_SIZE
2970
2971/** @} */
2972
2973/**
2974 * @defgroup RTEMSApplConfigMultiprocessingConfiguration \
2975 *   Multiprocessing Configuration
2976 *
2977 * @ingroup RTEMSApplConfig
2978 *
2979 * This section describes multiprocessing related configuration options.  The
2980 * options are only used if RTEMS was built with the
2981 * ``--enable-multiprocessing`` build configuration option.  Additionally, this
2982 * class of configuration options are only applicable if the configuration
2983 * option #CONFIGURE_MP_APPLICATION is defined.  The multiprocessing (MPCI)
2984 * support must not be confused with the SMP support.
2985 *
2986 * @{
2987 */
2988
2989/**
2990 * @brief This configuration option is an integer define.
2991 *
2992 * The value of this configuration option defines the number of bytes the
2993 * applications wishes to add to the MPCI task stack on top of
2994 * #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
2995 *
2996 * @par Default Value
2997 * The default value is 0.
2998 *
2999 * @par Value Constraints
3000 * @parblock
3001 * The value of this configuration option shall satisfy all of the following
3002 * constraints:
3003 *
3004 * * It shall be greater than or equal to 0.
3005 *
3006 * * It shall be less than or equal to <a
3007 *   href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
3008 *
3009 * * It shall be small enough so that the MPCI receive server stack area
3010 *   calculation carried out by ``<rtems/confdefs.h>`` does not overflow an
3011 *   integer of type <a
3012 *   href="https://en.cppreference.com/w/c/types/size_t">size_t</a>.
3013 * @endparblock
3014 *
3015 * @par Notes
3016 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3017 * defined.
3018 */
3019#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
3020
3021/**
3022 * @brief This configuration option is a boolean feature define.
3023 *
3024 * This configuration option is defined to indicate that the application
3025 * intends to be part of a multiprocessing configuration.  Additional
3026 * configuration options are assumed to be provided.
3027 *
3028 * @par Default Configuration
3029 * If this configuration option is undefined, then the multiprocessing services
3030 * are not initialized.
3031 *
3032 * @par Notes
3033 * This configuration option shall be undefined if the multiprocessing support
3034 * is not enabled (e.g. RTEMS was built without the
3035 * ``--enable-multiprocessing`` build configuration option).  Otherwise a
3036 * compile time error in the configuration file will occur.
3037 */
3038#define CONFIGURE_MP_APPLICATION
3039
3040/**
3041 * @brief This configuration option is an integer define.
3042 *
3043 * The value of this configuration option defines the maximum number of
3044 * concurrently active global objects in a multiprocessor system.
3045 *
3046 * @par Default Value
3047 * The default value is 32.
3048 *
3049 * @par Value Constraints
3050 * The value of this configuration option shall be greater than or equal to 0
3051 * and less than or equal to <a
3052 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
3053 *
3054 * @par Notes
3055 * @parblock
3056 * This value corresponds to the total number of objects which can be created
3057 * with the #RTEMS_GLOBAL attribute.
3058 *
3059 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3060 * defined.
3061 * @endparblock
3062 */
3063#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
3064
3065/**
3066 * @brief This configuration option is an integer define.
3067 *
3068 * The value of this configuration option defines the maximum number of nodes
3069 * in a multiprocessor system.
3070 *
3071 * @par Default Value
3072 * The default value is 2.
3073 *
3074 * @par Value Constraints
3075 * The value of this configuration option shall be greater than or equal to 0
3076 * and less than or equal to <a
3077 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
3078 *
3079 * @par Notes
3080 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3081 * defined.
3082 */
3083#define CONFIGURE_MP_MAXIMUM_NODES
3084
3085/**
3086 * @brief This configuration option is an integer define.
3087 *
3088 * The value of this configuration option defines the maximum number of
3089 * concurrently active thread/task proxies on this node in a multiprocessor
3090 * system.
3091 *
3092 * @par Default Value
3093 * The default value is 32.
3094 *
3095 * @par Value Constraints
3096 * The value of this configuration option shall be greater than or equal to 0
3097 * and less than or equal to <a
3098 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
3099 *
3100 * @par Notes
3101 * @parblock
3102 * Since a proxy is used to represent a remote task/thread which is blocking on
3103 * this node. This configuration parameter reflects the maximum number of
3104 * remote tasks/threads which can be blocked on objects on this node, see <a
3105 * href=https://docs.rtems.org/branches/master/c-user/multiprocessing.html#proxies>Proxies</a>.
3106 *
3107 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3108 * defined.
3109 * @endparblock
3110 */
3111#define CONFIGURE_MP_MAXIMUM_PROXIES
3112
3113/**
3114 * @brief This configuration option is an initializer define.
3115 *
3116 * The value of this configuration option initializes the MPCI Configuration
3117 * Table.
3118 *
3119 * @par Default Value
3120 * The default value is ``&MPCI_table``.
3121 *
3122 * @par Value Constraints
3123 * The value of this configuration option shall be a pointer to
3124 * ::rtems_mpci_table.
3125 *
3126 * @par Notes
3127 * @parblock
3128 * RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
3129 * Multiprocessor System assuming the BSP provides the proper set of supporting
3130 * methods.
3131 *
3132 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3133 * defined.
3134 * @endparblock
3135 */
3136#define CONFIGURE_MP_MPCI_TABLE_POINTER
3137
3138/**
3139 * @brief This configuration option is an integer define.
3140 *
3141 * The value of this configuration option defines the node number of this node
3142 * in a multiprocessor system.
3143 *
3144 * @par Default Value
3145 * The default value is ``NODE_NUMBER``.
3146 *
3147 * @par Value Constraints
3148 * The value of this configuration option shall be greater than or equal to 0
3149 * and less than or equal to <a
3150 * href="https://en.cppreference.com/w/c/types/integer">UINT32_MAX</a>.
3151 *
3152 * @par Notes
3153 * @parblock
3154 * In the RTEMS Multiprocessing Test Suite, the node number is derived from the
3155 * Makefile variable ``NODE_NUMBER``. The same code is compiled with the
3156 * ``NODE_NUMBER`` set to different values. The test programs behave
3157 * differently based upon their node number.
3158 *
3159 * This configuration option is only evaluated if #CONFIGURE_MP_APPLICATION is
3160 * defined.
3161 * @endparblock
3162 */
3163#define CONFIGURE_MP_NODE_NUMBER
3164
3165/** @} */
3166
3167/**
3168 * @defgroup RTEMSApplConfigPOSIXAPIConfiguration POSIX API Configuration
3169 *
3170 * @ingroup RTEMSApplConfig
3171 *
3172 * This section describes configuration options related to the POSIX API.  Most
3173 * POSIX API objects are available by default since RTEMS 5.1.  The queued
3174 * signals and timers are only available if RTEMS was built with the
3175 * ``--enable-posix`` build configuration option.
3176 *
3177 * @{
3178 */
3179
3180/**
3181 * @brief This configuration option is an integer define.
3182 *
3183 * The value of this configuration option defines the maximum number of POSIX
3184 * API Keys that can be concurrently active.
3185 *
3186 * @par Default Value
3187 * The default value is 0.
3188 *
3189 * @par Value Constraints
3190 * @parblock
3191 * The value of this configuration option shall satisfy all of the following
3192 * constraints:
3193 *
3194 * * It shall be greater than or equal to 0.
3195 *
3196 * * It shall be less than or equal to 65535.
3197 *
3198 * * It shall be less than or equal to a BSP-specific and application-specific
3199 *   value which depends on the size of the memory available to the
3200 *   application.
3201 *
3202 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3203 *   objects for this object class, if the value passed to
3204 *   rtems_resource_unlimited() satisfies all other constraints of this
3205 *   configuration option.
3206 * @endparblock
3207 *
3208 * @par Notes
3209 * This object class can be configured in unlimited allocation mode, see <a
3210 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3211 * Objects</a>.
3212 */
3213#define CONFIGURE_MAXIMUM_POSIX_KEYS
3214
3215/**
3216 * @brief This configuration option is an integer define.
3217 *
3218 * The value of this configuration option defines the maximum number of key
3219 * value pairs used by POSIX API Keys that can be concurrently active.
3220 *
3221 * @par Default Value
3222 * The default value is #CONFIGURE_MAXIMUM_POSIX_KEYS *
3223 * #CONFIGURE_MAXIMUM_TASKS + #CONFIGURE_MAXIMUM_POSIX_THREADS.
3224 *
3225 * @par Value Constraints
3226 * @parblock
3227 * The value of this configuration option shall satisfy all of the following
3228 * constraints:
3229 *
3230 * * It shall be greater than or equal to 0.
3231 *
3232 * * It shall be less than or equal to 65535.
3233 *
3234 * * It shall be less than or equal to a BSP-specific and application-specific
3235 *   value which depends on the size of the memory available to the
3236 *   application.
3237 *
3238 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3239 *   objects for this object class, if the value passed to
3240 *   rtems_resource_unlimited() satisfies all other constraints of this
3241 *   configuration option.
3242 * @endparblock
3243 *
3244 * @par Notes
3245 * @parblock
3246 * This object class can be configured in unlimited allocation mode, see <a
3247 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3248 * Objects</a>.
3249 *
3250 * A key value pair is created by pthread_setspecific() if the value is not <a
3251 * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>, otherwise it is
3252 * deleted.
3253 * @endparblock
3254 */
3255#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
3256
3257/**
3258 * @brief This configuration option is an integer define.
3259 *
3260 * The value of this configuration option defines the maximum number of POSIX
3261 * API Message Queues that can be concurrently active.
3262 *
3263 * @par Default Value
3264 * The default value is 0.
3265 *
3266 * @par Value Constraints
3267 * @parblock
3268 * The value of this configuration option shall satisfy all of the following
3269 * constraints:
3270 *
3271 * * It shall be greater than or equal to 0.
3272 *
3273 * * It shall be less than or equal to 65535.
3274 *
3275 * * It shall be less than or equal to a BSP-specific and application-specific
3276 *   value which depends on the size of the memory available to the
3277 *   application.
3278 *
3279 * * It shall be small enough so that the RTEMS Workspace size calculation
3280 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
3281 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3282 *
3283 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3284 *   objects for this object class, if the value passed to
3285 *   rtems_resource_unlimited() satisfies all other constraints of this
3286 *   configuration option.
3287 * @endparblock
3288 *
3289 * @par Notes
3290 * This object class can be configured in unlimited allocation mode, see <a
3291 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3292 * Objects</a>.  You have to account for the memory used to store the messages
3293 * of each message queue, see #CONFIGURE_MESSAGE_BUFFER_MEMORY.
3294 */
3295#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
3296
3297/**
3298 * @brief This configuration option is an integer define.
3299 *
3300 * The value of this configuration option defines the maximum number of POSIX
3301 * API Queued Signals that can be concurrently active.
3302 *
3303 * @par Default Value
3304 * The default value is 0.
3305 *
3306 * @par Value Constraints
3307 * @parblock
3308 * The value of this configuration option shall satisfy all of the following
3309 * constraints:
3310 *
3311 * * It shall be greater than or equal to 0.
3312 *
3313 * * It shall be less than or equal to a BSP-specific and application-specific
3314 *   value which depends on the size of the memory available to the
3315 *   application.
3316 *
3317 * * It shall be small enough so that the RTEMS Workspace size calculation
3318 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
3319 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3320 *
3321 * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
3322 *   without the ``--enable-posix`` build configuration option).  Otherwise a
3323 *   compile time error in the configuration file will occur.
3324 * @endparblock
3325 *
3326 * @par Notes
3327 * @parblock
3328 * Unlimited objects are not available for queued signals.
3329 *
3330 * Queued signals are only available if RTEMS was built with the
3331 * ``--enable-posix`` build configuration option.
3332 * @endparblock
3333 */
3334#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
3335
3336/**
3337 * @brief This configuration option is an integer define.
3338 *
3339 * The value of this configuration option defines the maximum number of POSIX
3340 * API Named Semaphores that can be concurrently active.
3341 *
3342 * @par Default Value
3343 * The default value is 0.
3344 *
3345 * @par Value Constraints
3346 * @parblock
3347 * The value of this configuration option shall satisfy all of the following
3348 * constraints:
3349 *
3350 * * It shall be greater than or equal to 0.
3351 *
3352 * * It shall be less than or equal to 65535.
3353 *
3354 * * It shall be less than or equal to a BSP-specific and application-specific
3355 *   value which depends on the size of the memory available to the
3356 *   application.
3357 *
3358 * * It shall be small enough so that the RTEMS Workspace size calculation
3359 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
3360 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3361 *
3362 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3363 *   objects for this object class, if the value passed to
3364 *   rtems_resource_unlimited() satisfies all other constraints of this
3365 *   configuration option.
3366 * @endparblock
3367 *
3368 * @par Notes
3369 * @parblock
3370 * This object class can be configured in unlimited allocation mode, see <a
3371 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3372 * Objects</a>.
3373 *
3374 * Named semaphores are created with sem_open().  Semaphores initialized with
3375 * sem_init() are not affected by this configuration option since the storage
3376 * space for these semaphores is user-provided.
3377 * @endparblock
3378 */
3379#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
3380
3381/**
3382 * @brief This configuration option is an integer define.
3383 *
3384 * The value of this configuration option defines the maximum number of POSIX
3385 * API Shared Memory objects that can be concurrently active.
3386 *
3387 * @par Default Value
3388 * The default value is 0.
3389 *
3390 * @par Value Constraints
3391 * @parblock
3392 * The value of this configuration option shall satisfy all of the following
3393 * constraints:
3394 *
3395 * * It shall be greater than or equal to 0.
3396 *
3397 * * It shall be less than or equal to 65535.
3398 *
3399 * * It shall be less than or equal to a BSP-specific and application-specific
3400 *   value which depends on the size of the memory available to the
3401 *   application.
3402 *
3403 * * It shall be small enough so that the RTEMS Workspace size calculation
3404 *   carried out by ``<rtems/confdefs.h>`` does not overflow an integer of type
3405 *   <a href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3406 *
3407 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3408 *   objects for this object class, if the value passed to
3409 *   rtems_resource_unlimited() satisfies all other constraints of this
3410 *   configuration option.
3411 * @endparblock
3412 *
3413 * @par Notes
3414 * This object class can be configured in unlimited allocation mode, see <a
3415 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3416 * Objects</a>.
3417 */
3418#define CONFIGURE_MAXIMUM_POSIX_SHMS
3419
3420/**
3421 * @brief This configuration option is an integer define.
3422 *
3423 * The value of this configuration option defines the maximum number of POSIX
3424 * API Threads that can be concurrently active.
3425 *
3426 * @par Default Value
3427 * The default value is 0.
3428 *
3429 * @par Value Constraints
3430 * @parblock
3431 * The value of this configuration option shall satisfy all of the following
3432 * constraints:
3433 *
3434 * * It shall be greater than or equal to 0.
3435 *
3436 * * It shall be less than or equal to 65535.
3437 *
3438 * * It shall be less than or equal to a BSP-specific and application-specific
3439 *   value which depends on the size of the memory available to the
3440 *   application.
3441 *
3442 * * It shall be small enough so that the task stack space calculation carried
3443 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
3444 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3445 * @endparblock
3446 *
3447 * @par Notes
3448 * @parblock
3449 * This object class can be configured in unlimited allocation mode, see <a
3450 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3451 * Objects</a>.
3452 *
3453 * This calculations for the required memory in the RTEMS Workspace for threads
3454 * assume that each thread has a minimum stack size and has floating point
3455 * support enabled.  The configuration option #CONFIGURE_EXTRA_TASK_STACKS is
3456 * used to specify thread stack requirements **above** the minimum size
3457 * required.
3458 *
3459 * The maximum number of Classic API Tasks is specified by
3460 * #CONFIGURE_MAXIMUM_TASKS.
3461 *
3462 * All POSIX threads have floating point enabled.
3463 * @endparblock
3464 */
3465#define CONFIGURE_MAXIMUM_POSIX_THREADS
3466
3467/**
3468 * @brief This configuration option is an integer define.
3469 *
3470 * The value of this configuration option defines the maximum number of POSIX
3471 * API Timers that can be concurrently active.
3472 *
3473 * @par Default Value
3474 * The default value is 0.
3475 *
3476 * @par Value Constraints
3477 * @parblock
3478 * The value of this configuration option shall satisfy all of the following
3479 * constraints:
3480 *
3481 * * It shall be greater than or equal to 0.
3482 *
3483 * * It shall be less than or equal to 65535.
3484 *
3485 * * It shall be less than or equal to a BSP-specific and application-specific
3486 *   value which depends on the size of the memory available to the
3487 *   application.
3488 *
3489 * * It may be defined through rtems_resource_unlimited() the enable unlimited
3490 *   objects for this object class, if the value passed to
3491 *   rtems_resource_unlimited() satisfies all other constraints of this
3492 *   configuration option.
3493 *
3494 * * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
3495 *   without the ``--enable-posix`` build configuration option).  Otherwise a
3496 *   compile time error in the configuration file will occur.
3497 * @endparblock
3498 *
3499 * @par Notes
3500 * @parblock
3501 * This object class can be configured in unlimited allocation mode, see <a
3502 * href=https://docs.rtems.org/branches/master/c-user/config/intro.html#unlimited-objects>Unlimited
3503 * Objects</a>.
3504 *
3505 * Timers are only available if RTEMS was built with the ``--enable-posix``
3506 * build configuration option.
3507 * @endparblock
3508 */
3509#define CONFIGURE_MAXIMUM_POSIX_TIMERS
3510
3511/**
3512 * @brief This configuration option is an integer define.
3513 *
3514 * The value of this configuration option defines the minimum stack size in
3515 * bytes for every POSIX thread in the system.
3516 *
3517 * @par Default Value
3518 * The default value is two times the value of
3519 * #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
3520 *
3521 * @par Value Constraints
3522 * @parblock
3523 * The value of this configuration option shall satisfy all of the following
3524 * constraints:
3525 *
3526 * * It shall be small enough so that the task stack space calculation carried
3527 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
3528 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3529 *
3530 * * It shall be greater than or equal to a BSP-specific and
3531 *   application-specific minimum value.
3532 * @endparblock
3533 */
3534#define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
3535
3536/** @} */
3537
3538/**
3539 * @defgroup RTEMSApplConfigPOSIXInitializationThreadConfiguration \
3540 *   POSIX Initialization Thread Configuration
3541 *
3542 * @ingroup RTEMSApplConfig
3543 *
3544 * This section describes configuration options related to the POSIX
3545 * initialization thread.
3546 *
3547 * @{
3548 */
3549
3550/**
3551 * @brief This configuration option is an initializer define.
3552 *
3553 * The value of this configuration option initializes the entry point of the
3554 * POSIX API initialization thread.
3555 *
3556 * @par Default Value
3557 * The default value is ``POSIX_Init``.
3558 *
3559 * @par Value Constraints
3560 * The value of this configuration option shall be defined to a valid function
3561 * pointer of the type ``void *( *entry_point )( void * )``.
3562 *
3563 * @par Notes
3564 * The application shall provide the function referenced by this configuration
3565 * option.
3566 */
3567#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
3568
3569/**
3570 * @brief This configuration option is an integer define.
3571 *
3572 * The value of this configuration option defines the thread stack size of the
3573 * POSIX API initialization thread.
3574 *
3575 * @par Default Value
3576 * The default value is #CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE.
3577 *
3578 * @par Value Constraints
3579 * @parblock
3580 * The value of this configuration option shall satisfy all of the following
3581 * constraints:
3582 *
3583 * * It shall be greater than or equal to #CONFIGURE_MINIMUM_TASK_STACK_SIZE.
3584 *
3585 * * It shall be small enough so that the task stack space calculation carried
3586 *   out by ``<rtems/confdefs.h>`` does not overflow an integer of type <a
3587 *   href="https://en.cppreference.com/w/c/types/integer">uintptr_t</a>.
3588 * @endparblock
3589 */
3590#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
3591
3592/**
3593 * @brief This configuration option is a boolean feature define.
3594 *
3595 * In case this configuration option is defined, then exactly one POSIX
3596 * initialization thread is configured.
3597 *
3598 * @par Default Configuration
3599 * If this configuration option is undefined, then the described feature is not
3600 * enabled.
3601 *
3602 * @par Notes
3603 * @parblock
3604 * The application shall define exactly one of the following configuration
3605 * options
3606 *
3607 * * #CONFIGURE_RTEMS_INIT_TASKS_TABLE,
3608 *
3609 * * ``CONFIGURE_POSIX_INIT_THREAD_TABLE``, or
3610 *
3611 * * #CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3612 *
3613 * otherwise a compile time error in the configuration file will occur.
3614 * @endparblock
3615 */
3616#define CONFIGURE_POSIX_INIT_THREAD_TABLE
3617
3618/** @} */
3619
3620/**
3621 * @defgroup RTEMSApplConfigGeneralSchedulerConfiguration \
3622 *   General Scheduler Configuration
3623 *
3624 * @ingroup RTEMSApplConfig
3625 *
3626 * This section describes configuration options related to selecting a
3627 * scheduling algorithm for an application.  A scheduler configuration is
3628 * optional and only necessary in very specific circumstances.  A normal
3629 * application configuration does not need any of the configuration options
3630 * described in this section.
3631 *
3632 * By default, the <a
3633 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
3634 * Priority Scheduler</a> algorithm is used in uniprocessor configurations.  In
3635 * case SMP is enabled and the configured maximum processors
3636 * (#CONFIGURE_MAXIMUM_PROCESSORS) is greater than one, then the <a
3637 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
3638 * Deadline First SMP Scheduler</a> is selected as the default scheduler
3639 * algorithm.
3640 *
3641 * For the schedulers provided by RTEMS (see <a
3642 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html>Scheduling
3643 * Concepts</a>), the configuration is straightforward.  All that is required
3644 * is to define the configuration option which specifies which scheduler you
3645 * want for in your application.
3646 *
3647 * The pluggable scheduler interface also enables the user to provide their own
3648 * scheduling algorithm.  If you choose to do this, you must define multiple
3649 * configuration option.
3650 *
3651 * @{
3652 */
3653
3654/**
3655 * @brief This configuration option is an integer define.
3656 *
3657 * The value of this configuration option defines the maximum number Constant
3658 * Bandwidth Servers that can be concurrently active.
3659 *
3660 * @par Default Value
3661 * The default value is #CONFIGURE_MAXIMUM_TASKS.
3662 *
3663 * @par Value Constraints
3664 * @parblock
3665 * The value of this configuration option shall satisfy all of the following
3666 * constraints:
3667 *
3668 * * It shall be greater than or equal to 0.
3669 *
3670 * * It shall be less than or equal to <a
3671 *   href="https://en.cppreference.com/w/c/types/limits">SIZE_MAX</a>.
3672 *
3673 * * It shall be less than or equal to a BSP-specific and application-specific
3674 *   value which depends on the size of the memory available to the
3675 *   application.
3676 * @endparblock
3677 *
3678 * @par Notes
3679 * This configuration option is only evaluated if the configuration option
3680 * #CONFIGURE_SCHEDULER_CBS is defined.
3681 */
3682#define CONFIGURE_CBS_MAXIMUM_SERVERS
3683
3684/**
3685 * @brief This configuration option is an integer define.
3686 *
3687 * For the following schedulers
3688 *
3689 * * <a
3690 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
3691 *   Priority Scheduler</a>, which is the default in uniprocessor
3692 *   configurations and can be configured through the
3693 *   #CONFIGURE_SCHEDULER_PRIORITY configuration option,
3694 *
3695 * * <a
3696 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
3697 *   Priority SMP Scheduler</a> which can be configured through the
3698 *   #CONFIGURE_SCHEDULER_PRIORITY_SMP configuration option, and
3699 *
3700 * * <a
3701 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
3702 *   Processor Affinity Priority SMP Scheduler</a> which can be configured
3703 *   through the #CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP configuration
3704 *   option
3705 *
3706 * this configuration option specifies the maximum numeric priority of any task
3707 * for these schedulers and one less that the number of priority levels for
3708 * these schedulers.  For all other schedulers provided by RTEMS, this
3709 * configuration option has no effect.
3710 *
3711 * @par Default Value
3712 * The default value is 255.
3713 *
3714 * @par Value Constraints
3715 * The value of this configuration option shall be an element of {3, 7, 31, 63,
3716 * 127, 255}.
3717 *
3718 * @par Notes
3719 * @parblock
3720 * The numerically greatest priority is the logically lowest priority in the
3721 * system and will thus be used by the IDLE task.
3722 *
3723 * Priority zero is reserved for internal use by RTEMS and is not available to
3724 * applications.
3725 *
3726 * Reducing the number of priorities through this configuration option reduces
3727 * the amount of memory allocated by the schedulers listed above.  These
3728 * schedulers use a chain control structure per priority and this structure
3729 * consists of three pointers.  On a 32-bit architecture, the allocated memory
3730 * is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
3731 * priority levels (default), 48 bytes for 4 priority levels
3732 * (``CONFIGURE_MAXIMUM_PRIORITY == 3``).
3733 *
3734 * The default value is 255, because RTEMS shall support 256 priority levels to
3735 * be compliant with various standards.  These priorities range from 0 to 255.
3736 * @endparblock
3737 */
3738#define CONFIGURE_MAXIMUM_PRIORITY
3739
3740/**
3741 * @brief This configuration option is an initializer define.
3742 *
3743 * The value of this configuration option is used to initialize the initial
3744 * scheduler to processor assignments.
3745 *
3746 * @par Default Value
3747 * The default value of this configuration option is computed so that the
3748 * default scheduler is assigned to each configured processor (up to 32).
3749 *
3750 * @par Value Constraints
3751 * @parblock
3752 * The value of this configuration option shall satisfy all of the following
3753 * constraints:
3754 *
3755 * * It shall be a list of the following macros:
3756 *
3757 *   * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
3758 *
3759 *   * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
3760 *
3761 * * It shall be a list of exactly #CONFIGURE_MAXIMUM_PROCESSORS elements.
3762 * @endparblock
3763 *
3764 * @par Notes
3765 * @parblock
3766 * This configuration option is only evaluated in SMP configurations.
3767 *
3768 * This is an advanced configuration option, see <a
3769 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3770 * Scheduler Configuration</a>.
3771 * @endparblock
3772 */
3773#define CONFIGURE_SCHEDULER_ASSIGNMENTS
3774
3775/**
3776 * @brief This configuration option is a boolean feature define.
3777 *
3778 * In case this configuration option is defined, then <a
3779 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#constant-bandwidth-server-scheduling-cbs>Constant
3780 * Bandwidth Server Scheduling (CBS)</a> algorithm is made available to the
3781 * application.
3782 *
3783 * @par Default Configuration
3784 * If this configuration option is undefined, then the described feature is not
3785 * enabled.
3786 *
3787 * @par Notes
3788 * @parblock
3789 * This scheduler configuration option is an advanced configuration option.
3790 * Think twice before you use it.
3791 *
3792 * In case no explicit <a
3793 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3794 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3795 * exactly one processor.
3796 * @endparblock
3797 */
3798#define CONFIGURE_SCHEDULER_CBS
3799
3800/**
3801 * @brief This configuration option is a boolean feature define.
3802 *
3803 * In case this configuration option is defined, then <a
3804 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-scheduler>Earliest
3805 * Deadline First Scheduler</a> algorithm is made available to the application.
3806 *
3807 * @par Default Configuration
3808 * If this configuration option is undefined, then the described feature is not
3809 * enabled.
3810 *
3811 * @par Notes
3812 * @parblock
3813 * This scheduler configuration option is an advanced configuration option.
3814 * Think twice before you use it.
3815 *
3816 * In case no explicit <a
3817 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3818 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3819 * exactly one processor.
3820 * @endparblock
3821 */
3822#define CONFIGURE_SCHEDULER_EDF
3823
3824/**
3825 * @brief This configuration option is a boolean feature define.
3826 *
3827 * In case this configuration option is defined, then <a
3828 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
3829 * Deadline First SMP Scheduler</a> algorithm is made available to the
3830 * application.
3831 *
3832 * @par Default Configuration
3833 * If this configuration option is undefined, then the described feature is not
3834 * enabled.
3835 *
3836 * @par Notes
3837 * @parblock
3838 * This scheduler configuration option is an advanced configuration option.
3839 * Think twice before you use it.
3840 *
3841 * This scheduler algorithm is only available when RTEMS is built with SMP
3842 * support enabled.
3843 *
3844 * In case no explicit <a
3845 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3846 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3847 * up to 32 processors.
3848 *
3849 * This scheduler algorithm is the default in SMP configurations if
3850 * #CONFIGURE_MAXIMUM_PROCESSORS is greater than one.
3851 * @endparblock
3852 */
3853#define CONFIGURE_SCHEDULER_EDF_SMP
3854
3855/**
3856 * @brief This configuration option is an integer define.
3857 *
3858 * The value of this configuration option defines the name of the default
3859 * scheduler.
3860 *
3861 * @par Default Value
3862 * @parblock
3863 * The default value is
3864 *
3865 * * ``"MEDF"`` for the <a
3866 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler>Earliest
3867 *   Deadline First SMP Scheduler</a>,
3868 *
3869 * * ``"MPA "`` for the <a
3870 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
3871 *   Processor Affinity Priority SMP Scheduler</a>,
3872 *
3873 * * ``"MPD "`` for the <a
3874 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
3875 *   Priority SMP Scheduler</a>,
3876 *
3877 * * ``"MPS "`` for the <a
3878 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-smp-scheduler>Simple
3879 *   Priority SMP Scheduler</a>,
3880 *
3881 * * ``"UCBS"`` for the <a
3882 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#constant-bandwidth-server-scheduling-cbs>Constant
3883 *   Bandwidth Server Scheduling (CBS)</a>,
3884 *
3885 * * ``"UEDF"`` for the <a
3886 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-scheduler>Earliest
3887 *   Deadline First Scheduler</a>,
3888 *
3889 * * ``"UPD "`` for the <a
3890 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
3891 *   Priority Scheduler</a>, and
3892 *
3893 * * ``"UPS "`` for the <a
3894 *   href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-scheduler>Simple
3895 *   Priority Scheduler</a>.
3896 * @endparblock
3897 *
3898 * @par Value Constraints
3899 * The value of this configuration option shall be a valid integer of type
3900 * ::rtems_name.
3901 *
3902 * @par Notes
3903 * @parblock
3904 * This scheduler configuration option is an advanced configuration option.
3905 * Think twice before you use it.
3906 *
3907 * Schedulers can be identified via rtems_scheduler_ident().
3908 *
3909 * Use rtems_build_name() to define the scheduler name.
3910 * @endparblock
3911 */
3912#define CONFIGURE_SCHEDULER_NAME
3913
3914/**
3915 * @brief This configuration option is a boolean feature define.
3916 *
3917 * In case this configuration option is defined, then <a
3918 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-scheduler>Deterministic
3919 * Priority Scheduler</a> algorithm is made available to the application.
3920 *
3921 * @par Default Configuration
3922 * If this configuration option is undefined, then the described feature is not
3923 * enabled.
3924 *
3925 * @par Notes
3926 * @parblock
3927 * This scheduler configuration option is an advanced configuration option.
3928 * Think twice before you use it.
3929 *
3930 * In case no explicit <a
3931 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3932 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3933 * exactly one processor.
3934 *
3935 * This scheduler algorithm is the default when #CONFIGURE_MAXIMUM_PROCESSORS
3936 * is exactly one.
3937 *
3938 * The memory allocated for this scheduler depends on the
3939 * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
3940 * @endparblock
3941 */
3942#define CONFIGURE_SCHEDULER_PRIORITY
3943
3944/**
3945 * @brief This configuration option is a boolean feature define.
3946 *
3947 * In case this configuration option is defined, then <a
3948 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#arbitrary-processor-affinity-priority-smp-scheduler>Arbitrary
3949 * Processor Affinity Priority SMP Scheduler</a> algorithm is made available to
3950 * the application.
3951 *
3952 * @par Default Configuration
3953 * If this configuration option is undefined, then the described feature is not
3954 * enabled.
3955 *
3956 * @par Notes
3957 * @parblock
3958 * This scheduler configuration option is an advanced configuration option.
3959 * Think twice before you use it.
3960 *
3961 * This scheduler algorithm is only available when RTEMS is built with SMP
3962 * support enabled.
3963 *
3964 * In case no explicit <a
3965 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3966 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3967 * up to 32 processors.
3968 *
3969 * The memory allocated for this scheduler depends on the
3970 * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
3971 * @endparblock
3972 */
3973#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
3974
3975/**
3976 * @brief This configuration option is a boolean feature define.
3977 *
3978 * In case this configuration option is defined, then <a
3979 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#deterministic-priority-smp-scheduler>Deterministic
3980 * Priority SMP Scheduler</a> algorithm is made available to the application.
3981 *
3982 * @par Default Configuration
3983 * If this configuration option is undefined, then the described feature is not
3984 * enabled.
3985 *
3986 * @par Notes
3987 * @parblock
3988 * This scheduler configuration option is an advanced configuration option.
3989 * Think twice before you use it.
3990 *
3991 * This scheduler algorithm is only available when RTEMS is built with SMP
3992 * support enabled.
3993 *
3994 * In case no explicit <a
3995 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
3996 * Scheduler Configuration</a> is present, then it is used as the scheduler for
3997 * up to 32 processors.
3998 *
3999 * The memory allocated for this scheduler depends on the
4000 * #CONFIGURE_MAXIMUM_PRIORITY configuration option.
4001 * @endparblock
4002 */
4003#define CONFIGURE_SCHEDULER_PRIORITY_SMP
4004
4005/**
4006 * @brief This configuration option is a boolean feature define.
4007 *
4008 * In case this configuration option is defined, then <a
4009 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-scheduler>Simple
4010 * Priority Scheduler</a> algorithm is made available to the application.
4011 *
4012 * @par Default Configuration
4013 * If this configuration option is undefined, then the described feature is not
4014 * enabled.
4015 *
4016 * @par Notes
4017 * @parblock
4018 * This scheduler configuration option is an advanced configuration option.
4019 * Think twice before you use it.
4020 *
4021 * In case no explicit <a
4022 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
4023 * Scheduler Configuration</a> is present, then it is used as the scheduler for
4024 * exactly one processor.
4025 * @endparblock
4026 */
4027#define CONFIGURE_SCHEDULER_SIMPLE
4028
4029/**
4030 * @brief This configuration option is a boolean feature define.
4031 *
4032 * In case this configuration option is defined, then <a
4033 * href=https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#simple-priority-smp-scheduler>Simple
4034 * Priority SMP Scheduler</a> algorithm is made available to the application.
4035 * application.
4036 *
4037 * @par Default Configuration
4038 * If this configuration option is undefined, then the described feature is not
4039 * enabled.
4040 *
4041 * @par Notes
4042 * @parblock
4043 * This scheduler configuration option is an advanced configuration option.
4044 * Think twice before you use it.
4045 *
4046 * This scheduler algorithm is only available when RTEMS is built with SMP
4047 * support enabled.
4048 *
4049 * In case no explicit <a
4050 * href=https://docs.rtems.org/branches/master/c-user/config/scheduler-clustered.html>Clustered
4051 * Scheduler Configuration</a> is present, then it is used as the scheduler for
4052 * up to 32 processors.
4053 * @endparblock
4054 */
4055#define CONFIGURE_SCHEDULER_SIMPLE_SMP
4056
4057/**
4058 * @brief This configuration option is a boolean feature define.
4059 *
4060 * In case this configuration option is defined, then Strong APA algorithm is
4061 * made available to the application.
4062 *
4063 * @par Default Configuration
4064 * If this configuration option is undefined, then the described feature is not
4065 * enabled.
4066 *
4067 * @par Notes
4068 * @parblock
4069 * This scheduler configuration option is an advanced configuration option.
4070 * Think twice before you use it.
4071 *
4072 * This scheduler algorithm is only available when RTEMS is built with SMP
4073 * support enabled.
4074 *
4075 * This scheduler algorithm is not correctly implemented.  Do not use it.
4076 * @endparblock
4077 */
4078#define CONFIGURE_SCHEDULER_STRONG_APA
4079
4080/**
4081 * @brief This configuration option is a boolean feature define.
4082 *
4083 * In case this configuration option is defined, then the user shall provide a
4084 * scheduler algorithm to the application.
4085 *
4086 * @par Default Configuration
4087 * If this configuration option is undefined, then the described feature is not
4088 * enabled.
4089 *
4090 * @par Notes
4091 * @parblock
4092 * This scheduler configuration option is an advanced configuration option.
4093 * Think twice before you use it.
4094 *
4095 * RTEMS allows the application to provide its own task/thread scheduling
4096 * algorithm. In order to do this, one shall define
4097 * ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
4098 * scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
4099 * following additional macros shall be defined:
4100 *
4101 * * ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of the
4102 *   scheduler data structures of the user scheduler.
4103 *
4104 * * ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler
4105 *   table entry initializer for the user scheduler.
4106 *
4107 * * ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of
4108 *   the per-thread information of the user scheduler.
4109 *
4110 * At this time, the mechanics and requirements for writing a new scheduler are
4111 * evolving and not fully documented.  It is recommended that you look at the
4112 * existing Deterministic Priority Scheduler in
4113 * ``cpukit/score/src/schedulerpriority*.c`` for guidance.  For guidance on the
4114 * configuration macros, please examine ``cpukit/sapi/include/confdefs.h`` for
4115 * how these are defined for the Deterministic Priority Scheduler.
4116 * @endparblock
4117 */
4118#define CONFIGURE_SCHEDULER_USER
4119
4120/** @} */
4121
4122/**
4123 * @defgroup RTEMSApplConfigTaskStackAllocatorConfiguration \
4124 *   Task Stack Allocator Configuration
4125 *
4126 * @ingroup RTEMSApplConfig
4127 *
4128 * This section describes configuration options related to the task stack
4129 * allocator.  RTEMS allows the application or BSP to define its own allocation
4130 * and deallocation methods for task stacks. This can be used to place task
4131 * stacks in special areas of memory or to utilize a Memory Management Unit so
4132 * that stack overflows are detected in hardware.
4133 *
4134 * @{
4135 */
4136
4137/**
4138 * @brief This configuration option is an initializer define.
4139 *
4140 * The value of this configuration option initializes the stack allocator
4141 * allocate handler.
4142 *
4143 * @par Default Value
4144 * The default value is ``_Workspace_Allocate``, which indicates that task
4145 * stacks will be allocated from the RTEMS Workspace.
4146 *
4147 * @par Value Constraints
4148 * The value of this configuration option shall be defined to a valid function
4149 * pointer of the type ``void *( *allocate )( size_t )``.
4150 *
4151 * @par Notes
4152 * @parblock
4153 * A correctly configured system shall configure the following to be
4154 * consistent:
4155 *
4156 * * #CONFIGURE_TASK_STACK_ALLOCATOR_INIT
4157 *
4158 * * ``CONFIGURE_TASK_STACK_ALLOCATOR``
4159 *
4160 * * #CONFIGURE_TASK_STACK_DEALLOCATOR
4161 * @endparblock
4162 */
4163#define CONFIGURE_TASK_STACK_ALLOCATOR
4164
4165/**
4166 * @brief This configuration option is a boolean feature define.
4167 *
4168 * In case this configuration option is defined, then the system is informed
4169 * that the task stack allocator does not use the RTEMS Workspace.
4170 *
4171 * @par Default Configuration
4172 * If this configuration option is undefined, then the described feature is not
4173 * enabled.
4174 *
4175 * @par Notes
4176 * This configuration option may be used if a custom task stack allocator is
4177 * configured, see #CONFIGURE_TASK_STACK_ALLOCATOR.
4178 */
4179#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
4180
4181/**
4182 * @brief This configuration option is an initializer define.
4183 *
4184 * The value of this configuration option initializes the stack allocator
4185 * initialization handler.
4186 *
4187 * @par Default Value
4188 * The default value is <a
4189 * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>.
4190 *
4191 * @par Value Constraints
4192 * The value of this configuration option shall be defined to a valid function
4193 * pointer of the type ``void ( *initialize )( size_t )`` or to <a
4194 * href="https://en.cppreference.com/w/c/types/NULL">NULL</a>.
4195 *
4196 * @par Notes
4197 * @parblock
4198 * A correctly configured system shall configure the following to be
4199 * consistent:
4200 *
4201 * * ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
4202 *
4203 * * #CONFIGURE_TASK_STACK_ALLOCATOR
4204 *
4205 * * #CONFIGURE_TASK_STACK_DEALLOCATOR
4206 * @endparblock
4207 */
4208#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT
4209
4210/**
4211 * @brief This configuration option is an initializer define.
4212 *
4213 * The value of this configuration option initializes the stack allocator
4214 * deallocate handler.
4215 *
4216 * @par Default Value
4217 * The default value is ``_Workspace_Free``, which indicates that task stacks
4218 * will be allocated from the RTEMS Workspace.
4219 *
4220 * @par Value Constraints
4221 * The value of this configuration option shall be defined to a valid function
4222 * pointer of the type ``void ( *deallocate )( void * )``.
4223 *
4224 * @par Notes
4225 * @parblock
4226 * A correctly configured system shall configure the following to be
4227 * consistent:
4228 *
4229 * * #CONFIGURE_TASK_STACK_ALLOCATOR_INIT
4230 *
4231 * * #CONFIGURE_TASK_STACK_ALLOCATOR
4232 *
4233 * * ``CONFIGURE_TASK_STACK_DEALLOCATOR``
4234 * @endparblock
4235 */
4236#define CONFIGURE_TASK_STACK_DEALLOCATOR
4237
4238/**
4239 * @brief This configuration option is an initializer define.
4240 *
4241 * The value of this configuration option is used to calculate the task stack
4242 * space size.
4243 *
4244 * @par Default Value
4245 * The default value is a macro which supports the system heap allocator.
4246 *
4247 * @par Value Constraints
4248 * The value of this configuration option shall be defined to a macro which
4249 * accepts exactly one parameter and returns an unsigned integer.  The
4250 * parameter will be an allocation size and the macro shall return this size
4251 * plus the overhead of the allocator to manage an allocation request for this
4252 * size.
4253 *
4254 * @par Notes
4255 * This configuration option may be used if a custom task stack allocator is
4256 * configured, see #CONFIGURE_TASK_STACK_ALLOCATOR.
4257 */
4258#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR
4259
4260/** @} */
Note: See TracBrowser for help on using the repository browser.