diff options
author | Joel Sherrill <joel@rtems.org> | 2016-11-15 10:37:59 -0600 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2017-01-11 12:13:21 -0600 |
commit | 48a7fa31f918a6fc88719b3c9393a9ba2829f42a (patch) | |
tree | 10bf638de133099fcabe5fe713ca98a546a27ab2 /doc/user/conf.t | |
parent | Remove obsolete __RTEMS_HAVE_SYS_CPUSET_H__ (diff) | |
download | rtems-48a7fa31f918a6fc88719b3c9393a9ba2829f42a.tar.bz2 |
Remove texinfo format documentation. Replaced by Sphinx formatted documentation.
closes #2812.
Diffstat (limited to '')
-rw-r--r-- | doc/user/conf.t | 5421 |
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. |