summaryrefslogtreecommitdiffstats
path: root/doc/user/conf.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--doc/user/conf.t5421
1 files changed, 0 insertions, 5421 deletions
diff --git a/doc/user/conf.t b/doc/user/conf.t
deleted file mode 100644
index 560b221464..0000000000
--- a/doc/user/conf.t
+++ /dev/null
@@ -1,5421 +0,0 @@
-@c COPYRIGHT (c) 1988-2015.
-@c On-Line Applications Research Corporation (OAR).
-@c All rights reserved.
-
-@c TODO:
-@c + Ensure all macros are documented.
-@c + Verify which structures may actually be defined by a user
-@c + Add Go configuration.
-
-@c Questions:
-@c + Should there be examples of defining your own
-@c Device Driver Table, Init task table, etc.?
-@c
-
-@chapter Configuring a System
-
-@c
-@c === Introduction ===
-@c
-@section Introduction
-
-RTEMS must be configured for an application. This configuration
-encompasses a variety of information including the length of each clock
-tick, the maximum number of each information RTEMS object that can
-be created, the application initialization tasks, the task scheduling
-algorithm to be used, and the device drivers in the application.
-
-Although this information is contained in data structures that are used
-by RTEMS at system initialization time, the data structures themselves
-should only rarely to be generated by hand. RTEMS provides a set of
-macros system which provides a simple standard mechanism to automate
-the generation of these structures.
-
-@ifset is-Ada
-System configuration is ALWAYS done from C. When developing
-an Ada application, the user is responsible for creating at
-least one C file which contains the Ada run-time initialization
-and the RTEMS System Configuration. There is no Ada binding
-for RTEMS System Configuration information. Thus all examples
-and data structures shown in this chapter are in C.
-@end ifset
-
-@cindex confdefs.h
-@findex confdefs.h
-@cindex <rtems/confdefs.h>
-@findex <rtems/confdefs.h>
-
-The RTEMS header file @code{<rtems/confdefs.h>} is at the core of the
-automatic generation of system configuration. It is based on the idea
-of setting macros which define configuration parameters of interest to
-the application and defaulting or calculating all others. This variety
-of macros can automatically produce all of the configuration data
-required for an RTEMS application.
-
-Trivia: @code{confdefs} is shorthand for a @b{Configuration Defaults}.
-
-As a general rule, application developers only specify values
-for the configuration parameters of interest to them. They define what
-resources or features they require. In most cases, when a parameter is
-not specified, it defaults to zero (0) instances, a standards compliant
-value, or disabled as appropriate. For example, by default there will be
-256 task priority levels but this can be lowered by the application. This
-number of priority levels is required to be compliant with the RTEID/ORKID
-standards upon which the Classic API is based. There are similar cases
-where the default is selected to be compliant with with the POSIX standard.
-
-For each configuration parameter in the configuration tables, the macro
-corresponding to that field is discussed. The RTEMS Maintainers
-expect that all systems can be easily configured using the
-@code{<rtems/confdefs.h>} mechanism and that using this mechanism will
-avoid internal RTEMS configuration changes impacting applications.
-
-@c
-@c === Philosophy ===
-@c
-@section Default Value Selection Philosophy
-
-The user should be aware that the defaults are intentionally set as
-low as possible. By default, no application resources are configured.
-The @code{<rtems/confdefs.h>} file ensures that at least one application
-task or thread is configured and that at least one of the initialization
-task/thread tables is configured.
-
-@c
-@c === Sizing the RTEMS Workspace ===
-@c
-@section Sizing the RTEMS Workspace
-
-The RTEMS Workspace is a user-specified block of memory reserved for
-use by RTEMS. The application should NOT modify this memory. This area
-consists primarily of the RTEMS data structures whose exact size depends
-upon the values specified in the Configuration Table. In addition,
-task stacks and floating point context areas are dynamically allocated
-from the RTEMS Workspace.
-
-The @code{<rtems/confdefs.h>} mechanism calculates the size of the RTEMS
-Workspace automatically. It assumes that all tasks are floating point and
-that all will be allocated the minimum stack space. This calculation
-includes the amount of memory that will be allocated for internal use
-by RTEMS. The automatic calculation may underestimate the workspace
-size truly needed by the application, in which case one can use the
-@code{CONFIGURE_MEMORY_OVERHEAD} macro to add a value to the estimate. See
-@ref{Configuring a System Specify Memory Overhead} for more details.
-
-The memory area for the RTEMS Workspace is determined by the BSP. In case the
-RTEMS Workspace is too large for the available memory, then a fatal run-time
-error occurs and the system terminates.
-
-The file @code{<rtems/confdefs.h>} will calculate the value of the
-@code{work_space_size} parameter of the Configuration Table. There
-are many parameters the application developer can specify to
-help @code{<rtems/confdefs.h>} in its calculations. Correctly
-specifying the application requirements via parameters such as
-@code{CONFIGURE_EXTRA_TASK_STACKS} and @code{CONFIGURE_MAXIMUM_TASKS}
-is critical for production software.
-
-For each class of objects, the allocation can operate in one of two ways.
-The default way has an ceiling on the maximum number of object instances
-which can concurrently exist in the system. Memory for all instances of
-that object class is reserved at system initialization. The second
-way allocates memory for an initial number of objects and increases the
-current allocation by a fixed increment when required. Both ways allocate
-space from inside the RTEMS Workspace.
-
-See @ref{Configuring a System Unlimited Objects} for more details about
-the second way, which allows for dynamic allocation of objects and
-therefore does not provide determinism. This mode is useful mostly for
-when the number of objects cannot be determined ahead of time or when
-porting software for which you do not know the object requirements.
-
-The space needed for stacks and for RTEMS objects will vary from
-one version of RTEMS and from one target processor to another.
-Therefore it is safest to use @code{<rtems/confdefs.h>} and specify
-your application's requirements in terms of the numbers of objects and
-multiples of @code{RTEMS_MINIMUM_STACK_SIZE}, as far as is possible. The
-automatic estimates of space required will in general change when:
-
-@itemize @bullet
-@item a configuration parameter is changed,
-@item task or interrupt stack sizes change,
-@item the floating point attribute of a task changes,
-@item task floating point attribute is altered,
-@item RTEMS is upgraded, or
-@item the target processor is changed.
-@end itemize
-
-Failure to provide enough space in the RTEMS Workspace may result in fatal
-run-time errors terminating the system.
-
-@c
-@c === Potential Issues ===
-@c
-@section Potential Issues with RTEMS Workspace Size Estimation
-
-The @code{<rtems/confdefs.h>} file estimates the amount of memory
-required for the RTEMS Workspace. This estimate is only as accurate
-as the information given to @code{<rtems/confdefs.h>} and may be either
-too high or too low for a variety of reasons. Some of the reasons that
-@code{<rtems/confdefs.h>} may reserve too much memory for RTEMS are:
-
-@itemize @bullet
-@item All tasks/threads are assumed to be floating point.
-@end itemize
-
-Conversely, there are many more reasons that the resource estimate could be
-too low:
-
-@itemize @bullet
-@item Task/thread stacks greater than minimum size must be
-accounted for explicitly by developer.
-
-@item Memory for messages is not included.
-
-@item Device driver requirements are not included.
-
-@item Network stack requirements are not included.
-
-@item Requirements for add-on libraries are not included.
-@end itemize
-
-In general, @code{<rtems/confdefs.h>} is very accurate when given enough
-information. However, it is quite easy to use a library and forget to
-account for its resources.
-
-@c
-@c === Format to be followed for making changes in this file ===
-@c
-@section Format to be followed for making changes in this file
-
-@itemize @bullet
-@item MACRO NAME
-Should be alphanumeric. Can have '_' (underscore).
-
-@item DATA TYPE
-Please refer to all existing formats.
-
-@item RANGE:
-The range depends on the Data Type of the macro.
-@itemize @minus
-@item If the data type is of type task priority, then its value should
-be an integer in the range of 1 to 255.
-
-@item If the data type is an integer, then it can have numbers, characters
-(in case the value is defined using another macro) and arithmetic operations
-(+, -, *, /).
-
-@item If the data type is a function pointer the first character
-should be an alphabet or an underscore. The rest of the string
-can be alphanumeric.
-
-@item If the data type is RTEMS Attributes or RTEMS Mode then
-the string should be alphanumeric.
-
-@item If the data type is RTEMS NAME then the value should be
-an integer>=0 or RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )
-@end itemize
-
-@item DEFAULT VALUE
-The default value should be in the following formats-
-Please note that the '.' (full stop) is necessary.
-
-@itemize @minus
-@item In case the value is not defined then:
- This is not defined by default.
-
-@item If we know the default value then:
- The default value is XXX.
-
-@item If the default value is BSP Specific then:
- This option is BSP specific.
-@end itemize
-
-@item DESCRIPTION
-The description of the macro. (No specific format)
-
-@item NOTES
-Any further notes. (No specific format)
-
-@end itemize
-
-@c
-@c === Configuration Example ===
-@c
-@section Configuration Example
-
-In the following example, the configuration information for a system
-with a single message queue, four (4) tasks, and a timeslice of
-fifty (50) milliseconds is as follows:
-
-@example
-@group
-#include <bsp.h>
-
-#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-#define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */
-#define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_MAXIMUM_TASKS 4
-#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-
-#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
-
-#define CONFIGURE_INIT
-#include <rtems/confdefs.h>
-@end group
-@end example
-
-In this example, only a few configuration parameters are specified. The
-impact of these are as follows:
-
-@itemize @bullet
-
-@item The example specified @code{CONFIGURE_RTEMS_INIT_TASK_TABLE}
-but did not specify any additional parameters. This results in a
-configuration of an application which will begin execution of a single
-initialization task named @code{Init} which is non-preemptible and at
-priority one (1).
-
-@item By specifying @code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER},
-this application is configured to have a clock tick device
-driver. Without a clock tick device driver, RTEMS has no way to know
-that time is passing and will be unable to support delays and wall
-time. Further configuration details about time are
-provided. Per @code{CONFIGURE_MICROSECONDS_PER_TICK} and
-@code{CONFIGURE_TICKS_PER_TIMESLICE}, the user specified they wanted a
-clock tick to occur each millisecond, and that the length of a timeslice
-would be fifty (50) milliseconds.
-
-@item By specifying @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER},
-the application will include a console device driver. Although the
-console device driver may support a combination of multiple serial
-ports and display and keyboard combinations, it is only required to
-provide a single device named @code{/dev/console}. This device will
-be used for Standard Input, Output and Error I/O Streams. Thus when
-@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is specified, implicitly
-three (3) file descriptors are reserved for the Standard I/O Streams and
-those file descriptors are associated with @code{/dev/console} during
-initialization. All console devices are expected to support the POSIX
-@i{termios} interface.
-
-@item The example above specifies via @code{CONFIGURE_MAXIMUM_TASKS}
-that the application requires a maximum of four (4)
-simultaneously existing Classic API tasks. Similarly, by specifying
-@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES}, there may be a maximum of only
-one (1) concurrently existent Classic API message queues.
-
-@item The most surprising configuration parameter in this example is the
-use of @code{CONFIGURE_MESSAGE_BUFFER_MEMORY}. Message buffer memory is
-allocated from the RTEMS Workspace and must be accounted for. In this
-example, the single message queue will have up to twenty (20) messages
-of type @code{struct USER_MESSAGE}.
-
-@item The @code{CONFIGURE_INIT} constant must be defined in order to
-make @code{<rtems/confdefs.h>} instantiate the configuration data
-structures. This can only be defined in one source file per
-application that includes @code{<rtems/confdefs.h>} or the symbol
-table will be instantiated multiple times and linking errors
-produced.
-
-@end itemize
-
-This example illustrates that parameters have default values. Among
-other things, the application implicitly used the following defaults:
-
-@itemize @bullet
-@item All unspecified types of communications and synchronization objects
-in the Classic and POSIX Threads API have maximums of zero (0).
-
-@item The filesystem will be the default filesystem which is the In-Memory File
-System (IMFS).
-
-@item The application will have the default number of priority levels.
-
-@item The minimum task stack size will be that recommended by RTEMS for
-the target architecture.
-@end itemize
-
-@c
-@c === Unlimited Objects ===
-@c
-@subsection Unlimited Objects
-
-In real-time embedded systems the RAM is normally a limited, critical
-resource and dynamic allocation is avoided as much as possible to
-ensure predictable, deterministic execution times. For such cases, see
-@ref{Configuring a System Sizing the RTEMS Workspace} for an overview
-of how to tune the size of the workspace. Frequently when users are
-porting software to RTEMS the precise resource requirements of the
-software is unknown. In these situations users do not need to control
-the size of the workspace very tightly because they just want to get
-the new software to run; later they can tune the workspace size as needed.
-
-The following API-independent object classes can be configured in
-unlimited mode:
-
-@itemize @bullet
-@item POSIX Keys
-@item POSIX Key Value Pairs
-@end itemize
-
-The following object classes in the Classic API can be configured in
-unlimited mode:
-
-@itemize @bullet
-@item Tasks
-@item Timers
-@item Semaphores
-@item Message Queues
-@item Periods
-@item Barriers
-@item Partitions
-@item Regions
-@item Ports
-@end itemize
-
-Additionally, the following object classes from the POSIX API can be
-configured in unlimited mode:
-
-@itemize @bullet
-@item Threads
-@item Mutexes
-@item Condition Variables
-@item Timers
-@item Message Queues
-@item Message Queue Descriptors
-@item Semaphores
-@item Barriers
-@item Read/Write Locks
-@item Spinlocks
-@end itemize
-
-The following object classes can @strong{not} be configured in unlimited mode:
-@itemize @bullet
-@item Drivers
-@item File Descriptors
-@item User Extensions
-@item POSIX Queued Signals
-@end itemize
-
-Due to the memory requirements of unlimited objects it is strongly recommended
-to use them only in combination with the unified work areas. See
-@ref{Configuring a System Separate or Unified Work Areas} for more information
-on unified work areas.
-
-The following example demonstrates how the two simple configuration defines for
-unlimited objects and unified works areas can replace many seperate
-configuration defines for supported object classes:
-@example
-#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-
-#define CONFIGURE_UNIFIED_WORK_AREAS
-#define CONFIGURE_UNLIMITED_OBJECTS
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_INIT
-
-#include <rtems/confdefs.h>
-@end example
-
-Users are cautioned that using unlimited objects is not recommended for
-production software unless the dynamic growth is absolutely required. It
-is generally considered a safer embedded systems programming practice to
-know the system limits rather than experience an out of memory error
-at an arbitrary and largely unpredictable time in the field.
-
-@c
-@c === Per Object Class Unlimited Object Instances ===
-@c
-@subsection Per Object Class Unlimited Object Instances
-
-@findex rtems_resource_unlimited
-When the number of objects is not known ahead of time, RTEMS provides an
-auto-extending mode that can be enabled individually for each object
-type by using the macro @code{rtems_resource_unlimited}. This takes a value
-as a parameter, and is used to set the object maximum number field in
-an API Configuration table. The value is an allocation unit size. When
-RTEMS is required to grow the object table it is grown by this
-size. The kernel will return the object memory back to the RTEMS Workspace
-when an object is destroyed. The kernel will only return an allocated
-block of objects to the RTEMS Workspace if at least half the allocation
-size of free objects remain allocated. RTEMS always keeps one
-allocation block of objects allocated. Here is an example of using
-@code{rtems_resource_unlimited}:
-
-@example
-#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
-@end example
-
-@findex rtems_resource_is_unlimited
-@findex rtems_resource_maximum_per_allocation
-Object maximum specifications can be evaluated with the
-@code{rtems_resource_is_unlimited} and
-@code{rtems_resource_maximum_per_allocation} macros.
-
-@c
-@c === Unlimited Object Instances ===
-@c
-@subsection Unlimited Object Instances
-
-To ease the burden of developers who are porting new software RTEMS
-also provides the capability to make all object classes listed above
-operate in unlimited mode in a simple manner. The application developer
-is only responsible for enabling unlimited objects and specifying the
-allocation size.
-
-@c
-@c === CONFIGURE_UNLIMITED_OBJECTS ===
-@c
-@subsection Enable Unlimited Object Instances
-
-@findex CONFIGURE_UNLIMITED_OBJECTS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_UNLIMITED_OBJECTS}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_UNLIMITED_OBJECTS} enables @code{rtems_resource_unlimited}
-mode for Classic API and POSIX API objects that do not already have a
-specific maximum limit defined.
-
-@subheading NOTES:
-When using unlimited objects, it is common practice to also specify
-@code{CONFIGURE_UNIFIED_WORK_AREAS} so the system operates with a single
-pool of memory for both RTEMS and application memory allocations.
-
-@c
-@c === CONFIGURE_UNLIMITED_ALLOCATION_SIZE ===
-@c
-@subsection Specify Unlimited Objects Allocation Size
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_UNLIMITED_ALLOCATION_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-If not defined and @code{CONFIGURE_UNLIMITED_OBJECTS} is defined, the
-default value is eight (8).
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_UNLIMITED_ALLOCATION_SIZE} provides an
-allocation size to use for @code{rtems_resource_unlimited} when using
-@code{CONFIGURE_UNLIMITED_OBJECTS}.
-
-@subheading NOTES:
-By allowing users to declare all resources as being unlimited
-the user can avoid identifying and limiting the resources used.
-@code{CONFIGURE_UNLIMITED_OBJECTS} does not support varying the allocation
-sizes for different objects; users who want that much control can define
-the @code{rtems_resource_unlimited} macros themselves.
-
-@example
-#define CONFIGURE_UNLIMITED_OBJECTS
-#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
-@end example
-
-@c
-@c === Classic API Configuration ===
-@c
-@section Classic API Configuration
-
-This section defines the Classic API related system configuration
-parameters supported by @code{<rtems/confdefs.h>}.
-
-@c
-@c === CONFIGURE_MAXIMUM_TASKS ===
-@c
-@subsection Specify Maximum Classic API Tasks
-
-@findex CONFIGURE_MAXIMUM_TASKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_TASKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_TASKS} is the maximum number of Classic API
-Tasks that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-The calculations for the required memory in the RTEMS Workspace
-for tasks assume that each task has a minimum stack size and
-has floating point support enabled. The configuration parameter
-@code{CONFIGURE_EXTRA_TASK_STACKS} is used to specify task stack
-requirements @b{ABOVE} the minimum size required. See
-@ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
-for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
-
-The maximum number of POSIX threads is specified by
-@code{CONFIGURE_MAXIMUM_POSIX_THREADS}.
-@c XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
-
-A future enhancement to @code{<rtems/confdefs.h>} could be to eliminate
-the assumption that all tasks have floating point enabled. This would
-require the addition of a new configuration parameter to specify the
-number of tasks which enable floating point support.
-
-@c
-@c === CONFIGURE_MAXIMUM_TIMERS ===
-@c
-@subsection Specify Maximum Classic API Timers
-
-@findex CONFIGURE_MAXIMUM_TIMERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_TIMERS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_TIMERS} is the maximum number of Classic API
-Timers that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_SEMAPHORES ===
-@c
-@subsection Specify Maximum Classic API Semaphores
-
-@findex CONFIGURE_MAXIMUM_SEMAPHORES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_SEMAPHORES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_SEMAPHORES} is the maximum number of Classic
-API Semaphores that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_MRSP_SEMAPHORES ===
-@c
-@subsection Specify Maximum Classic API Semaphores usable with MrsP
-
-@findex CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_MRSP_SEMAPHORES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_MRSP_SEMAPHORES} is the
-maximum number of Classic API Semaphores using the Multiprocessor Resource
-Sharing Protocol (MrsP) that can be concurrently active.
-
-@subheading NOTES:
-This configuration option is only used on SMP configurations. On uni-processor
-configurations the Priority Ceiling Protocol is used for MrsP semaphores and
-thus no extra memory is necessary.
-
-@c
-@c === CONFIGURE_MAXIMUM_MESSAGE_QUEUES ===
-@c
-@subsection Specify Maximum Classic API Message Queues
-
-@findex CONFIGURE_MAXIMUM_MESSAGE_QUEUES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES} is the maximum number of Classic
-API Message Queues that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_BARRIERS ===
-@c
-@subsection Specify Maximum Classic API Barriers
-
-@findex CONFIGURE_MAXIMUM_BARRIERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_BARRIERS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_BARRIERS} is the maximum number of Classic
-API Barriers that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_PERIODS ===
-@c
-@subsection Specify Maximum Classic API Periods
-
-@findex CONFIGURE_MAXIMUM_PERIODS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_PERIODS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_PERIODS} is the maximum number of Classic
-API Periods that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_PARTITIONS ===
-@c
-@subsection Specify Maximum Classic API Partitions
-
-@findex CONFIGURE_MAXIMUM_PARTITIONS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_PARTITIONS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_PARTITIONS} is the maximum number of Classic
-API Partitions that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_REGIONS ===
-@c
-@subsection Specify Maximum Classic API Regions
-
-@findex CONFIGURE_MAXIMUM_REGIONS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_REGIONS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_REGIONS} is the maximum number of Classic
-API Regions that can be concurrently active.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MAXIMUM_PORTS ===
-@c
-@subsection Specify Maximum Classic API Ports
-
-@findex CONFIGURE_MAXIMUM_PORTS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_PORTS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_PORTS} is the maximum number of Classic
-API Ports that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_USER_EXTENSIONS ===
-@c
-@subsection Specify Maximum Classic API User Extensions
-
-@findex CONFIGURE_MAXIMUM_USER_EXTENSIONS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_USER_EXTENSIONS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_USER_EXTENSIONS} is the maximum number of Classic
-API User Extensions that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === Classic API Initialization Task Configuration ===
-@c
-@section Classic API Initialization Tasks Table Configuration
-
-The @code{<rtems/confdefs.h>} configuration system can automatically
-generate an Initialization Tasks Table named
-@code{Initialization_tasks} with a single entry. The following
-parameters control the generation of that table.
-
-@c
-@c === CONFIGURE_RTEMS_INIT_TASKS_TABLE ===
-@c
-@subsection Instantiate Classic API Initialization Task Table
-
-@findex CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_RTEMS_INIT_TASKS_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_RTEMS_INIT_TASKS_TABLE} is defined if the user wishes
-to use a Classic RTEMS API Initialization Task Table. The table built by
-@code{<rtems/confdefs.h>} specifies the parameters for a single task. This
-is sufficient for applications which initialization the system from a
-single task.
-
-By default, this field is not defined as the user MUST select their own
-API for initialization tasks.
-
-@subheading NOTES:
-The application may choose to use the initialization tasks or threads
-table from another API.
-
-A compile time error will be generated if the user does not configure
-any initialization tasks or threads.
-
-@c
-@c === CONFIGURE_INIT_TASK_ENTRY_POINT ===
-@c
-@subsection Specifying Classic API Initialization Task Entry Point
-
-@findex CONFIGURE_INIT_TASK_ENTRY_POINT
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_ENTRY_POINT}
-
-@item DATA TYPE:
-Task entry function pointer (@code{rtems_task_entry}).
-
-@item RANGE:
-Valid task entry function pointer.
-
-@item DEFAULT VALUE:
-The default value is @code{Init}.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_ENTRY_POINT} is the entry point (a.k.a. function
-name) of the single initialization task defined by the Classic API
-Initialization Tasks Table.
-
-@subheading NOTES:
-The user must implement the function @code{Init} or the function name provided
-in this configuration parameter.
-
-@c
-@c === CONFIGURE_INIT_TASK_NAME ===
-@c
-@subsection Specifying Classic API Initialization Task Name
-
-@findex CONFIGURE_INIT_TASK_NAME
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_NAME}
-
-@item DATA TYPE:
-RTEMS Name (@code{rtems_name}).
-
-@item RANGE:
-Any value.
-
-@item DEFAULT VALUE:
-The default value is @code{rtems_build_name( 'U', 'I', '1', ' ' )}.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_NAME} is the name of the single initialization
-task defined by the Classic API Initialization Tasks Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_INIT_TASK_STACK_SIZE ===
-@c
-@subsection Specifying Classic API Initialization Task Stack Size
-
-@findex CONFIGURE_INIT_TASK_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_STACK_SIZE} is the stack size of the single
-initialization task defined by the Classic API Initialization Tasks Table.
-
-@subheading NOTES:
-If the stack size specified is greater than the configured minimum,
-it must be accounted for in @code{CONFIGURE_EXTRA_TASK_STACKS}.
-See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
-for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
-
-@c
-@c === CONFIGURE_INIT_TASK_PRIORITY ===
-@c
-@subsection Specifying Classic API Initialization Task Priority
-
-@findex CONFIGURE_INIT_TASK_PRIORITY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_PRIORITY}
-
-@item DATA TYPE:
-RTEMS Task Priority (@code{rtems_task_priority}).
-
-@item RANGE:
-One (1) to CONFIGURE_MAXIMUM_PRIORITY.
-
-@item DEFAULT VALUE:
-The default value is 1, which is the highest priority in the
-Classic API.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_PRIORITY} is the initial priority of the single
-initialization task defined by the Classic API Initialization Tasks Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_INIT_TASK_ATTRIBUTES ===
-@c
-@subsection Specifying Classic API Initialization Task Attributes
-
-@findex CONFIGURE_INIT_TASK_ATTRIBUTES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_ATTRIBUTES}
-
-
-@item DATA TYPE:
-RTEMS Attributes (@code{rtems_attribute}).
-
-@item RANGE:
-Valid task attribute sets.
-
-@item DEFAULT VALUE:
-The default value is @code{RTEMS_DEFAULT_ATTRIBUTES}.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_ATTRIBUTES} is the task attributes of the single
-initialization task defined by the Classic API Initialization Tasks Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_INIT_TASK_INITIAL_MODES ===
-@c
-@subsection Specifying Classic API Initialization Task Modes
-
-@findex CONFIGURE_INIT_TASK_INITIAL_MODES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_INITIAL_MODES}
-
-@item DATA TYPE:
-RTEMS Mode (@code{rtems_mode}).
-
-@item RANGE:
-Valid task mode sets.
-
-@item DEFAULT VALUE:
-The default value is @code{RTEMS_NO_PREEMPT}.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_INITIAL_MODES} is the initial execution mode of
-the single initialization task defined by the Classic API Initialization
-Tasks Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_INIT_TASK_ARGUMENTS ===
-@c
-@subsection Specifying Classic API Initialization Task Arguments
-
-@findex CONFIGURE_INIT_TASK_ARGUMENTS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INIT_TASK_ARGUMENTS}
-
-@item DATA TYPE:
-RTEMS Task Argument (@code{rtems_task_argument}).
-
-@item RANGE:
-Complete range of the type.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INIT_TASK_ARGUMENTS} is the task argument of the single
-initialization task defined by the Classic API Initialization Tasks Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_HAS_OWN_INIT_TASK_TABLE ===
-@c
-@subsection Not Using Generated Initialization Tasks Table
-
-@findex CONFIGURE_HAS_OWN_INIT_TASK_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_INIT_TASK_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_HAS_OWN_INIT_TASK_TABLE} is defined if the user wishes
-to define their own Classic API Initialization Tasks Table. This table
-should be named @code{Initialization_tasks}.
-
-@subheading NOTES:
-This is a seldom used configuration parameter. The most likely use case
-is when an application desires to have more than one initialization task.
-
-@c
-@c === POSIX API Configuration ===
-@c
-@section POSIX API Configuration
-
-The parameters in this section are used to configure resources
-for the RTEMS POSIX API. They are only relevant if the POSIX API
-is enabled at configure time using the @code{--enable-posix} option.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_THREADS ===
-@c
-@subsection Specify Maximum POSIX API Threads
-
-@findex CONFIGURE_MAXIMUM_POSIX_THREADS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_THREADS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_THREADS} is the maximum number of POSIX API
-Threads that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-This calculations for the required memory in the RTEMS Workspace
-for threads assume that each thread has a minimum stack size and
-has floating point support enabled. The configuration parameter
-@code{CONFIGURE_EXTRA_TASK_STACKS} is used to specify thread stack
-requirements @b{ABOVE} the minimum size required.
-See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
-for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
-
-The maximum number of Classic API Tasks is specified by
-@code{CONFIGURE_MAXIMUM_TASKS}.
-
-All POSIX threads have floating point enabled.
-
-@c XXX - Add xref to CONFIGURE_MAXIMUM_TASKS.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_MUTEXES ===
-@c
-@subsection Specify Maximum POSIX API Mutexes
-
-@findex CONFIGURE_MAXIMUM_POSIX_MUTEXES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_MUTEXES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_MUTEXES} is the maximum number of POSIX
-API Mutexes that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ===
-@c
-@subsection Specify Maximum POSIX API Condition Variables
-
-@findex CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES} is the maximum number
-of POSIX API Condition Variables that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_KEYS ===
-@c
-@subsection Specify Maximum POSIX API Keys
-
-@findex CONFIGURE_MAXIMUM_POSIX_KEYS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_KEYS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_KEYS} is the maximum number of POSIX
-API Keys that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c XXX - Key pairs
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_TIMERS ===
-@c
-@subsection Specify Maximum POSIX API Timers
-
-@findex CONFIGURE_MAXIMUM_POSIX_TIMERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_TIMERS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_TIMERS} is the maximum number of POSIX
-API Timers that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ===
-@c
-@subsection Specify Maximum POSIX API Queued Signals
-
-@findex CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS} is the maximum number of POSIX
-API Queued Signals that can be concurrently active.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ===
-@c
-@subsection Specify Maximum POSIX API Message Queues
-
-@findex CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES} is the maximum number of POSIX
-API Message Queues that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c XXX - memory for buffers note
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS ===
-@c
-@subsection Specify Maximum POSIX API Message Queue Descriptors
-
-@findex CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-greater than or equal to @code{CONFIGURE_MAXIMUM_POSIX_MESSAGES_QUEUES}
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS} is the maximum
-number of POSIX API Message Queue Descriptors that can be concurrently
-active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS} should be
-greater than or equal to @code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES}.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ===
-@c
-@subsection Specify Maximum POSIX API Semaphores
-
-@findex CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_SEMAPHORES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_SEMAPHORES} is the maximum number of POSIX
-API Semaphores that can be concurrently active.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_BARRIERS ===
-@c
-@subsection Specify Maximum POSIX API Barriers
-
-@findex CONFIGURE_MAXIMUM_POSIX_BARRIERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_BARRIERS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_BARRIERS} is the maximum number of POSIX
-API Barriers that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ===
-@c
-@subsection Specify Maximum POSIX API Spinlocks
-
-@findex CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_SPINLOCKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_SPINLOCKS} is the maximum number of POSIX
-API Spinlocks that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === CONFIGURE_MAXIMUM_POSIX_RWLOCKS ===
-@c
-@subsection Specify Maximum POSIX API Read/Write Locks
-
-@findex CONFIGURE_MAXIMUM_POSIX_RWLOCKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_POSIX_RWLOCKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_POSIX_RWLOCKS} is the maximum number of POSIX
-API Read/Write Locks that can be concurrently active.
-
-@subheading NOTES:
-This object class can be configured in unlimited allocation mode.
-
-@c
-@c === POSIX Initialization Threads Table Configuration ===
-@c
-@section POSIX Initialization Threads Table Configuration
-
-The @code{<rtems/confdefs.h>} configuration system can automatically
-generate a POSIX Initialization Threads Table named
-@code{POSIX_Initialization_threads} with a single entry. The following
-parameters control the generation of that table.
-
-@c
-@c === CONFIGURE_POSIX_INIT_THREAD_TABLE ===
-@c
-@subsection Instantiate POSIX API Initialization Thread Table
-
-@findex CONFIGURE_POSIX_INIT_THREAD_TABLE
-
-@table @b
-@item CONSTANT:
-@findex CONFIGURE_POSIX_INIT_THREAD_TABLE
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This field is not defined by default, as the user MUST select their own
-API for initialization tasks.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_POSIX_INIT_THREAD_TABLE} is defined if the user wishes
-to use a POSIX API Initialization Threads Table. The table built
-by @code{<rtems/confdefs.h>} specifies the parameters for a single
-thread. This is sufficient for applications which initialization the
-system from a
-single task.
-
-By default, this field is not defined as the user MUST select their own
-API for initialization tasks.
-
-@subheading NOTES:
-The application may choose to use the initialization tasks or threads
-table from another API.
-
-A compile time error will be generated if the user does not configure
-any initialization tasks or threads.
-
-@c
-@c === CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT ===
-@c
-@subsection Specifying POSIX API Initialization Thread Entry Point
-
-@findex CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT}
-
-@item DATA TYPE:
-POSIX thread function pointer (@code{void *(*entry_point)(void *)}).
-
-@item RANGE:
-Undefined or a valid POSIX thread function pointer.
-
-@item DEFAULT VALUE:
-The default value is @code{POSIX_Init}.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT} is the entry point
-(a.k.a. function name) of the single initialization thread defined by
-the POSIX API Initialization Threads Table.
-
-@subheading NOTES:
-The user must implement the function @code{POSIX_Init} or the function name
-provided in this configuration parameter.
-
-@c
-@c === CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE ===
-@c
-@subsection Specifying POSIX API Initialization Thread Stack Size
-
-@findex CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 2 * RTEMS_MINIMUM_STACK_SIZE.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE} is the stack size of the
-single initialization thread defined by the POSIX API Initialization
-Threads Table.
-
-@subheading NOTES:
-If the stack size specified is greater than the configured minimum,
-it must be accounted for in @code{CONFIGURE_EXTRA_TASK_STACKS}.
-See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
-for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
-
-@c
-@c === CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE ===
-@c
-@subsection Not Using Generated POSIX Initialization Threads Table
-
-@findex CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE} is defined if the
-user wishes to define their own POSIX API Initialization Threads Table.
-This table should be named @code{POSIX_Initialization_threads}.
-
-@subheading NOTES:
-This is a seldom used configuration parameter. The most likely use case
-is when an application desires to have more than one initialization task.
-
-@c
-@c === Basic System Information ===
-@c
-@section Basic System Information
-
-This section defines the general system configuration parameters supported by
-@code{<rtems/confdefs.h>}.
-
-@c
-@c === CONFIGURE_UNIFIED_WORK_AREAS ===
-@c
-@subsection Separate or Unified Work Areas
-
-@findex CONFIGURE_UNIFIED_WORK_AREAS
-@cindex unified work areas
-@cindex separate work areas
-@cindex RTEMS Workspace
-@cindex C Program Heap
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_UNIFIED_WORK_AREAS}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, which specifies that the C Program Heap
-and the RTEMS Workspace will be separate.
-
-@end table
-
-@subheading DESCRIPTION:
-When defined, the C Program Heap and the RTEMS Workspace will be one pool
-of memory.
-
-When not defined, there will be separate memory pools for the RTEMS
-Workspace and C Program Heap.
-
-@subheading NOTES:
-Having separate pools does have some advantages in the event a task blows
-a stack or writes outside its memory area. However, in low memory systems
-the overhead of the two pools plus the potential for unused memory in
-either pool is very undesirable.
-
-In high memory environments, this is desirable when you want to use the
-RTEMS "unlimited" objects option. You will be able to create objects
-until you run out of all available memory rather then just until you
-run out of RTEMS Workspace.
-
-@c
-@c === CONFIGURE_MICROSECONDS_PER_TICK ===
-@c
-@subsection Length of Each Clock Tick
-
-@findex CONFIGURE_MICROSECONDS_PER_TICK
-@cindex tick quantum
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MICROSECONDS_PER_TICK}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-This is not defined by default. When not defined,
-the clock tick quantum is configured to be 10,000
-microseconds which is ten (10) milliseconds.
-
-@end table
-
-@subheading DESCRIPTION:
-This constant is used to specify the length of time between clock ticks.
-
-When the clock tick quantum value is too low, the system will spend so
-much time processing clock ticks that it does not have processing time
-available to perform application work. In this case, the system will
-become unresponsive.
-
-The lowest practical time quantum varies widely based upon the speed
-of the target hardware and the architectural overhead associated with
-interrupts. In general terms, you do not want to configure it lower than
-is needed for the application.
-
-The clock tick quantum should be selected such that it all blocking and
-delay times in the application are evenly divisible by it. Otherwise,
-rounding errors will be introduced which may negatively impact the
-application.
-
-@subheading NOTES:
-This configuration parameter has no impact if the Clock Tick Device
-driver is not configured.
-
-There may be BSP specific limits on the resolution or maximum value of
-a clock tick quantum.
-
-@c
-@c === CONFIGURE_TICKS_PER_TIMESLICE ===
-@c
-@subsection Specifying Timeslicing Quantum
-
-@findex CONFIGURE_TICKS_PER_TIMESLICE
-@cindex ticks per timeslice
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_TICKS_PER_TIMESLICE}
-
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 50.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter specifies the length of the timeslice
-quantum in ticks for each task.
-
-@subheading NOTES:
-This configuration parameter has no impact if the Clock Tick Device
-driver is not configured.
-
-@c
-@c === CONFIGURE_MAXIMUM_PRIORITY ===
-@c
-@subsection Specifying the Number of Thread Priority Levels
-
-@findex CONFIGURE_MAXIMUM_PRIORITY
-@cindex maximum priority
-@cindex number of priority levels
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_PRIORITY}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint8_t}).
-
-@item RANGE:
-Valid values for this configuration parameter must be one (1) less than
-than a power of two (2) between 4 and 256 inclusively. In other words,
-valid values are 3, 7, 31, 63, 127, and 255.
-
-@item DEFAULT VALUE:
-The default value is 255, because RTEMS must support 256 priority levels to be
-compliant with various standards. These priorities range from zero (0) to 255.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter specified the maximum numeric priority
-of any task in the system and one less that the number of priority levels
-in the system.
-
-Reducing the number of priorities in the system reduces the amount of
-memory allocated from the RTEMS Workspace.
-
-@subheading NOTES:
-The numerically greatest priority is the logically lowest priority in
-the system and will thus be used by the IDLE task.
-
-Priority zero (0) is reserved for internal use by RTEMS and is not
-available to applications.
-
-With some schedulers, reducing the number of priorities can reduce the
-amount of memory used by the scheduler. For example, the Deterministic
-Priority Scheduler (DPS) used by default uses three pointers of storage
-per priority level. Reducing the number of priorities from 256 levels
-to sixteen (16) can reduce memory usage by about three (3) kilobytes.
-
-@c
-@c === CONFIGURE_MINIMUM_TASK_STACK_SIZE ===
-@c
-@subsection Specifying the Minimum Task Size
-
-@findex CONFIGURE_MINIMUM_TASK_STACK_SIZE
-@cindex minimum task stack size
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MINIMUM_TASK_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-This is not defined by default, which sets the executive to the recommended
-minimum stack size for this processor.
-
-@end table
-
-@subheading DESCRIPTION:
-The configuration parameter is set to the number of bytes the application
-wants the minimum stack size to be for every task or thread in the system.
-
-Adjusting this parameter should be done with caution. Examining the actual
-usage using the Stack Checker Usage Reporting facility is recommended.
-
-@subheading NOTES:
-This parameter can be used to lower the minimum from that
-recommended. This can be used in low memory systems to reduce memory
-consumption for stacks. However, this must be done with caution as it
-could increase the possibility of a blown task stack.
-
-This parameter can be used to increase the minimum from that
-recommended. This can be used in higher memory systems to reduce the
-risk of stack overflow without performing analysis on actual consumption.
-
-@c
-@c === CONFIGURE_INTERRUPT_STACK_SIZE ===
-@c
-@subsection Configuring the Size of the Interrupt Stack
-
-@findex CONFIGURE_INTERRUPT_STACK_SIZE
-@cindex interrupt stack size
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INTERRUPT_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is CONFIGURE_MINIMUM_TASK_STACK_SIZE, which is the minimum
-interrupt stack size.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_INTERRUPT_STACK_SIZE} is set to the size of the
-interrupt stack. The interrupt stack size is often set by the BSP but
-since this memory may be allocated from the RTEMS Workspace, it must be
-accounted for.
-
-@subheading NOTES:
-In some BSPs, changing this constant does NOT change the
-size of the interrupt stack, only the amount of memory
-reserved for it.
-
-Patches which result in this constant only being used in memory
-calculations when the interrupt stack is intended to be allocated
-from the RTEMS Workspace would be welcomed by the RTEMS Project.
-
-@c
-@c === CONFIGURE_EXTRA_TASK_STACKS ===
-@c
-@subsection Reserve Task/Thread Stack Memory Above Minimum
-
-@findex CONFIGURE_EXTRA_TASK_STACKS
-@cindex memory for task tasks
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_EXTRA_TASK_STACKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is set to the number of bytes the
-applications wishes to add to the task stack requirements calculated
-by @code{<rtems/confdefs.h>}.
-
-@subheading NOTES:
-This parameter is very important. If the application creates tasks with
-stacks larger then the minimum, then that memory is NOT accounted for
-by @code{<rtems/confdefs.h>}.
-
-@c
-@c === CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY ===
-@c
-@subsection Automatically Zeroing the RTEMS Workspace and C Program Heap
-
-@findex CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
-@cindex clear C Program Heap
-@cindex clear RTEMS Workspace
-@cindex zero C Program Heap
-@cindex zero RTEMS Workspace
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, unless overridden by the BSP.
-The default is @b{NOT} to zero out the RTEMS Workspace or C Program Heap.
-
-@end table
-
-@subheading DESCRIPTION:
-This macro indicates whether RTEMS should zero the RTEMS Workspace and
-C Program Heap as part of its initialization. If defined, the memory
-regions are zeroed. Otherwise, they are not.
-
-@subheading NOTES:
-Zeroing memory can add significantly to system boot time. It is not
-necessary for RTEMS but is often assumed by support libraries.
-
-@c
-@c === CONFIGURE_STACK_CHECKER_ENABLED ===
-@c
-@subsection Enable The Task Stack Usage Checker
-
-@findex CONFIGURE_STACK_CHECKER_ENABLED
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_STACK_CHECKER_ENABLED}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, and thus stack checking is disabled.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined when the application wishes to
-enable run-time stack bounds checking.
-
-
-@subheading NOTES:
-In 4.9 and older, this configuration parameter was named
-@code{STACK_CHECKER_ON}.
-
-This increases the time required to create tasks as well as adding
-overhead to each context switch.
-
-@c
-@c === CONFIGURE_INITIAL_EXTENSIONS ===
-@c
-@subsection Specify Application Specific User Extensions
-
-@findex CONFIGURE_INITIAL_EXTENSIONS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_INITIAL_EXTENSIONS}
-
-@item DATA TYPE:
-List of user extension initializers (@code{rtems_extensions_table}).
-
-@item RANGE:
-Undefined or a list of one or more user extensions.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{CONFIGURE_INITIAL_EXTENSIONS} is defined by the application,
-then this application specific set of initial extensions will be placed
-in the initial extension table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === Custom Stack Allocator ===
-@c
-@section Configuring Custom Task Stack Allocation
-
-RTEMS allows the application or BSP to define its own allocation and
-deallocation methods for task stacks. This can be used to place task
-stacks in special areas of memory or to utilize a Memory Management Unit
-so that stack overflows are detected in hardware.
-
-@c
-@c === CONFIGURE_TASK_STACK_ALLOCATOR_INIT ===
-@c
-@subsection Custom Task Stack Allocator Initialization
-
-@findex CONFIGURE_TASK_STACK_ALLOCATOR_INIT
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
-
-@item DATA TYPE:
-Function pointer.
-
-@item RANGE:
-Undefined, NULL or valid function pointer.
-
-@item DEFAULT VALUE:
-The default value is NULL, which indicates that
-task stacks will be allocated from the RTEMS Workspace.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT} configures the initialization
-method for an application or BSP specific task stack allocation
-implementation.
-
-@subheading NOTES:
-A correctly configured system must configure the following to be consistent:
-
-@itemize @bullet
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
-@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
-@end itemize
-
-@c
-@c === CONFIGURE_TASK_STACK_ALLOCATOR ===
-@c
-@subsection Custom Task Stack Allocator
-
-@findex CONFIGURE_TASK_STACK_ALLOCATOR
-
-@cindex task stack allocator
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_TASK_STACK_ALLOCATOR}
-
-@item DATA TYPE:
-Function pointer.
-
-@item RANGE:
-Undefined or valid function pointer.
-
-@item DEFAULT VALUE:
-The default value is @code{_Workspace_Allocate}, which indicates
-that task stacks will be allocated from the RTEMS Workspace.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_TASK_STACK_ALLOCATOR} may point to a user provided
-routine to allocate task stacks.
-
-@subheading NOTES:
-A correctly configured system must configure the following to be consistent:
-
-@itemize @bullet
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
-@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
-@end itemize
-
-@c
-@c === CONFIGURE_TASK_STACK_DEALLOCATOR ===
-@c
-@subsection Custom Task Stack Deallocator
-
-@findex CONFIGURE_TASK_STACK_DEALLOCATOR
-@cindex task stack deallocator
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_TASK_STACK_DEALLOCATOR}
-
-@item DATA TYPE:
-Function pointer.
-
-@item RANGE:
-Undefined or valid function pointer.
-
-@item DEFAULT VALUE:
-The default value is @code{_Workspace_Free}, which indicates that
-task stacks will be allocated from the RTEMS Workspace.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_TASK_STACK_DEALLOCATOR} may point to a user provided
-routine to free task stacks.
-
-@subheading NOTES:
-A correctly configured system must configure the following to be consistent:
-
-@itemize @bullet
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
-@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
-@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
-@end itemize
-
-@c
-@c === Classic API Message Buffers ===
-@c
-@section Configuring Memory for Classic API Message Buffers
-
-This section describes the configuration parameters related to specifying
-the amount of memory reserved for Classic API Message Buffers.
-
-@c
-@c === CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE ===
-@c
-@subsection Calculate Memory for a Single Classic Message API Message Queue
-
-@findex CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
-@cindex memory for a single message queue's buffers
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is None.
-
-@end table
-
-@subheading DESCRIPTION:
-This is a helper macro which is used to assist in computing the total
-amount of memory required for message buffers. Each message queue will
-have its own configuration with maximum message size and maximum number
-of pending messages.
-
-The interface for this macro is as follows:
-
-@example
-CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
-@end example
-
-Where @code{max_messages} is the maximum number of pending messages
-and @code{size_per} is the size in bytes of the user message.
-
-@subheading NOTES:
-This macro is only used in support of @code{CONFIGURE_MESSAGE_BUFFER_MEMORY}.
-
-@c
-@c === CONFIGURE_MESSAGE_BUFFER_MEMORY ===
-@c
-@subsection Reserve Memory for All Classic Message API Message Queues
-
-@findex CONFIGURE_MESSAGE_BUFFER_MEMORY
-@cindex configure message queue buffer memory
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MESSAGE_BUFFER_MEMORY}
-
-@item DATA TYPE:
-integer summation macro
-
-@item RANGE:
-undefined (zero) or calculation resulting in a positive integer
-
-@item DEFAULT VALUE:
-This is not defined by default, and zero (0) memory is reserved.
-
-@end table
-
-@subheading DESCRIPTION:
-This macro is set to the number of bytes the application requires to be
-reserved for pending Classic API Message Queue buffers.
-
-@subheading NOTES:
-The following illustrates how the help macro
-@code{CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE} can be used to assist in
-calculating the message buffer memory required. In this example, there
-are two message queues used in this application. The first message
-queue has maximum of 24 pending messages with the message structure
-defined by the type @code{one_message_type}. The other message queue
-has maximum of 500 pending messages with the message structure defined
-by the type @code{other_message_type}.
-
-@example
-@group
-#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
- (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 24, sizeof(one_message_type) + \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 500, sizeof(other_message_type) \
- )
-@end group
-@end example
-
-@c
-@c === Seldom Used Configuration Parameters ===
-@c
-@section Seldom Used Configuration Parameters
-
-This section describes configuration parameters supported by
-@code{<rtems/confdefs.h>} which are seldom used by applications. These
-parameters tend to be oriented to debugging system configurations
-and providing work-arounds when the memory estimated by
-@code{<rtems/confdefs.h>} is incorrect.
-
-@c
-@c === CONFIGURE_MEMORY_OVERHEAD ===
-@c
-@subsection Specify Memory Overhead
-
-@findex CONFIGURE_MEMORY_OVERHEAD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MEMORY_OVERHEAD}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-Thie parameter is set to the number of kilobytes the application wishes
-to add to the requirements calculated by @code{<rtems/confdefs.h>}.
-
-@subheading NOTES:
-This configuration parameter should only be used when it is suspected that
-a bug in @code{<rtems/confdefs.h>} has resulted in an underestimation.
-Typically the memory allocation will be too low when an application does
-not account for all message queue buffers or task stacks.
-
-@c
-@c === CONFIGURE_HAS_OWN_CONFIGURATION_TABLE ===
-@c
-@subsection Do Not Generate Configuration Information
-
-@findex CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_CONFIGURATION_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter should only be defined if the application
-is providing their own complete set of configuration tables.
-
-@subheading NOTES:
-None.
-
-@c
-@c === C Library Support Configuration ===
-@c
-@section C Library Support Configuration
-
-This section defines the file system and IO library
-related configuration parameters supported by
-@code{<rtems/confdefs.h>}.
-
-@c
-@c === CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS ===
-@c
-@subsection Specify Maximum Number of File Descriptors
-
-@findex CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
-@cindex maximum file descriptors
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-
-If @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is defined, then the
-default value is 3, otherwise the default value is 0.
-
-Three file descriptors allows RTEMS to support standard input, output, and
-error I/O streams on @code{/dev/console}.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is set to the maximum number of file like objects
-that can be concurrently open.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_TERMIOS_DISABLED ===
-@c
-@subsection Disable POSIX Termios Support
-
-@findex CONFIGURE_TERMIOS_DISABLED
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_TERMIOS_DISABLED}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, and resources are reserved for the
-termios functionality.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined if the software implementing
-POSIX termios functionality is not going to be used by this application.
-
-@subheading NOTES:
-The termios support library should not be included in an application
-executable unless it is directly referenced by the application or a
-device driver.
-
-@c
-@c === CONFIGURE_NUMBER_OF_TERMIOS_PORTS ===
-@c
-@subsection Specify Maximum Termios Ports
-
-@findex CONFIGURE_NUMBER_OF_TERMIOS_PORTS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_NUMBER_OF_TERMIOS_PORTS}
-
-@item DATA TYPE:
-Unsigned integer.
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 1, so a console port can be used.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is set to the number of ports using the
-termios functionality. Each concurrently active termios port requires
-resources.
-
-@subheading NOTES:
-If the application will be using serial ports
-including, but not limited to, the Console Device
-(e.g. @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER}), then it is
-highly likely that this configuration parameter should NOT be is defined.
-
-@c
-@c === File System Configuration Parameters ===
-@c
-@section File System Configuration Parameters
-
-This section defines File System related configuration parameters.
-
-@c
-@c === CONFIGURE_HAS_OWN_MOUNT_TABLE ===
-@c
-@subsection Providing Application Specific Mount Table
-
-@findex CONFIGURE_HAS_OWN_MOUNT_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_MOUNT_TABLE}
-
-@item DATA TYPE:
-Undefined or an array of type @code{rtems_filesystem_mount_table_t}.
-
-@item RANGE:
-Undefined or an array of type @code{rtems_filesystem_mount_table_t}.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined when the application
-provides their own filesystem mount table. The mount table is an
-array of @code{rtems_filesystem_mount_table_t} entries pointed
-to by the global variable @code{rtems_filesystem_mount_table}.
-The number of entries in this table is in an integer variable named
-@code{rtems_filesystem_mount_table_t}.
-
-@c XXX - is the variable name for the count right?
-
-@subheading NOTES:
-None.
-@c XXX - Please provide an example
-
-@c
-@c === CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM ===
-@c
-@subsection Configure devFS as Root File System
-
-@findex CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default. If no other root file system
-configuration parameters are specified, the IMFS will be used as the
-root file system.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined if the application wishes to
-use the device-only filesytem as the root file system.
-
-@subheading NOTES:
-The device-only filesystem supports only device nodes and is smaller in
-executable code size than the full IMFS and miniIMFS.
-
-The devFS is comparable in functionality to the pseudo-filesystem name
-space provided before RTEMS release 4.5.0.
-
-@c
-@c === CONFIGURE_MAXIMUM_DEVICES ===
-@c
-@subsection Specifying Maximum Devices for devFS
-
-@findex CONFIGURE_MAXIMUM_DEVICES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_DEVICES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-If @code{BSP_MAXIMUM_DEVICES} is defined, then the
-default value is @code{BSP_MAXIMUM_DEVICES}, otherwise the default value is 4.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_DEVICES} is defined to the number of
-individual devices that may be registered in the device file system (devFS).
-
-@subheading NOTES:
-This option is specific to the device file system (devFS) and should not be
-confused with the @code{CONFIGURE_MAXIMUM_DRIVERS} option. This parameter only
-impacts the devFS and thus is only used by @code{<rtems/confdefs.h>} when
-@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM} is specified.
-
-@c
-@c === CONFIGURE_APPLICATION_DISABLE_FILESYSTEM ===
-@c
-@subsection Disable File System Support
-
-@findex CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_DISABLE_FILESYSTEM}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default. If no other root file system
-configuration parameters are specified, the IMFS will be used as the
-root file system.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined if the application dose not
-intend to use any kind of filesystem support. This include the device
-infrastructure necessary to support @code{printf()}.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM ===
-@c
-@subsection Use a Root IMFS with a Minimalistic Feature Set
-
-@findex CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the following configuration
-options will be defined as well
-@itemize @bullet
-@item @code{CONFIGURE_IMFS_DISABLE_CHMOD},
-@item @code{CONFIGURE_IMFS_DISABLE_CHOWN},
-@item @code{CONFIGURE_IMFS_DISABLE_UTIME},
-@item @code{CONFIGURE_IMFS_DISABLE_LINK},
-@item @code{CONFIGURE_IMFS_DISABLE_SYMLINK},
-@item @code{CONFIGURE_IMFS_DISABLE_READLINK},
-@item @code{CONFIGURE_IMFS_DISABLE_RENAME}, and
-@item @code{CONFIGURE_IMFS_DISABLE_UNMOUNT}.
-@end itemize
-
-@c
-@c === CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK ===
-@c
-@subsection Specify Block Size for IMFS
-
-@findex CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Valid values for this configuration parameter are a power of two (2)
-between 16 and 512 inclusive. In other words, valid values are 16,
-32, 64, 128, 256,and 512.
-
-@item DEFAULT VALUE:
-The default IMFS block size is 128 bytes.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter specifies the block size for in-memory files
-managed by the IMFS. The configured block size has two impacts. The first
-is the average amount of unused memory in the last block of each file. For
-example, when the block size is 512, on average one-half of the last block
-of each file will remain unused and the memory is wasted. In contrast,
-when the block size is 16, the average unused memory per file is only
-8 bytes. However, it requires more allocations for the same size file
-and thus more overhead per block for the dynamic memory management.
-
-Second, the block size has an impact on the maximum size file that can
-be stored in the IMFS. With smaller block size, the maximum file size
-is correspondingly smaller. The following shows the maximum file size
-possible based on the configured block size:
-
-@itemize @bullet
-@item when the block size is 16 bytes, the maximum file size is 1,328
-bytes.
-@item when the block size is 32 bytes, the maximum file size is 18,656
-bytes.
-@item when the block size is 64 bytes, the maximum file size is 279,488
-bytes.
-@item when the block size is 128 bytes, the maximum file size is
-4,329,344 bytes.
-@item when the block size is 256 bytes, the maximum file size is
-68,173,568 bytes.
-@item when the block size is 512 bytes, the maximum file size is
-1,082,195,456 bytes.
-@end itemize
-
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_CHOWN ===
-@c
-@subsection Disable Change Owner Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_CHOWN
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_CHOWN}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to change the
-owner is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_CHMOD ===
-@c
-@subsection Disable Change Mode Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_CHMOD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_CHMOD}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to change the
-mode is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_UTIME ===
-@c
-@subsection Disable Change Times Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_UTIME
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_UTIME}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to change times
-is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_LINK ===
-@c
-@subsection Disable Create Hard Link Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_LINK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_LINK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to create hard
-links is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_SYMLINK ===
-@c
-@subsection Disable Create Symbolic Link Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_SYMLINK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_SYMLINK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to create
-symbolic links is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_READLINK ===
-@c
-@subsection Disable Read Symbolic Link Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_READLINK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_READLINK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to read symbolic
-links is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_RENAME ===
-@c
-@subsection Disable Rename Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_RENAME
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_RENAME}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to rename nodes
-is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_READDIR ===
-@c
-@subsection Disable Directory Read Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_READDIR
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_READDIR}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to read a
-directory is disabled in the root IMFS. It is still possible to open nodes in
-a directory.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_MOUNT ===
-@c
-@subsection Disable Mount Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_MOUNT
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_MOUNT}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to mount other
-file systems is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_UNMOUNT ===
-@c
-@subsection Disable Unmount Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_UNMOUNT
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_UNMOUNT}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to unmount file
-systems is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_MKNOD ===
-@c
-@subsection Disable Make Nodes Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_MKNOD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_MKNOD}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to make
-directories, devices, regular files and FIFOs is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_MKNOD_FILE ===
-@c
-@subsection Disable Make Files Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_MKNOD_FILE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_MKNOD_FILE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to make regular
-files is disabled in the root IMFS.
-
-@c
-@c === CONFIGURE_IMFS_DISABLE_RMNOD ===
-@c
-@subsection Disable Remove Nodes Support of Root IMFS
-
-@findex CONFIGURE_IMFS_DISABLE_RMNOD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IMFS_DISABLE_RMNOD}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-In case this configuration option is defined, then the support to remove nodes
-is disabled in the root IMFS.
-
-@c
-@c === Block Device Cache Configuration ===
-@c
-@section Block Device Cache Configuration
-
-This section defines Block Device Cache (bdbuf) related configuration
-parameters.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_LIBBLOCK ===
-@c
-@subsection Enable Block Device Cache
-
-@findex CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_LIBBLOCK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-Provides a Block Device Cache configuration.
-
-@subheading NOTES:
-Each option of the Block Device Cache configuration can be explicitly set by
-the user with the configuration options below. The Block Device Cache is used
-for example by the RFS and DOSFS file systems.
-
-@c
-@c === CONFIGURE_BDBUF_CACHE_MEMORY_SIZE ===
-@c
-@subsection Size of the Cache Memory
-
-@findex CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_CACHE_MEMORY_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 32768 bytes.
-
-@end table
-
-@subheading DESCRIPTION:
-Size of the cache memory in bytes.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_BDBUF_BUFFER_MIN_SIZE ===
-@c
-@subsection Minimum Size of a Buffer
-
-@findex CONFIGURE_BDBUF_BUFFER_MIN_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_BUFFER_MIN_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 512 bytes.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the minimum size of a buffer in bytes.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_BDBUF_BUFFER_MAX_SIZE ===
-@c
-@subsection Maximum Size of a Buffer
-
-@findex CONFIGURE_BDBUF_BUFFER_MAX_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_BUFFER_MAX_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-It must be positive and an integral multiple of the buffer minimum size.
-
-@item DEFAULT VALUE:
-The default value is 4096 bytes.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the maximum size of a buffer in bytes.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SWAPOUT_SWAP_PERIOD ===
-@c
-@subsection Swapout Task Swap Period
-
-@findex CONFIGURE_SWAPOUT_SWAP_PERIOD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SWAPOUT_SWAP_PERIOD}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 250 milliseconds.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the swapout task swap period in milliseconds.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SWAPOUT_BLOCK_HOLD ===
-@c
-@subsection Swapout Task Maximum Block Hold Time
-
-@findex CONFIGURE_SWAPOUT_BLOCK_HOLD
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SWAPOUT_BLOCK_HOLD}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 1000 milliseconds.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the swapout task maximum block hold time in milliseconds.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SWAPOUT_TASK_PRIORITY ===
-@c
-@subsection Swapout Task Priority
-
-@findex CONFIGURE_SWAPOUT_TASK_PRIORITY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SWAPOUT_TASK_PRIORITY}
-
-@item DATA TYPE:
-Task priority (@code{rtems_task_priority}).
-
-@item RANGE:
-Valid task priority.
-
-@item DEFAULT VALUE:
-The default value is 15.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the swapout task priority.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS ===
-@c
-@subsection Maximum Blocks per Read-Ahead Request
-
-@findex CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the maximum blocks per read-ahead request.
-
-@subheading NOTES:
-A value of 0 disables the read-ahead task (default). The read-ahead task will
-issue speculative read transfers if a sequential access pattern is detected.
-This can improve the performance on some systems.
-
-@c
-@c === CONFIGURE_BDBUF_MAX_WRITE_BLOCKS ===
-@c
-@subsection Maximum Blocks per Write Request
-
-@findex CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_MAX_WRITE_BLOCKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 16.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the maximum blocks per write request.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_BDBUF_TASK_STACK_SIZE ===
-@c
-@subsection Task Stack Size of the Block Device Cache Tasks
-
-@findex CONFIGURE_BDBUF_TASK_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_TASK_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the task stack size of the Block Device Cache tasks in bytes.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY ===
-@c
-@subsection Read-Ahead Task Priority
-
-@findex CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY}
-
-@item DATA TYPE:
-Task priority (@code{rtems_task_priority}).
-
-@item RANGE:
-Valid task priority.
-
-@item DEFAULT VALUE:
-The default value is 15.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the read-ahead task priority.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SWAPOUT_WORKER_TASKS ===
-@c
-@subsection Swapout Worker Task Count
-
-@findex CONFIGURE_SWAPOUT_WORKER_TASKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SWAPOUT_WORKER_TASKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the swapout worker task count.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY ===
-@c
-@subsection Swapout Worker Task Priority
-
-@findex CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY}
-
-@item DATA TYPE:
-Task priority (@code{rtems_task_priority}).
-
-@item RANGE:
-Valid task priority.
-
-@item DEFAULT VALUE:
-The default value is 15.
-
-@end table
-
-@subheading DESCRIPTION:
-Defines the swapout worker task priority.
-
-@subheading NOTES:
-None.
-
-@c
-@c === BSP Specific Settings ===
-@c
-@section BSP Specific Settings
-
-This section describes BSP specific configuration settings used by
-@code{<rtems/confdefs.h>}. The BSP specific configuration settings are
-defined in @code{<bsp.h>}.
-
-@c
-@c === Disable BSP Settings ===
-@c
-@subsection Disable BSP Configuration Settings
-
-@findex CONFIGURE_DISABLE_BSP_SETTINGS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_DISABLE_BSP_SETTINGS}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-All BSP specific configuration settings can be disabled by the application
-with the @code{CONFIGURE_DISABLE_BSP_SETTINGS} option.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK ===
-@c
-@subsection Specify BSP Supports sbrk()
-
-@findex CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined by a BSP to indicate that it
-does not allocate all available memory to the C Program Heap used by
-the Malloc Family of routines.
-
-If defined, when @code{malloc()} is unable to allocate memory, it will
-call the BSP supplied @code{sbrk()} to obtain more memory.
-
-@subheading NOTES:
-This parameter should not be defined by the application. Only the BSP
-knows how it allocates memory to the C Program Heap.
-
-@c
-@c === BSP_IDLE_TASK_BODY ===
-@c
-@subsection Specify BSP Specific Idle Task
-
-@findex BSP_IDLE_TASK_BODY
-
-@table @b
-@item CONSTANT:
-@code{BSP_IDLE_TASK_BODY}
-
-@item DATA TYPE:
-Function pointer.
-
-@item RANGE:
-Undefined or valid function pointer.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_IDLE_TASK_BODY} is defined by the BSP and
-@code{CONFIGURE_IDLE_TASK_BODY} is not defined by the application,
-then this BSP specific idle task body will be used.
-
-@subheading NOTES:
-As it has knowledge of the specific CPU model, system controller logic,
-and peripheral buses, a BSP specific IDLE task may be capable of turning
-components off to save power during extended periods of no task activity
-
-@c
-@c === BSP_IDLE_TASK_STACK_SIZE ===
-@c
-@subsection Specify BSP Suggested Value for IDLE Task Stack Size
-
-@findex BSP_IDLE_TASK_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{BSP_IDLE_TASK_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_IDLE_TASK_STACK_SIZE} is defined by the BSP and
-@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is not defined by the application,
-then this BSP suggested idle task stack size will be used.
-
-
-@subheading NOTES:
-The order of precedence for configuring the IDLE task stack size is:
-
-@itemize @bullet
-@item RTEMS default minimum stack size.
-@item If defined, then @code{CONFIGURE_MINIMUM_TASK_STACK_SIZE}.
-@item If defined, then the BSP specific @code{BSP_IDLE_TASK_SIZE}.
-@item If defined, then the application specified
-@code{CONFIGURE_IDLE_TASK_SIZE}.
-@end itemize
-
-@c XXX - add cross references to other related values.
-
-@c
-@c === BSP_INITIAL_EXTENSION ===
-@c
-@subsection Specify BSP Specific User Extensions
-
-@findex BSP_INITIAL_EXTENSION
-
-@table @b
-@item CONSTANT:
-@code{BSP_INITIAL_EXTENSION}
-
-@item DATA TYPE:
-List of user extension initializers (@code{rtems_extensions_table}).
-
-@item RANGE:
-Undefined or a list of user extension initializers.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_INITIAL_EXTENSION} is defined by the BSP, then this BSP
-specific initial extension will be placed as the last entry in the initial
-extension table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === BSP_INTERRUPT_STACK_SIZE ===
-@c
-@subsection Specifying BSP Specific Interrupt Stack Size
-
-@findex BSP_INTERRUPT_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{BSP_INTERRUPT_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_INTERRUPT_STACK_SIZE} is defined by the BSP and
-@code{CONFIGURE_INTERRUPT_STACK_SIZE} is not defined by the application,
-then this BSP specific interrupt stack size will be used.
-
-@subheading NOTES:
-None.
-
-@c
-@c === BSP_MAXIMUM_DEVICES ===
-@c
-@subsection Specifying BSP Specific Maximum Devices
-
-@findex BSP_MAXIMUM_DEVICES
-
-@table @b
-@item CONSTANT:
-@code{BSP_MAXIMUM_DEVICES}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_MAXIMUM_DEVICES} is defined by the BSP and
-@code{CONFIGURE_MAXIMUM_DEVICES} is not defined by the application,
-then this BSP specific maximum device count will be used.
-
-@subheading NOTES:
-This option is specific to the device file system (devFS) and should not be
-confused with the @code{CONFIGURE_MAXIMUM_DRIVERS} option. This parameter only
-impacts the devFS and thus is only used by @code{<rtems/confdefs.h>} when
-@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM} is specified.
-
-@c
-@c === BSP_ZERO_WORKSPACE_AUTOMATICALLY ===
-@c
-@subsection BSP Recommends RTEMS Workspace be Cleared
-
-@findex BSP_ZERO_WORKSPACE_AUTOMATICALLY
-
-@table @b
-@item CONSTANT:
-@code{BSP_ZERO_WORKSPACE_AUTOMATICALLY}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-If @code{BSP_ZERO_WORKSPACE_AUTOMATICALLY} is defined by the BSP and
-@code{CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY} is not defined by the
-application, then the workspace will be zeroed automatically.
-
-@subheading NOTES:
-Zeroing memory can add significantly to system boot time. It is not
-necessary for RTEMS but is often assumed by support libraries.
-
-@c
-@c === CONFIGURE_BSP_PREREQUISITE_DRIVERS ===
-@c
-@subsection Specify BSP Prerequisite Drivers
-
-@findex CONFIGURE_BSP_PREREQUISITE_DRIVERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS}
-
-@item DATA TYPE:
-List of device driver initializers (@code{rtems_driver_address_table}).
-
-@item RANGE:
-Undefined or array of device drivers.
-
-@item DEFAULT VALUE:
-This option is BSP specific.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is defined if the BSP has device
-drivers it needs to include in the Device Driver Table. This should be
-defined to the set of device driver entries that will be placed in the
-table at the @b{FRONT} of the Device Driver Table and initialized before
-any other drivers @b{INCLUDING} any application prerequisite drivers.
-
-@subheading NOTES:
-@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is typically used by BSPs
-to configure common infrastructure such as bus controllers or probe
-for devices.
-
-
-@c
-@c === Idle Task Configuration ===
-@c
-@section Idle Task Configuration
-
-This section defines the IDLE task related configuration parameters
-supported by @code{<rtems/confdefs.h>}.
-
-@c
-@c === CONFIGURE_IDLE_TASK_BODY ===
-@c
-@subsection Specify Application Specific Idle Task Body
-
-@findex CONFIGURE_IDLE_TASK_BODY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IDLE_TASK_BODY}
-
-@item DATA TYPE:
-Function pointer.
-
-@item RANGE:
-Undefined or valid function pointer.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_IDLE_TASK_BODY} is set to the function name corresponding
-to the application specific IDLE thread body. If not specified, the
-BSP or RTEMS default IDLE thread body will be used.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_IDLE_TASK_STACK_SIZE ===
-@c
-@subsection Specify Idle Task Stack Size
-
-@findex CONFIGURE_IDLE_TASK_STACK_SIZE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IDLE_TASK_STACK_SIZE}
-
-@item DATA TYPE:
-Unsigned integer (@code{size_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is set to the
-desired stack size for the IDLE task.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION ===
-@c
-@subsection Specify Idle Task Performs Application Initialization
-
-@findex CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, the user is assumed
-to provide one or more initialization tasks.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION} is set to
-indicate that the user has configured @b{NO} user initialization tasks
-or threads and that the user provided IDLE task will perform application
-initialization and then transform itself into an IDLE task.
-
-@subheading NOTES:
-If you use this option be careful, the user IDLE task @b{CANNOT} block
-at all during the initialization sequence. Further, once application
-initialization is complete, it must make itself preemptible and enter
-an IDLE body loop.
-
-The IDLE task must run at the lowest priority of all tasks in the system.
-
-@c
-@c === Scheduler Algorithm Configuration ===
-@c
-@section Scheduler Algorithm Configuration
-
-This section defines the configuration parameters related to selecting a
-scheduling algorithm for an application. For the schedulers built into
-RTEMS, the configuration is straightforward. All that is required is
-to define the configuration macro which specifies which scheduler you
-want for in your application. The currently available schedulers are:
-
-The pluggable scheduler interface also enables the user to provide their
-own scheduling algorithm. If you choose to do this, you must define
-multiple configuration macros.
-
-@c
-@c === CONFIGURE_SCHEDULER_PRIORITY ===
-@c
-@subsection Use Deterministic Priority Scheduler
-
-@findex CONFIGURE_SCHEDULER_PRIORITY
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_PRIORITY}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is defined by default.
-This is the default scheduler and specifying this
-configuration parameter is redundant.
-
-@end table
-
-@subheading DESCRIPTION:
-The Deterministic Priority Scheduler is the default scheduler in RTEMS
-for uni-processor applications and is designed for predictable performance
-under the highest loads. It can block or unblock a thread in a constant
-amount of time. This scheduler requires a variable amount of memory
-based upon the number of priorities configured in the system.
-
-@subheading NOTES:
-This scheduler may be explicitly selected by defining
-@code{CONFIGURE_SCHEDULER_PRIORITY} although this is equivalent to the
-default behavior.
-
-@c
-@c === CONFIGURE_SCHEDULER_SIMPLE ===
-@c
-@subsection Use Simple Priority Scheduler
-
-@findex CONFIGURE_SCHEDULER_SIMPLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_SIMPLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-When defined, the Simple Priority Scheduler is used at the thread
-scheduling algorithm. This is an alternative scheduler in RTEMS.
-It is designed to provide the same task scheduling behaviour as the
-Deterministic Priority Scheduler while being simpler in implementation
-and uses less memory for data management. It maintains a single sorted
-list of all ready threads. Thus blocking or unblocking a thread is not
-a constant time operation with this scheduler.
-
-This scheduler may be explicitly selected by defining
-@code{CONFIGURE_SCHEDULER_SIMPLE}.
-
-@subheading NOTES:
-This scheduler is appropriate for use in small systems where RAM is limited.
-
-@c
-@c === CONFIGURE_SCHEDULER_EDF ===
-@c
-@subsection Use Earliest Deadline First Scheduler
-
-@findex CONFIGURE_SCHEDULER_EDF
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_EDF}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-The Earliest Deadline First Scheduler (EDF) is an alternative scheduler in
-RTEMS for uni-processor applications. The EDF schedules tasks with dynamic
-priorities equal to deadlines. The deadlines are declared using only
-Rate Monotonic manager which handles periodic behavior. Period is always
-equal to deadline. If a task does not have any deadline declared or the
-deadline is cancelled, the task is considered a background task which is
-scheduled in case no deadline-driven tasks are ready to run. Moreover,
-multiple background tasks are scheduled according their priority assigned
-upon initialization. All ready tasks reside in a single ready queue.
-
-This scheduler may be explicitly selected by defining
-@code{CONFIGURE_SCHEDULER_EDF}.
-
-@subheading NOTES:
-None.
-
-
-@c
-@c === CONFIGURE_SCHEDULER_CBS ===
-@c
-@subsection Use Constant Bandwidth Server Scheduler
-
-@findex CONFIGURE_SCHEDULER_CBS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_CBS}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-The Constant Bandwidth Server Scheduler (CBS) is an alternative scheduler
-in RTEMS for uni-processor applications. The CBS is a budget aware extension
-of EDF scheduler. The goal of this scheduler is to ensure temporal
-isolation of tasks. The CBS is equipped with a set of additional rules
-and provides with an extensive API.
-
-This scheduler may be explicitly selected by defining
-@code{CONFIGURE_SCHEDULER_CBS}.
-@c XXX - add cross reference to API chapter
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_SCHEDULER_PRIORITY_SMP ===
-@c
-@subsection Use Deterministic Priority SMP Scheduler
-
-@findex CONFIGURE_SCHEDULER_PRIORITY_SMP
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_PRIORITY_SMP}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-The Deterministic Priority SMP Scheduler is derived from the Deterministic
-Priority Scheduler but is capable of scheduling threads across multiple
-processors.
-
-In a configuration with SMP enabled at configure time, it may be
-explicitly selected by defining @code{CONFIGURE_SCHEDULER_PRIORITY_SMP}.
-
-@subheading NOTES:
-This scheduler is only available when RTEMS is configured with SMP
-support enabled.
-
-This scheduler is currently the default in SMP configurations and is
-only selected when @code{CONFIGURE_SMP_APPLICATION} is defined.
-
-@c
-@c === CONFIGURE_SCHEDULER_SIMPLE_SMP ===
-@c
-@subsection Use Simple SMP Priority Scheduler
-
-@findex CONFIGURE_SCHEDULER_SIMPLE_SMP
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_SIMPLE_SMP}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-The Simple SMP Priority Scheduler is derived from the Simple Priority
-Scheduler but is capable of scheduling threads across multiple processors.
-It is designed to provide the same task scheduling behaviour as the
-Deterministic Priority Scheduler while distributing threads across
-multiple processors. Being based upon the Simple Priority Scheduler, it also
-maintains a single sorted list of all ready threads. Thus blocking or
-unblocking a thread is not a constant time operation with this scheduler.
-
-In addition, when allocating threads to processors, the algorithm is not
-constant time. This algorithm was not designed with efficiency as a
-primary design goal. Its primary design goal was to provide an SMP-aware
-scheduling algorithm that is simple to understand.
-
-In a configuration with SMP enabled at configure time, it may be
-explicitly selected by defining @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}.
-
-@subheading NOTES:
-This scheduler is only available when RTEMS is configured with SMP
-support enabled.
-
-@c
-@c === Configuring a Scheduler Name ===
-@c
-@subsection Configuring a Scheduler Name
-
-@findex CONFIGURE_SCHEDULER_NAME
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_NAME}
-
-@item DATA TYPE:
-RTEMS Name (@code{rtems_name}).
-
-@item RANGE:
-Any value.
-
-@item DEFAULT VALUE:
-The default name is
-@itemize @bullet
-@item @code{"UCBS"} for the Uni-Processor CBS scheduler,
-@item @code{"UEDF"} for the Uni-Processor EDF scheduler,
-@item @code{"UPD "} for the Uni-Processor Deterministic Priority scheduler,
-@item @code{"UPS "} for the Uni-Processor Simple Priority scheduler,
-@item @code{"MPA "} for the Multi-Processor Priority Affinity scheduler, and
-@item @code{"MPD "} for the Multi-Processor Deterministic Priority scheduler, and
-@item @code{"MPS "} for the Multi-Processor Simple Priority scheduler.
-@end itemize
-
-@end table
-
-@subheading DESCRIPTION:
-Schedulers can be identified via @code{rtems_scheduler_ident}. The name of the scheduler is determined by the configuration.
-
-@subheading NOTES:
-None.
-
-@c
-@c === Configuring a User Scheduler ===
-@c
-@subsection Configuring a User Provided Scheduler
-
-@findex CONFIGURE_SCHEDULER_USER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SCHEDULER_USER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-RTEMS allows the application to provide its own task/thread
-scheduling algorithm. In order to do this, one must define
-@code{CONFIGURE_SCHEDULER_USER} to indicate the application provides its
-own scheduling algorithm. If @code{CONFIGURE_SCHEDULER_USER} is defined
-then the following additional macros must be defined:
-
-@itemize @bullet
-@item @code{CONFIGURE_SCHEDULER_CONTEXT} must be defined to a static definition
-of the scheduler context of the user scheduler.
-
-@item @code{CONFIGURE_SCHEDULER_CONTROLS} must be defined to a scheduler
-control initializer for the user scheduler.
-
-@item @code{CONFIGURE_SCHEDULER_USER_PER_THREAD} must be defined to the type of
-the per-thread information of the user scheduler.
-
-@end itemize
-
-@subheading NOTES:
-At this time, the mechanics and requirements for writing a
-new scheduler are evolving and not fully documented. It is
-recommended that you look at the existing Deterministic Priority
-Scheduler in @code{cpukit/score/src/schedulerpriority*.c} for
-guidance. For guidance on the configuration macros, please examine
-@code{cpukit/sapi/include/confdefs.h} for how these are defined for the
-Deterministic Priority Scheduler.
-
-@c
-@c === Configuring Clustered Schedulers ===
-@c
-@subsection Configuring Clustered Schedulers
-
-Clustered scheduling helps to control the worst-case latencies in a
-multi-processor system. The goal is to reduce the amount of shared state in
-the system and thus prevention of lock contention. Modern multi-processor
-systems tend to have several layers of data and instruction caches. With
-clustered scheduling it is possible to honour the cache topology of a system
-and thus avoid expensive cache synchronization traffic.
-
-We have clustered scheduling in case the set of processors of a system is
-partitioned into non-empty pairwise-disjoint subsets. These subsets are called
-clusters. Clusters with a cardinality of one are partitions. Each cluster is
-owned by exactly one scheduler instance. In order to use clustered
-scheduling the application designer has to answer two questions.
-
-@enumerate
-@item How is the set of processors partitioned into clusters?
-@item Which scheduler is used for which cluster?
-@end enumerate
-
-@subheading CONFIGURATION:
-
-The schedulers in an SMP system are statically configured on RTEMS. Firstly
-the application must select which scheduling algorithms are available with the
-following defines
-
-@itemize @bullet
-@item @code{CONFIGURE_SCHEDULER_PRIORITY_SMP},
-@item @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}, and
-@item @code{CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP}.
-@end itemize
-
-This is necessary to calculate the per-thread overhead introduced by the
-schedulers. After these definitions the configuration file must @code{#include
-<rtems/scheduler.h>} to have access to scheduler specific configuration macros.
-Each scheduler needs a context to store state information at run-time. To
-provide a context for each scheduler is the next step. Use the following
-macros to create scheduler contexts
-
-@itemize @bullet
-@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(name, prio_count)},
-@item @code{RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(name)}, and
-@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(name, prio_count)}.
-@end itemize
-
-The @code{name} parameter is used as part of a designator for a global
-variable, so the usual C/C++ designator rules apply. Additional parameters are
-scheduler specific. The schedulers are registered in the system via the
-scheduler table. To create the scheduler table define
-@code{CONFIGURE_SCHEDULER_CONTROLS} to a list of the following scheduler
-control initializers
-
-@itemize @bullet
-@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(name, obj_name)},
-@item @code{RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(name, obj_name)}, and
-@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(name, obj_name)}.
-@end itemize
-
-The @code{name} parameter must correspond to the parameter defining the
-scheduler context. The @code{obj_name} determines the scheduler object name
-and can be used in @code{rtems_scheduler_ident()} to get the scheduler object
-identifier.
-
-The last step is to define which processor uses which scheduler.
-For this purpose a scheduler assignment table must be defined. The entry count
-of this table must be equal to the configured maximum processors
-(@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}). A processor assignment to a
-scheduler can be optional or mandatory. The boot processor must have a
-scheduler assigned. In case the system needs more mandatory processors than
-available then a fatal run-time error will occur. To specify the scheduler
-assignments define @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} to a list of
-@code{RTEMS_SCHEDULER_ASSIGN(index, attr)} and
-@code{RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER} macros. The @code{index} parameter
-must be a valid index into the scheduler table. The @code{attr} parameter
-defines the scheduler assignment attributes. By default a scheduler assignment
-to a processor is optional. For the scheduler assignment attribute use one of
-the mutually exclusive variants
-
-@itemize @bullet
-@item @code{RTEMS_SCHEDULER_ASSIGN_DEFAULT},
-@item @code{RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY}, and
-@item @code{RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL}.
-@end itemize
-
-@subheading ERRORS:
-
-In case one of the scheduler indices in
-@code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} is invalid a link-time error will
-occur with an undefined reference to @code{RTEMS_SCHEDULER_INVALID_INDEX}.
-
-Some fatal errors may occur in case of scheduler configuration inconsistencies or a lack
-of processors on the system. The fatal source is
-@code{RTEMS_FATAL_SOURCE_SMP}. None of the errors is internal.
-
-@itemize @bullet
-@item @code{SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER} - the boot
-processor must have a scheduler assigned.
-@item @code{SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT} - there exists a
-mandatory processor beyond the range of physically or virtually available
-processors. The processor demand must be reduced for this system.
-@item @code{SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED} - the start of a
-mandatory processor failed during system initialization. The system may not
-have this processor at all or it could be a problem with a boot loader for
-example. Check the @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} definition.
-@item @code{SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR} - it is not
-allowed to start multitasking on a processor with no scheduler assigned.
-@end itemize
-
-@subheading EXAMPLE:
-
-The following example shows a scheduler configuration for a hypothetical
-product using two chip variants. One variant has four processors which is used
-for the normal product line and another provides eight processors for the
-high-performance product line. The first processor performs hard-real time
-control of actuators and sensors. The second processor is not used by RTEMS at
-all and runs a Linux instance to provide a graphical user interface. The
-additional processors are used for a worker thread pool to perform data
-processing operations.
-
-The processors managed by RTEMS use two Deterministic Priority scheduler
-instances capable of dealing with 256 priority levels. The scheduler with
-index zero has the name @code{"IO "}. The scheduler with index one has the
-name @code{"WORK"}. The scheduler assignments of the first, third and fourth
-processor are mandatory, so the system must have at least four processors,
-otherwise a fatal run-time error will occur during system startup. The
-processor assignments for the fifth up to the eighth processor are optional so
-that the same application can be used for the normal and high-performance
-product lines. The second processor has no scheduler assigned and runs Linux.
-A hypervisor will ensure that the two systems cannot interfere in an
-undesirable way.
-
-@example
-@group
-#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 8
-
-#define CONFIGURE_MAXIMUM_PRIORITY 255
-
-/* Make the scheduler algorithm available */
-
-#define CONFIGURE_SCHEDULER_PRIORITY_SMP
-
-#include <rtems/scheduler.h>
-
-/* Create contexts for the two scheduler instances */
-
-RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
-
-RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
-
-/* Define the scheduler table */
-
-#define CONFIGURE_SCHEDULER_CONTROLS \
- RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
- io, \
- rtems_build_name('I', 'O', ' ', ' ') \
- ), \
- RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
- work, \
- rtems_build_name('W', 'O', 'R', 'K') \
- )
-
-/* Define the processor to scheduler assignments */
-
-#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
- RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
-@end group
-@end example
-
-@c
-@c === SMP Specific Configuration Parameters ===
-@c
-@section SMP Specific Configuration Parameters
-
-When RTEMS is configured to support SMP target systems, there are other
-configuration parameters which apply.
-
-@c XXX - add --enable-smp
-
-@c
-@c === CONFIGURE_SMP_APPLICATION ===
-@c
-@subsection Enable SMP Support for Applications
-
-@findex CONFIGURE_SMP_APPLICATION
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SMP_APPLICATION}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_SMP_APPLICATION} must be defined to enable SMP support for the
-application.
-
-@subheading NOTES:
-This define may go away in the future in case all RTEMS components are SMP
-ready. This configuration define is ignored on uni-processor configurations.
-
-@c
-@c === CONFIGURE_SMP_MAXIMUM_PROCESSORS ===
-@c
-@subsection Specify Maximum Processors in SMP System
-
-@findex CONFIGURE_SMP_MAXIMUM_PROCESSORS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-The default value is 1, (if CONFIGURE_SMP_APPLICATION is defined).
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS} must be set to the number of
-processors in the SMP configuration.
-
-@subheading NOTES:
-If there are more processors available than configured, the rest will be
-ignored. This configuration define is ignored on uni-processor configurations.
-
-@c
-@c === Device Driver Table ===
-@c
-@section Device Driver Table
-
-This section defines the configuration parameters related
-to the automatic generation of a Device Driver Table. As
-@code{<rtems/confdefs.h>} only is aware of a small set of
-standard device drivers, the generated Device Driver
-Table is suitable for simple applications with no
-custom device drivers.
-
-Note that network device drivers are not configured in the Device Driver Table.
-
-@c
-@c === CONFIGURE_MAXIMUM_DRIVERS ===
-@c
-@subsection Specifying the Maximum Number of Device Drivers
-
-@findex CONFIGURE_MAXIMUM_DRIVERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_DRIVERS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-This is computed by default, and is set to the number of device drivers
-configured using the @code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER}
-configuration parameters.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_DRIVERS} is defined as the number of device
-drivers per node.
-
-@subheading NOTES:
-If the application will dynamically install device drivers, then this
-configuration parameter must be larger than the number of statically
-configured device drivers. Drivers configured using the
-@code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER} configuration parameters
-are statically installed.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER ===
-@c
-@subsection Enable Console Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is defined if the
-application wishes to include the Console Device Driver.
-
-@subheading NOTES:
-This device driver is responsible for providing standard input and output
-using @i{/dev/console}.
-
-BSPs should be constructed in a manner that allows @code{printk()}
-to work properly without the need for the console driver to be configured.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER ===
-@c
-@subsection Enable Clock Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER} is defined if the
-application wishes to include the Clock Device Driver.
-
-@subheading NOTES:
-This device driver is responsible for providing a regular
-interrupt which invokes the @code{rtems_clock_tick} directive.
-
-If neither the Clock Driver not Benchmark Timer is enabled and
-the configuration parameter
-@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
-then a compile time error will occur.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER ===
-@c
-@subsection Enable the Benchmark Timer Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER} is defined if the
-application wishes to include the Timer Driver. This device driver is
-used to benchmark execution times by the RTEMS Timing Test Suites.
-
-@subheading NOTES:
-If neither the Clock Driver not Benchmark Timer is enabled and
-the configuration parameter
-@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
-then a compile time error will occur.
-
-@c
-@c === CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER ===
-@c
-@subsection Specify Clock and Benchmark Timer Drivers Are Not Needed
-
-@findex CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is defined when
-the application does @b{NOT} want the Clock Device Driver and is @b{NOT}
-using the Timer Driver. The inclusion or exclusion of the Clock Driver
-must be explicit in user applications.
-
-@subheading NOTES:
-This configuration parameter is intended to prevent the common user error
-of using the Hello World example as the baseline for an application and
-leaving out a clock tick source.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER ===
-@c
-@subsection Enable Real-Time Clock Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER} is defined if the
-application wishes to include the Real-Time Clock Driver.
-
-@subheading NOTES:
-Most BSPs do not include support for a real-time clock. This is because
-many boards do not include the required hardware.
-
-If this is defined and the BSP does not have this device driver, then
-the user will get a link time error for an undefined symbol.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER ===
-@c
-@subsection Enable the Watchdog Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
-is defined if the application wishes to include the Watchdog Driver.
-
-@subheading NOTES:
-Most BSPs do not include support for a watchdog device driver. This is
-because many boards do not include the required hardware.
-
-If this is defined and the BSP does not have this device driver, then
-the user will get a link time error for an undefined symbol.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER ===
-@c
-@subsection Enable the Graphics Frame Buffer Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER} is defined
-if the application wishes to include the BSP's Frame Buffer Device Driver.
-
-@subheading NOTES:
-Most BSPs do not include support for a Frame Buffer Device Driver. This is
-because many boards do not include the required hardware.
-
-If this is defined and the BSP does not have this device driver, then
-the user will get a link time error for an undefined symbol.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER ===
-@c
-@subsection Enable Stub Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER} is defined if the
-application wishes to include the Stub Device Driver.
-
-@subheading NOTES:
-This device driver simply provides entry points that return successful
-and is primarily a test fixture. It is supported by all BSPs.
-
-@c
-@c === CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS ===
-@c
-@subsection Specify Application Prerequisite Device Drivers
-
-@findex CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS}
-
-@item DATA TYPE:
-device driver entry structures
-
-@item RANGE:
-Undefined or set of device driver entry structures
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS} is defined if the
-application has device drivers it needs to include in the Device Driver
-Table. This should be defined to the set of device driver entries that
-will be placed in the table at the @b{FRONT} of the Device Driver Table
-and initialized before any other drivers @b{EXCEPT} any BSP prerequisite
-drivers.
-
-@subheading NOTES:
-In some cases, it is used by System On Chip BSPs to support peripheral
-buses beyond those normally found on the System On Chip. For example,
-this is used by one RTEMS system which has implemented a SPARC/ERC32
-based board with VMEBus. The VMEBus Controller initialization is performed
-by a device driver configured via this configuration parameter.
-
-@c XXX Add example
-
-@c
-@c === CONFIGURE_APPLICATION_EXTRA_DRIVERS ===
-@c
-@subsection Specify Extra Application Device Drivers
-
-@findex CONFIGURE_APPLICATION_EXTRA_DRIVERS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS}
-
-@item DATA TYPE:
-device driver entry structures
-
-@item RANGE:
-Undefined or set of device driver entry structures
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS} is defined if the
-application has device drivers it needs to include in the Device Driver
-Table. This should be defined to the set of device driver entries that
-will be placed in the table at the @b{END} of the Device Driver Table.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER ===
-@c
-@subsection Enable /dev/null Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
-@cindex /dev/null
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration variable is specified to enable @i{/dev/null}
-device driver.
-
-@subheading NOTES:
-This device driver is supported by all BSPs.
-
-@c
-@c === CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER ===
-@c
-@subsection Enable /dev/zero Device Driver
-
-@findex CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
-@cindex /dev/zero
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration variable is specified to enable @i{/dev/zero}
-device driver.
-
-@subheading NOTES:
-This device driver is supported by all BSPs.
-
-@c
-@c === CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE ===
-@c
-@subsection Specifying Application Defined Device Driver Table
-
-@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default, indicating the @code{<rtems/confdefs.h>}
-is providing the device driver table.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if the application
-wishes to provide their own Device Driver Table.
-
-The table must be an array of @code{rtems_driver_address_table} entries named
-@code{_IO_Driver_address_table}. The application must also provide a const
-variable @code{_IO_Number_of_drivers} of type @code{size_t} indicating the
-number of entries in the @code{_IO_Driver_address_table}.
-
-@subheading NOTES:
-It is expected that there the application would only rarely need to do this.
-
-@c
-@c === Multiprocessing Configuration ===
-@c
-@section Multiprocessing Configuration
-
-This section defines the multiprocessing related system configuration
-parameters supported by @code{<rtems/confdefs.h>}. They are only used
-if the Multiprocessing Support (distinct from the SMP support) is enabled
-at configure time using the @code{--enable-multiprocessing} option.
-
-Additionally, this class of Configuration Constants are only applicable if
-@code{CONFIGURE_MP_APPLICATION} is defined.
-
-@c
-@c === CONFIGURE_MP_APPLICATION ===
-@c
-@subsection Specify Application Will Use Multiprocessing
-
-@findex CONFIGURE_MP_APPLICATION
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_APPLICATION}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter must be defined to indicate
-that the application intends to be part of a multiprocessing
-configuration. Additional configuration parameters are assumed to be
-provided.
-
-@subheading NOTES:
-This has no impact unless RTEMS was configured and built using the
-@code{--enable-multiprocessing} option.
-
-@c
-@c === CONFIGURE_MP_NODE_NUMBER ===
-@c
-@subsection Configure Node Number in Multiprocessor Configuration
-
-@findex CONFIGURE_MP_NODE_NUMBER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_NODE_NUMBER}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is @code{NODE_NUMBER}, which is assumed to be
-set by the compilation environment.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MP_NODE_NUMBER} is the node number of
-this node in a multiprocessor system.
-
-@subheading NOTES:
-In the RTEMS Multiprocessing Test Suite, the node number is derived from
-the Makefile variable @code{NODE_NUMBER}. The same code is compiled with
-the @code{NODE_NUMBER} set to different values. The test programs behave
-differently based upon their node number.
-
-
-@c
-@c === CONFIGURE_MP_MAXIMUM_NODES ===
-@c
-@subsection Configure Maximum Node in Multiprocessor Configuration
-
-@findex CONFIGURE_MP_MAXIMUM_NODES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_MAXIMUM_NODES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 2.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MP_MAXIMUM_NODES} is the maximum number of nodes in a
-multiprocessor system.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS ===
-@c
-@subsection Configure Maximum Global Objects in Multiprocessor Configuration
-
-@findex CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Positive.
-
-@item DEFAULT VALUE:
-The default value is 32.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS} is the maximum number of
-concurrently active global objects in a multiprocessor system.
-
-@subheading NOTES:
-This value corresponds to the total number of objects which can be
-created with the @code{RTEMS_GLOBAL} attribute.
-
-@c
-@c === CONFIGURE_MP_MAXIMUM_PROXIES ===
-@c
-@subsection Configure Maximum Proxies in Multiprocessor Configuration
-
-@findex CONFIGURE_MP_MAXIMUM_PROXIES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_MAXIMUM_PROXIES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-The default value is 32.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MP_MAXIMUM_PROXIES} is the maximum number of concurrently
-active thread/task proxies on this node in a multiprocessor system.
-
-@subheading NOTES:
-Since a proxy is used to represent a remote task/thread which is blocking on
-this node. This configuration parameter reflects the maximum number of
-remote tasks/threads which can be blocked on objects on this node.
-
-@c XXX - add xref to proxy discussion in MP chapter
-
-@c
-@c === CONFIGURE_MP_MPCI_TABLE_POINTER ===
-@c
-@subsection Configure MPCI in Multiprocessor Configuration
-
-@findex CONFIGURE_MP_MPCI_TABLE_POINTER
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MP_MPCI_TABLE_POINTER}
-
-@item DATA TYPE:
-pointer to @code{rtems_mpci_table}
-
-@item RANGE:
-undefined or valid pointer
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MP_MPCI_TABLE_POINTER} is the pointer to the
-MPCI Configuration Table. The default value of this field is
-@code{&MPCI_table}.
-
-@subheading NOTES:
-RTEMS provides a Shared Memory MPCI Device Driver which can be used on
-any Multiprocessor System assuming the BSP provides the proper set of
-supporting methods.
-
-@c
-@c === CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE ===
-@c
-@subsection Do Not Generate Multiprocessor Configuration Table
-
-@findex CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE} is defined if the
-application wishes to provide their own Multiprocessing Configuration
-Table. The generated table is named @code{Multiprocessing_configuration}.
-
-@subheading NOTES:
-This is a configuration parameter which is very unlikely to be used by
-an application. If you find yourself wanting to use it in an application,
-please reconsider and discuss this on the RTEMS Users mailing list.
-
-@c
-@c === Ada Tasks ===
-@c
-@section Ada Tasks
-
-This section defines the system configuration parameters supported
-by @code{<rtems/confdefs.h>} related to configuring RTEMS to support
-a task using Ada tasking with GNAT/RTEMS.
-
-These configuration parameters are only available when RTEMS is built with
-the @code{--enable-ada} configure option and the application specifies
-@code{CONFIGURE_GNAT_RTEMS}.
-
-Additionally RTEMS includes an Ada language binding to the Classic
-API which has a test suite. This test suite is enabled only when
-@code{--enable-tests} and @code{--enable-expada} are specified on the
-configure command.
-
-@c
-@c === CONFIGURE_GNAT_RTEMS ===
-@c
-@subsection Specify Application Includes Ada Code
-
-@findex CONFIGURE_GNAT_RTEMS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_GNAT_RTEMS}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_GNAT_RTEMS} is defined to inform RTEMS that the GNAT
-Ada run-time is to be used by the application.
-
-@subheading NOTES:
-This configuration parameter is critical as it makes
-@code{<rtems/confdefs.h>} configure the resources (POSIX API Threads,
-Mutexes, Condition Variables, and Keys) used implicitly by the GNAT
-run-time.
-
-@c
-@c === CONFIGURE_MAXIMUM_ADA_TASKS ===
-@c
-@subsection Specify the Maximum Number of Ada Tasks.
-
-@findex CONFIGURE_MAXIMUM_ADA_TASKS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_ADA_TASKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Undefined or positive.
-
-@item DEFAULT VALUE:
-If @code{CONFIGURE_GNAT_RTEMS} is defined, then the
-default value is 20, otherwise the default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_ADA_TASKS} is the number of Ada tasks that can
-be concurrently active in the system.
-
-@subheading NOTES:
-None.
-
-@c
-@c === CONFIGURE_MAXIMUM_FAKE_ADA_TASKS ===
-@c
-@subsection Specify the Maximum Fake Ada Tasks
-
-@findex CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
-
-@table @b
-@item CONSTANT:
-@findex @code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 0.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS} is the number of @i{fake} Ada tasks
-that can be concurrently active in the system. A @i{fake} Ada task is
-a non-Ada task that makes calls back into Ada code and thus implicitly
-uses the Ada run-time.
-
-@subheading NOTES:
-None.
-
-@c
-@c === PCI Library ===
-@c
-@section PCI Library
-
-This section defines the system configuration parameters supported
-by @code{rtems/confdefs.h} related to configuring the PCI Library
-for RTEMS.
-
-The PCI Library startup behaviour can be configured in four different
-ways depending on how @code{CONFIGURE_PCI_CONFIG_LIB} is defined:
-
-@itemize @bullet
-@findex PCI_LIB_AUTO
-@item @code{PCI_LIB_AUTO} is used to enable the PCI auto configuration
-software. PCI will be automatically probed, PCI buses enumerated, all
-devices and bridges will be initialized using Plug & Play software
-routines. The PCI device tree will be populated based on the PCI devices
-found in the system, PCI devices will be configured by allocating address
-region resources automatically in PCI space according to the BSP or host
-bridge driver set up.
-
-@findex PCI_LIB_READ
-@item @code{PCI_LIB_READ} is used to enable the PCI read configuration
-software. The current PCI configuration is read to create the RAM
-representation (the PCI device tree) of the PCI devices present. PCI devices
-are assumed to already have been initialized and PCI buses enumerated, it is
-therefore required that a BIOS or a boot loader has set up configuration space
-prior to booting into RTEMS.
-
-@findex PCI_LIB_STATIC
-@item @code{PCI_LIB_STATIC} is used to enable the PCI static configuration
-software. The user provides a PCI tree with information how all PCI devices
-are to be configured at compile time by linking in a custom
-@code{struct pci_bus pci_hb} tree. The static PCI library will not probe PCI
-for devices, instead it will assume that all devices defined by the user are
-present, it will enumerate the PCI buses and configure all PCI devices in
-static configuration accordingly. Since probe and allocation software is not
-needed the startup is faster, has smaller footprint and does not require
-dynamic memory allocation.
-
-@findex PCI_LIB_PERIPHERAL
-@item @code{PCI_LIB_PERIPHERAL} is used to enable the PCI peripheral
-configuration. It is similar to @code{PCI_LIB_STATIC}, but it will never write
-the configuration to the PCI devices since PCI peripherals are not allowed to
-access PCI configuration space.
-
-@end itemize
-
-Note that selecting PCI_LIB_STATIC or PCI_LIB_PERIPHERAL but not defining
-@code{pci_hb} will reuslt in link errors. Note also that in these modes
-Plug & Play is not performed.
-
-@c
-@c === Go Tasks ===
-@c
-@section Go Tasks
-
-@c
-@c === CONFIGURE_ENABLE_GO ===
-@c
-@subsection Specify Application Includes Go Code
-
-@findex CONFIGURE_ENABLE_GO
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_ENABLE_GO}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_ENABLE_GO} is defined to inform RTEMS that the Go
-run-time is to be used by the application.
-
-@subheading NOTES:
-The Go language support is experimental
-
-@c
-@c === CONFIGURE_MAXIMUM_GOROUTINES ===
-@c
-@subsection Specify the maximum number of Go routines
-
-@findex CONFIGURE_MAXIMUM_GOROUTINES
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_GOROUTINES}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 400
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_GOROUTINES} is defined to specify the maximum number of
-Go routines.
-
-@subheading NOTES:
-The Go language support is experimental
-
-@c
-@c === CONFIGURE_MAXIMUM_GO_CHANNELS ===
-@c
-@subsection Specify the maximum number of Go Channels
-
-@findex CONFIGURE_MAXIMUM_GO_CHANNELS
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_MAXIMUM_GO_CHANNELS}
-
-@item DATA TYPE:
-Unsigned integer (@code{uint32_t}).
-
-@item RANGE:
-Zero or positive.
-
-@item DEFAULT VALUE:
-The default value is 500
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_MAXIMUM_GO_CHANNELS} is defined to specify the maximum number
-of Go channels.
-
-@subheading NOTES:
-The Go language support is experimental
-
-@c
-@c === Configuration Data Structures ===
-@c
-@section Configuration Data Structures
-
-It is recommended that applications be configured using
-@code{<rtems/confdefs.h>} as it is simpler and insulates applications
-from changes in the underlying data structures. However, it is sometimes
-important to understand the data structures that are automatically filled
-in by the configuration parameters. This section describes the primary
-configuration data structures.
-
-If the user wishes to see the details of a particular data structure,
-they are are advised to look at the source code. After all, that is one
-of the advantages of RTEMS.