summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/include/confdefs.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-06-05 14:41:42 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-06-05 14:41:42 +0000
commit5877cc3af542ab512e4ec06208572ceaf575fef5 (patch)
tree6dee89ceaa830262f3ac5fa5bfbc312503924543 /cpukit/sapi/include/confdefs.h
parent2008-06-05 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-5877cc3af542ab512e4ec06208572ceaf575fef5.tar.bz2
2008-06-05 Joel Sherrill <joel.sherrill@OARcorp.com>
* sapi/include/confdefs.h: Rework to be more accurate on allocation. In particular, there was a report from that Matthew Riek that memory was being reserved twice for the IDLE task. This was covering up other places that under allocated memory. Before I was done, I had reworked the file to be easier to read, maintain and be more accurate.
Diffstat (limited to 'cpukit/sapi/include/confdefs.h')
-rw-r--r--cpukit/sapi/include/confdefs.h1652
1 files changed, 933 insertions, 719 deletions
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index de4bc5dc4f..b60c03cc56 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -39,16 +39,16 @@
#ifndef __CONFIGURATION_TEMPLATE_h
#define __CONFIGURATION_TEMPLATE_h
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/*
* Include the executive's configuration
*/
#include <rtems/score/cpuopts.h>
#include <rtems/score/apimutex.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern rtems_initialization_tasks_table Initialization_tasks[];
extern rtems_driver_address_table Device_drivers[];
extern rtems_configuration_table Configuration;
@@ -56,76 +56,102 @@ extern rtems_configuration_table Configuration;
extern rtems_multiprocessing_table Multiprocessing_configuration;
#endif
#ifdef RTEMS_POSIX_API
-extern posix_api_configuration_table Configuration_POSIX_API;
+ extern posix_api_configuration_table Configuration_POSIX_API;
#endif
#ifdef RTEMS_ITRON_API
-extern itron_api_configuration_table Configuration_ITRON_API;
+ extern itron_api_configuration_table Configuration_ITRON_API;
#endif
-/*
- * RTEMS C Library and Newlib support
+/**
+ * This macro determines whether the RTEMS reentrancy support for
+ * the Newlib C Library is enabled.
*/
-
-#if (defined(RTEMS_NEWLIB) && defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
+#if (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
#define CONFIGURE_NEWLIB_EXTENSION 1
#else
#define CONFIGURE_NEWLIB_EXTENSION 0
#endif
-/*
- * File descriptors managed by libio
+/**
+ * This macro defines the number of POSIX file descriptors allocated
+ * and managed by libio. These are the "integer" file descriptors that
+ * are used by calls like open(2) and read(2).
*/
-
#ifndef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
-#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
+ #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
#endif
+/**
+ * From the number of file descriptors, we can determine how many
+ * semaphores the implementation will require.
+ */
#define CONFIGURE_LIBIO_SEMAPHORES \
(CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS + 1)
#ifdef CONFIGURE_INIT
-uint32_t rtems_libio_number_iops = CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS;
+ /**
+ * When instantiating the configuration tables, this variable is
+ * initialized to specify the maximum number of file descriptors.
+ */
+ uint32_t rtems_libio_number_iops = CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS;
#endif
-/*
- * Termios resources
+/**
+ * This macro determines if termios is disabled by this application.
+ * This only means that resources will not be reserved. If you end
+ * up using termios, it will fail.
*/
-
#ifdef CONFIGURE_TERMIOS_DISABLED
-#define CONFIGURE_TERMIOS_SEMAPHORES 0
+ #define CONFIGURE_TERMIOS_SEMAPHORES 0
#else
+ /**
+ * This macro specifies the number of serial or PTY ports that will
+ * use termios.
+ */
+ #ifndef CONFIGURE_NUMBER_OF_TERMIOS_PORTS
+ #define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 1
+ #endif
-#ifndef CONFIGURE_NUMBER_OF_TERMIOS_PORTS
-#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 1
-#endif
-
-#define CONFIGURE_TERMIOS_SEMAPHORES \
- ((CONFIGURE_NUMBER_OF_TERMIOS_PORTS * 4) + 1)
+ /**
+ * This macro reserves the number of semaphores required by termios
+ * based upon the number of communication ports that will use it.
+ */
+ #define CONFIGURE_TERMIOS_SEMAPHORES \
+ ((CONFIGURE_NUMBER_OF_TERMIOS_PORTS * 4) + 1)
#endif
-/*
- * PTYs
+/**
+ * This macro specifies the number of PTYs that can be concurrently
+ * active.
*/
-
#ifndef CONFIGURE_MAXIMUM_PTYS
-#define CONFIGURE_MAXIMUM_PTYS 0
+ #define CONFIGURE_MAXIMUM_PTYS 0
#endif
+/**
+ * This variable contains the maximum number of PTYs that can be
+ * concurrently active.
+ */
#ifdef CONFIGURE_INIT
-int rtems_telnetd_maximum_ptys = CONFIGURE_MAXIMUM_PTYS;
+ int rtems_telnetd_maximum_ptys = CONFIGURE_MAXIMUM_PTYS;
#else
-extern int rtems_telnetd_maximum_ptys;
+ extern int rtems_telnetd_maximum_ptys;
#endif
/*
* Mount Table Configuration
*/
-
#include <rtems/imfs.h>
+/**
+ * This specifies the number of bytes per block for files within
+ * the IMFS. There are a maximum number of blocks per file so
+ * this dictates the maximum size of a file. This has to be balanced
+ * with the unused portion of each block that might be wasted.
+ */
#ifndef CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
-#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \
- IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
+ #define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \
+ IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
#endif
#ifdef CONFIGURE_INIT
int imfs_rq_memfile_bytes_per_block = CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK;
@@ -150,21 +176,17 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#endif
-/*
- * Stack Checker Requirements
- *
- * NOTE: This does not automatically enable reporting at program exit.
+/**
+ * This configures the stack checker user extension.
*/
-
#ifdef STACK_CHECKER_ON
-#define CONFIGURE_STACK_CHECKER_EXTENSION 1
+ #define CONFIGURE_STACK_CHECKER_EXTENSION 1
#else
-#define CONFIGURE_STACK_CHECKER_EXTENSION 0
+ #define CONFIGURE_STACK_CHECKER_EXTENSION 0
#endif
-
-/*
- * Idle task body configuration
+/**
+ * @brief Idle task body configuration
*
* There is a default IDLE thread body provided by RTEMS which
* has the possibility of being CPU specific. There may be a
@@ -179,8 +201,8 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#endif
-/*
- * Idle task stack size configuration
+/**
+ * @brief Idle task stack size configuration
*
* By default, the IDLE task will have a stack of minimum size.
* The BSP or application may override this value.
@@ -193,8 +215,8 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#endif
-/*
- * Interrupt stack size configuration
+/**
+ * @brief Interrupt stack size configuration
*
* By default, the interrupt stack will be of minimum size.
* The BSP or application may override this value.
@@ -207,8 +229,12 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#endif
-/* XXX try to get to the point where all BSP support allocating the
- * XXX memory from the Workspace
+/**
+ * This reserves memory for the interrupt stack if it is to be allocated
+ * by RTEMS rather than the BSP.
+ *
+ * @todo Try to get to the point where all BSPs support allocating the
+ * memory from the Workspace.
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == 0)
#define CONFIGURE_INTERRUPT_STACK_MEMORY 0
@@ -216,23 +242,24 @@ extern int rtems_telnetd_maximum_ptys;
#define CONFIGURE_INTERRUPT_STACK_MEMORY CONFIGURE_INTERRUPT_STACK_SIZE
#endif
-/*
- * Task stack allocator configuration
+/**
+ * Configure the very much optional task stack allocator
*/
-
#ifndef CONFIGURE_TASK_STACK_ALLOCATOR
#define CONFIGURE_TASK_STACK_ALLOCATOR NULL
#endif
+/**
+ * Configure the very much optional task stack deallocator
+ */
#ifndef CONFIGURE_TASK_STACK_DEALLOCATOR
#define CONFIGURE_TASK_STACK_DEALLOCATOR NULL
#endif
-/*
+/**
* Should the RTEMS Workspace and C Program Heap be cleared automatically
* at system start up?
*/
-
#ifndef CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
#ifdef BSP_ZERO_WORKSPACE_AUTOMATICALLY
#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY \
@@ -249,6 +276,10 @@ extern int rtems_telnetd_maximum_ptys;
#include <rtems/malloc.h>
#ifdef CONFIGURE_INIT
+ /**
+ * This configures the malloc family statistics to be available.
+ * By default only function call counts are kept.
+ */
rtems_malloc_statistics_functions_t *rtems_malloc_statistics_helpers =
#ifndef CONFIGURE_MALLOC_STATISTICS
NULL;
@@ -258,6 +289,12 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#ifdef CONFIGURE_INIT
+ /**
+ * This configures the sbrk() support for the malloc family.
+ * By default it is assumed that the BSP provides all available
+ * RAM to the malloc family implementation so sbrk()'ing to get
+ * more memory would always fail anyway.
+ */
rtems_malloc_sbrk_functions_t *rtems_malloc_sbrk_helpers =
#ifndef CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
NULL;
@@ -267,6 +304,11 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#ifdef CONFIGURE_INIT
+ /**
+ * This configures the malloc family plugin which dirties memory
+ * allocated. This is helpful for finding unitialized data structure
+ * problems.
+ */
rtems_malloc_dirtier_t *rtems_malloc_dirty_helper =
#if defined(CONFIGURE_MALLOC_DIRTY)
rtems_malloc_dirty_memory;
@@ -275,6 +317,30 @@ extern int rtems_telnetd_maximum_ptys;
#endif
#endif
+/**
+ * This is a helper macro used in calculations in this file. It is used
+ * to noted when an element is allocated from the RTEMS Workspace and adds
+ * a factor to account for heap overhead plus an alignment factor that
+ * may be applied.
+ */
+#define _Configure_From_workspace(_size) \
+ ((_size) + (2 * sizeof(uint32_t)) + CPU_ALIGNMENT)
+
+/**
+ * This macro accounts for how memory for a set of configured objects is
+ * allocated from the Executive Workspace.
+ *
+ * NOTE: It does NOT attempt to address the more complex case of unlimited
+ * objects.
+ */
+#define _Configure_Object_RAM(_number, _size) \
+ ( _Configure_From_workspace((_number) * (_size)) + \
+ _Configure_From_workspace( \
+ (((_number) + 1) * sizeof(Objects_Control *)) + \
+ (sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) \
+ ) \
+ )
+
/*
* Default User Initialization Task Table. This table guarantees that
* one user initialization table is defined.
@@ -292,44 +358,44 @@ extern int rtems_telnetd_maximum_ptys;
#else
#ifndef CONFIGURE_INIT_TASK_NAME
-#define CONFIGURE_INIT_TASK_NAME rtems_build_name( 'U', 'I', '1', ' ' )
+ #define CONFIGURE_INIT_TASK_NAME rtems_build_name('U', 'I', '1', ' ')
#endif
#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
-#define CONFIGURE_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
+ #define CONFIGURE_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
#endif
#ifndef CONFIGURE_INIT_TASK_PRIORITY
-#define CONFIGURE_INIT_TASK_PRIORITY 1
+ #define CONFIGURE_INIT_TASK_PRIORITY 1
#endif
#ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
-#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
+ #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
#endif
#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
-#define CONFIGURE_INIT_TASK_ENTRY_POINT Init
+ #define CONFIGURE_INIT_TASK_ENTRY_POINT Init
#endif
#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
-#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
+ #define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
#endif
#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
-#define CONFIGURE_INIT_TASK_ARGUMENTS 0
+ #define CONFIGURE_INIT_TASK_ARGUMENTS 0
#endif
#ifdef CONFIGURE_INIT
-rtems_initialization_tasks_table Initialization_tasks[] = {
- { CONFIGURE_INIT_TASK_NAME,
- CONFIGURE_INIT_TASK_STACK_SIZE,
- CONFIGURE_INIT_TASK_PRIORITY,
- CONFIGURE_INIT_TASK_ATTRIBUTES,
- CONFIGURE_INIT_TASK_ENTRY_POINT,
- CONFIGURE_INIT_TASK_INITIAL_MODES,
- CONFIGURE_INIT_TASK_ARGUMENTS
- }
-};
+ rtems_initialization_tasks_table Initialization_tasks[] = {
+ { CONFIGURE_INIT_TASK_NAME,
+ CONFIGURE_INIT_TASK_STACK_SIZE,
+ CONFIGURE_INIT_TASK_PRIORITY,
+ CONFIGURE_INIT_TASK_ATTRIBUTES,
+ CONFIGURE_INIT_TASK_ENTRY_POINT,
+ CONFIGURE_INIT_TASK_INITIAL_MODES,
+ CONFIGURE_INIT_TASK_ARGUMENTS
+ }
+ };
#endif
#define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
@@ -356,81 +422,81 @@ rtems_initialization_tasks_table Initialization_tasks[] = {
{ NULL, NULL, NULL, NULL, NULL, NULL }
#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-#include <rtems/console.h>
+ #include <rtems/console.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#include <rtems/clockdrv.h>
+ #include <rtems/clockdrv.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-#include <rtems/timerdrv.h>
+ #include <rtems/timerdrv.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
-#include <rtems/rtc.h>
+ #include <rtems/rtc.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
-#include <rtems/watchdogdrv.h>
+ #include <rtems/watchdogdrv.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
-#include <rtems/devnull.h>
+ #include <rtems/devnull.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
/* the ide driver needs the ATA driver */
-# ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
-# define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
-# endif
-#include <libchip/ide_ctrl.h>
+ #ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+ #define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+ #endif
+ #include <libchip/ide_ctrl.h>
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
-#include <libchip/ata.h>
+ #include <libchip/ata.h>
#endif
#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
#ifdef CONFIGURE_INIT
-rtems_driver_address_table Device_drivers[] = {
-#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
- CONSOLE_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
- CLOCK_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
- RTC_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
- WATCHDOG_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
- DEVNULL_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
- IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
- ATA_DRIVER_TABLE_ENTRY,
-#endif
-#ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
- CONFIGURE_APPLICATION_EXTRA_DRIVERS,
-#endif
-#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
- NULL_DRIVER_TABLE_ENTRY
-#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
- !defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
- NULL_DRIVER_TABLE_ENTRY
-#endif
-};
+ rtems_driver_address_table Device_drivers[] = {
+ #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+ CONSOLE_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ CLOCK_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
+ RTC_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
+ WATCHDOG_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
+ DEVNULL_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
+ IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+ ATA_DRIVER_TABLE_ENTRY,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
+ CONFIGURE_APPLICATION_EXTRA_DRIVERS,
+ #endif
+ #ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
+ NULL_DRIVER_TABLE_ENTRY
+ #elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
+ !defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
+ NULL_DRIVER_TABLE_ENTRY
+ #endif
+ };
#endif
#endif /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
@@ -443,124 +509,126 @@ rtems_driver_address_table Device_drivers[] = {
#define CONFIGURE_NUMBER_OF_DRIVERS \
((sizeof(Device_drivers) / sizeof(rtems_driver_address_table)))
+/**
+ * This specifies the maximum number of device drivers that
+ * can be installed in the system at one time. It must account
+ * for both the statically and dynamically installed drivers.
+ */
#ifndef CONFIGURE_MAXIMUM_DRIVERS
-#define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
+ #define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
#endif
-/*
+/**
* Default the number of devices per device driver. This value may be
* overridden by the user.
*
- * NOTE: This configuration parameter is obsolete. Thus we will warn the
+ * @note This configuration parameter is obsolete. Thus we will warn the
* user that it is obsolete.
*/
-
#ifdef CONFIGURE_MAXIMUM_DEVICES
-#warning "CONFIGURE_MAXIMUM_DEVICES is obsolete. Do not use any longer."
+ #warning "CONFIGURE_MAXIMUM_DEVICES is obsolete. Do not use any longer."
#endif
#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
/*
* configure the priority of the ATA driver task
*/
-# ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
-# define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
-# endif
-# ifdef CONFIGURE_INIT
- rtems_task_priority ata_driver_task_priority
- = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
-# endif /* CONFIGURE_INIT */
+ #ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
+ #define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
+ #endif
+ #ifdef CONFIGURE_INIT
+ rtems_task_priority ata_driver_task_priority
+ = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
+ #endif /* CONFIGURE_INIT */
#endif
/*
* add bdbuf configuration and values for swapout task priority
*/
#ifdef CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
-#include <rtems/bdbuf.h>
-/*
- * configure the priority of the bdbuf swapout task
- */
-#ifndef CONFIGURE_SWAPOUT_TASK_PRIORITY
-#define CONFIGURE_SWAPOUT_TASK_PRIORITY SWAPOUT_TASK_DEFAULT_PRIORITY
-#endif
-#ifdef CONFIGURE_INIT
- rtems_task_priority swapout_task_priority
- = CONFIGURE_SWAPOUT_TASK_PRIORITY;
-#endif /* CONFIGURE_INIT */
-#ifndef CONFIGURE_HAS_OWN_BDBUF_TABLE
-
-#ifndef CONFIGURE_BDBUF_BUFFER_COUNT
-#define CONFIGURE_BDBUF_BUFFER_COUNT 64
-#endif /* CONFIGURE_BDBUF_BUFFER_COUNT */
-
-#ifndef CONFIGURE_BDBUF_BUFFER_SIZE
-#define CONFIGURE_BDBUF_BUFFER_SIZE 512
-#endif /* CONFIGURE_BDBUF_BUFFER_SIZE */
-#ifdef CONFIGURE_INIT
-rtems_bdbuf_config rtems_bdbuf_configuration[] = {
- {CONFIGURE_BDBUF_BUFFER_SIZE,CONFIGURE_BDBUF_BUFFER_COUNT,NULL}
-};
-int rtems_bdbuf_configuration_size =( sizeof(rtems_bdbuf_configuration)
- /sizeof(rtems_bdbuf_configuration[0]));
-#endif /* CONFIGURE_INIT */
-#endif /* CONFIGURE_HAS_OWN_BDBUF_TABLE */
+ #include <rtems/bdbuf.h>
+ /*
+ * configure the priority of the bdbuf swapout task
+ */
+ #ifndef CONFIGURE_SWAPOUT_TASK_PRIORITY
+ #define CONFIGURE_SWAPOUT_TASK_PRIORITY SWAPOUT_TASK_DEFAULT_PRIORITY
+ #endif
+ #ifdef CONFIGURE_INIT
+ rtems_task_priority swapout_task_priority = CONFIGURE_SWAPOUT_TASK_PRIORITY;
+ #endif
+ #ifndef CONFIGURE_HAS_OWN_BDBUF_TABLE
+ #ifndef CONFIGURE_BDBUF_BUFFER_COUNT
+ #define CONFIGURE_BDBUF_BUFFER_COUNT 64
+ #endif
+
+ #ifndef CONFIGURE_BDBUF_BUFFER_SIZE
+ #define CONFIGURE_BDBUF_BUFFER_SIZE 512
+ #endif
+ #ifdef CONFIGURE_INIT
+ rtems_bdbuf_config rtems_bdbuf_configuration[] = {
+ {CONFIGURE_BDBUF_BUFFER_SIZE, CONFIGURE_BDBUF_BUFFER_COUNT, NULL}
+ };
+ int rtems_bdbuf_configuration_size =( sizeof(rtems_bdbuf_configuration)
+ /sizeof(rtems_bdbuf_configuration[0]));
+ #endif /* CONFIGURE_INIT */
+ #endif /* CONFIGURE_HAS_OWN_BDBUF_TABLE */
#endif /* CONFIGURE_APPLICATION_NEEDS_LIBBLOCK */
#if defined(RTEMS_MULTIPROCESSING)
-/*
- * Default Multiprocessing Configuration Table. The defaults are
- * appropriate for most of the RTEMS Multiprocessor Test Suite. Each
- * value may be overridden within each test to customize the environment.
- */
+ /*
+ * Default Multiprocessing Configuration Table. The defaults are
+ * appropriate for most of the RTEMS Multiprocessor Test Suite. Each
+ * value may be overridden within each test to customize the environment.
+ */
-#ifdef CONFIGURE_MP_APPLICATION
-#ifndef CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
+ #ifdef CONFIGURE_MP_APPLICATION
+ #ifndef CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
-#ifndef CONFIGURE_MP_NODE_NUMBER
-#define CONFIGURE_MP_NODE_NUMBER NODE_NUMBER
-#endif
+ #ifndef CONFIGURE_MP_NODE_NUMBER
+ #define CONFIGURE_MP_NODE_NUMBER NODE_NUMBER
+ #endif
-#ifndef CONFIGURE_MP_MAXIMUM_NODES
-#define CONFIGURE_MP_MAXIMUM_NODES 2
-#endif
+ #ifndef CONFIGURE_MP_MAXIMUM_NODES
+ #define CONFIGURE_MP_MAXIMUM_NODES 2
+ #endif
-#ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
-#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS 32
-#endif
+ #ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
+ #define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS 32
+ #endif
-#ifndef CONFIGURE_MP_MAXIMUM_PROXIES
-#define CONFIGURE_MP_MAXIMUM_PROXIES 32
-#endif
+ #ifndef CONFIGURE_MP_MAXIMUM_PROXIES
+ #define CONFIGURE_MP_MAXIMUM_PROXIES 32
+ #endif
-#ifndef CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
-#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK 0
-#endif
+ #ifndef CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
+ #define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK 0
+ #endif
-#ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
-#include <mpci.h>
-#define CONFIGURE_MP_MPCI_TABLE_POINTER &MPCI_table
-#endif
+ #ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
+ #include <mpci.h>
+ #define CONFIGURE_MP_MPCI_TABLE_POINTER &MPCI_table
+ #endif
-#ifdef CONFIGURE_INIT
-rtems_multiprocessing_table Multiprocessing_configuration = {
- CONFIGURE_MP_NODE_NUMBER, /* local node number */
- CONFIGURE_MP_MAXIMUM_NODES, /* maximum # nodes in system */
- CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS, /* maximum # global objects */
- CONFIGURE_MP_MAXIMUM_PROXIES, /* maximum # proxies */
- CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK, /* MPCI task stack > minimum */
- CONFIGURE_MP_MPCI_TABLE_POINTER /* pointer to MPCI config table */
-};
-#endif
+ #ifdef CONFIGURE_INIT
+ rtems_multiprocessing_table Multiprocessing_configuration = {
+ CONFIGURE_MP_NODE_NUMBER, /* local node number */
+ CONFIGURE_MP_MAXIMUM_NODES, /* maximum # nodes */
+ CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS, /* maximum # global objects */
+ CONFIGURE_MP_MAXIMUM_PROXIES, /* maximum # proxies */
+ CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK, /* MPCI stack > minimum */
+ CONFIGURE_MP_MPCI_TABLE_POINTER /* ptr to MPCI config table */
+ };
+ #endif
-#define CONFIGURE_MULTIPROCESSING_TABLE &Multiprocessing_configuration
+ #define CONFIGURE_MULTIPROCESSING_TABLE &Multiprocessing_configuration
-#endif /* CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE */
+ #endif /* CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE */
-#else
+ #else
-#define CONFIGURE_MULTIPROCESSING_TABLE NULL
+ #define CONFIGURE_MULTIPROCESSING_TABLE NULL
-#endif /* CONFIGURE_MP_APPLICATION */
+ #endif /* CONFIGURE_MP_APPLICATION */
#endif /* RTEMS_MULTIPROCESSING */
/*
@@ -569,57 +637,62 @@ rtems_multiprocessing_table Multiprocessing_configuration = {
#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
-#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
-#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA NULL
-#endif
+ #ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
+ #define CONFIGURE_EXECUTIVE_RAM_WORK_AREA NULL
+ #endif
-#ifndef CONFIGURE_MAXIMUM_TASKS
-#define CONFIGURE_MAXIMUM_TASKS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_TASKS
+ #define CONFIGURE_MAXIMUM_TASKS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_TIMERS
-#define CONFIGURE_MAXIMUM_TIMERS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_TASK_VARIABLES
+ #define CONFIGURE_MAXIMUM_TASK_VARIABLES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_SEMAPHORES
-#define CONFIGURE_MAXIMUM_SEMAPHORES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_TIMERS
+ #define CONFIGURE_MAXIMUM_TIMERS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
-#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_SEMAPHORES
+ #define CONFIGURE_MAXIMUM_SEMAPHORES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_PARTITIONS
-#define CONFIGURE_MAXIMUM_PARTITIONS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+ #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_REGIONS
-#define CONFIGURE_MAXIMUM_REGIONS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_PARTITIONS
+ #define CONFIGURE_MAXIMUM_PARTITIONS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_PORTS
-#define CONFIGURE_MAXIMUM_PORTS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_REGIONS
+ #define CONFIGURE_MAXIMUM_REGIONS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_PERIODS
-#define CONFIGURE_MAXIMUM_PERIODS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_PORTS
+ #define CONFIGURE_MAXIMUM_PORTS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_BARRIERS
-#define CONFIGURE_MAXIMUM_BARRIERS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_PERIODS
+ #define CONFIGURE_MAXIMUM_PERIODS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
-#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_BARRIERS
+ #define CONFIGURE_MAXIMUM_BARRIERS 0
+ #endif
-#ifndef CONFIGURE_MICROSECONDS_PER_TICK
-#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
-#endif
+ #ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
+ #define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0
+ #endif
-#ifndef CONFIGURE_TICKS_PER_TIMESLICE
-#define CONFIGURE_TICKS_PER_TIMESLICE 50
-#endif
+ #ifndef CONFIGURE_MICROSECONDS_PER_TICK
+ #define CONFIGURE_MICROSECONDS_PER_TICK \
+ RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
+ #endif
+
+ #ifndef CONFIGURE_TICKS_PER_TIMESLICE
+ #define CONFIGURE_TICKS_PER_TIMESLICE 50
+ #endif
/*
* Initial Extension Set
@@ -664,371 +737,402 @@ rtems_multiprocessing_table Multiprocessing_configuration = {
#ifdef RTEMS_POSIX_API
-#include <sys/types.h>
-#include <signal.h>
-#include <limits.h>
-#include <mqueue.h>
-#include <rtems/posix/barrier.h>
-#include <rtems/posix/cond.h>
-#include <rtems/posix/mqueue.h>
-#include <rtems/posix/mutex.h>
-#include <rtems/posix/key.h>
-#include <rtems/posix/psignal.h>
-#include <rtems/posix/rwlock.h>
-#include <rtems/posix/semaphore.h>
-#include <rtems/posix/spinlock.h>
-#include <rtems/posix/threadsup.h>
-#include <rtems/posix/timer.h>
+ #include <sys/types.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <mqueue.h>
+ #include <rtems/posix/barrier.h>
+ #include <rtems/posix/cond.h>
+ #include <rtems/posix/mqueue.h>
+ #include <rtems/posix/mutex.h>
+ #include <rtems/posix/key.h>
+ #include <rtems/posix/psignal.h>
+ #include <rtems/posix/rwlock.h>
+ #include <rtems/posix/semaphore.h>
+ #include <rtems/posix/spinlock.h>
+ #include <rtems/posix/threadsup.h>
+ #include <rtems/posix/timer.h>
+
+ #ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
+ #define CONFIGURE_MAXIMUM_POSIX_THREADS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
-#define CONFIGURE_MAXIMUM_POSIX_THREADS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
+ #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
-#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
+ #define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
-#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
+ #define CONFIGURE_MAXIMUM_POSIX_KEYS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
-#define CONFIGURE_MAXIMUM_POSIX_KEYS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
+ #define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
-#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+ #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
-#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+ #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
-#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+ #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
-#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_BARRIERS
+ #define CONFIGURE_MAXIMUM_POSIX_BARRIERS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_BARRIERS
-#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
+ #define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
-#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 0
-#endif
+ #ifndef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
+ #define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
-#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 0
-#endif
+ #ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
-#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
+ #ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
-#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
+ /*
+ * The user is defining their own table information and setting the
+ * appropriate variables for the POSIX Initialization Thread Table.
+ */
-/*
- * The user is defining their own table information and setting the
- * appropriate variables for the POSIX Initialization Thread Table.
- */
+ #else
-#else
+ #ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+ #define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT POSIX_Init
+ #endif
-#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
-#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT POSIX_Init
-#endif
+ #ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+ #define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE \
+ (RTEMS_MINIMUM_STACK_SIZE * 2)
+ #endif
-#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
-#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
-#endif
+ #ifdef CONFIGURE_INIT
+ posix_initialization_threads_table POSIX_Initialization_threads[] = {
+ { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
+ CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
+ };
+ #endif
-#ifdef CONFIGURE_INIT
-posix_initialization_threads_table POSIX_Initialization_threads[] = {
- { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
- CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
-};
-#endif
+ #define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME \
+ POSIX_Initialization_threads
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
+ #define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
+ sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
+ sizeof(posix_initialization_threads_table)
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
- sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
- sizeof(posix_initialization_threads_table)
+ #endif /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
-#endif /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
+ #else /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
-#else /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
+ #define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
+ #define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
-#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
+ #endif
-#endif
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
+ ( \
+ sizeof (POSIX_API_Control) + \
+ (sizeof (void *) * (CONFIGURE_MAXIMUM_POSIX_KEYS)) \
+ )
-#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
- ( \
- sizeof (POSIX_API_Control) + \
- (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
- )
+ #define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
+ _Configure_Object_RAM(_mutexes, sizeof(POSIX_Mutex_Control) )
-#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
- ((_mutexes) * \
- ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
- ((_condition_variables) * \
- ( sizeof(POSIX_Condition_variables_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
- ((_keys) * \
- ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
- ((_timers) * (sizeof(POSIX_Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
-
-#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
- ((_queued_signals) * \
- ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
- ((_message_queues) * \
- ( sizeof( POSIX_Message_queue_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
- ((_semaphores) * \
- ( sizeof( POSIX_Semaphore_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(_barriers) \
- ((_barriers) * \
- ( sizeof( POSIX_Barrier_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS(_spinlocks) \
- ((_spinlocks) * \
- ( sizeof( POSIX_Spinlock_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS(_rwlocks) \
- ((_rwlocks) * \
- ( sizeof( POSIX_RWLock_Control) + \
- CONFIGURE_OBJECT_TABLE_STUFF + \
- NAME_MAX ) )
-
-#define CONFIGURE_MEMORY_FOR_POSIX \
- ( \
- CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
- CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
- CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
- CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
- CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
- CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
- CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
- CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
- CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
- CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
- CONFIGURE_MEMORY_FOR_POSIX_BARRIERS( CONFIGURE_MAXIMUM_POSIX_BARRIERS ) + \
- CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS( \
- CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ) + \
- CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS( \
- CONFIGURE_MAXIMUM_POSIX_RWLOCKS ) + \
- CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ) + \
- (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
- )
-#else
+ #define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
+ _Configure_Object_RAM(_condition_variables, \
+ sizeof(POSIX_Condition_variables_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
+ _Configure_Object_RAM(_keys, sizeof(POSIX_Keys_Control) )
-#define CONFIGURE_MAXIMUM_POSIX_THREADS 0
-#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
-#define CONFIGURE_MEMORY_FOR_POSIX 0
+ #define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
+ _Configure_Object_RAM(_timers, sizeof(POSIX_Timer_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
+ _Configure_From_workspace( \
+ (_queued_signals) * (sizeof(POSIX_signals_Siginfo_node)) )
+
+ /**
+ * Account for the object control structures plus the name
+ * of the object to be duplicated.
+ */
+ #define _Configure_POSIX_Named_Object_RAM(_number, _size) \
+ _Configure_Object_RAM( (_number), _size ) + \
+ ((_number) + _Configure_From_workspace(NAME_MAX) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
+ _Configure_POSIX_Named_Object_RAM( \
+ _message_queues, sizeof(POSIX_Message_queue_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
+ _Configure_POSIX_Named_Object_RAM( \
+ _semaphores, sizeof(POSIX_Semaphore_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(_barriers) \
+ _Configure_Object_RAM(_barriers, sizeof(POSIX_Barrier_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS(_spinlocks) \
+ _Configure_Object_RAM(_spinlocks, sizeof(POSIX_Spinlock_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS(_rwlocks) \
+ _Configure_Object_RAM(_rwlocks, sizeof(POSIX_RWLock_Control) )
+
+ #define CONFIGURE_MEMORY_FOR_POSIX \
+ ( \
+ CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
+ CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
+ CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
+ CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
+ CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(CONFIGURE_MAXIMUM_POSIX_BARRIERS) + \
+ CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS( \
+ CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS( \
+ CONFIGURE_MAXIMUM_POSIX_RWLOCKS ) + \
+ CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ) + \
+ (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
+ )
+#else
+ #define CONFIGURE_MAXIMUM_POSIX_THREADS 0
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
+ #define CONFIGURE_MEMORY_FOR_POSIX 0
#endif /* RTEMS_POSIX_API */
#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
-#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE 0
+ #define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE 0
#endif
/*
- * ITRON API Configuration Parameters
+ * This block of defines are for applications which use GNAT/RTEMS.
+ * GNAT implements each Ada task as a POSIX thread.
*/
+#ifdef CONFIGURE_GNAT_RTEMS
-#ifdef RTEMS_ITRON_API
-
-#include <rtems/itron.h>
-#include <rtems/itron/config.h>
-#include <rtems/itron/eventflags.h>
-#include <rtems/itron/fmempool.h>
-#include <rtems/itron/mbox.h>
-#include <rtems/itron/msgbuffer.h>
-#include <rtems/itron/port.h>
-#include <rtems/itron/semaphore.h>
-#include <rtems/itron/task.h>
-#include <rtems/itron/vmempool.h>
-
-#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
-#define CONFIGURE_MAXIMUM_ITRON_TASKS 0
-#endif
-
-#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
-#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES 0
-#endif
-
-#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
-#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS 0
-#endif
-
-#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
-#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES 0
-#endif
+ /**
+ * The GNAT run-time needs something less than (10) POSIX mutexes.
+ * We may be able to get by with less but why bother.
+ */
+ #define CONFIGURE_GNAT_MUTEXES 10
-#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
-#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS 0
-#endif
+ /**
+ * This is the maximum number of Ada tasks which can be concurrently
+ * in existence. Twenty (20) are required to run all tests in the
+ * ACATS (formerly ACVC).
+ */
+ #ifndef CONFIGURE_MAXIMUM_ADA_TASKS
+ #define CONFIGURE_MAXIMUM_ADA_TASKS 20
+ #endif
-#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
-#define CONFIGURE_MAXIMUM_ITRON_PORTS 0
-#endif
+ /**
+ * This is the number of non-Ada tasks which invoked Ada code.
+ */
+ #ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
+ #define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
+ #endif
-#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
-#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS 0
-#endif
+ /**
+ * Ada tasks are allocated twice the minimum stack space.
+ */
+ #define CONFIGURE_ADA_TASKS_STACK \
+ (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
-#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
-#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS 0
+#else
+ #define CONFIGURE_GNAT_MUTEXES 0
+ #define CONFIGURE_MAXIMUM_ADA_TASKS 0
+ #define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
+ #define CONFIGURE_ADA_TASKS_STACK 0
#endif
-#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
-
-#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
-
/*
- * The user is defining their own table information and setting the
- * appropriate variables for the ITRON Initialization Task Table.
+ * ITRON API Configuration Parameters
*/
-#else
+#ifdef RTEMS_ITRON_API
-#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
-#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT ITRON_Init
-#endif
+ #include <rtems/itron.h>
+ #include <rtems/itron/config.h>
+ #include <rtems/itron/eventflags.h>
+ #include <rtems/itron/fmempool.h>
+ #include <rtems/itron/mbox.h>
+ #include <rtems/itron/msgbuffer.h>
+ #include <rtems/itron/port.h>
+ #include <rtems/itron/semaphore.h>
+ #include <rtems/itron/task.h>
+ #include <rtems/itron/vmempool.h>
+
+ #ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
+ #define CONFIGURE_MAXIMUM_ITRON_TASKS 0
+ #endif
-#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
-#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES TA_HLNG
-#endif
+ #ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
+ #define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES 0
+ #endif
-#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
-#define CONFIGURE_ITRON_INIT_TASK_PRIORITY 1
-#endif
+ #ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
+ #define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS 0
+ #endif
-#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
-#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
-#endif
+ #ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
+ #define CONFIGURE_MAXIMUM_ITRON_MAILBOXES 0
+ #endif
-#ifdef CONFIGURE_INIT
-itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
- { 1, /* ID */
- { (VP) 0, /* exinfo */
- CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES, /* task attributes */
- CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
- CONFIGURE_ITRON_INIT_TASK_PRIORITY, /* initial task priority */
- CONFIGURE_ITRON_INIT_TASK_STACK_SIZE /* stack size */
- }
- }
-};
-#endif
+ #ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
+ #define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS 0
+ #endif
-#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
+ #ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
+ #define CONFIGURE_MAXIMUM_ITRON_PORTS 0
+ #endif
-#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
- sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
- sizeof(itron_initialization_tasks_table)
+ #ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
+ #define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS 0
+ #endif
-#endif /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
+ #ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
+ #define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS 0
+ #endif
-#else /* CONFIGURE_ITRON_INIT_TASK_TABLE */
+ #ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
-#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
-#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
-#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE 0
+ #ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
-#endif
+ /*
+ * The user is defining their own table information and setting the
+ * appropriate variables for the ITRON Initialization Task Table.
+ */
-#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
- ( \
- sizeof (ITRON_API_Control) \
- )
+ #else
-#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
- ((_semaphores) * \
- ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
+ #define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT ITRON_Init
+ #endif
-#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
- ((_eventflags) * \
- ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
+ #define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES TA_HLNG
+ #endif
-#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
- ((_mailboxes) * \
- ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
+ #define CONFIGURE_ITRON_INIT_TASK_PRIORITY 1
+ #endif
-#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
- ((_message_buffers) * \
- ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
+ #define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
+ #endif
-#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
- ((_ports) * \
- ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #ifdef CONFIGURE_INIT
+ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
+ { 1, /* ID */
+ { (VP) 0, /* exinfo */
+ CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES, /* task attributes */
+ CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
+ CONFIGURE_ITRON_INIT_TASK_PRIORITY, /* initial task priority */
+ CONFIGURE_ITRON_INIT_TASK_STACK_SIZE /* stack size */
+ }
+ }
+ };
+ #endif
-#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
- ((_memory_pools) * \
- (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
+ #define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
-#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
- ((_fixed_memory_pools) * \
- ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ #define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
+ sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
+ sizeof(itron_initialization_tasks_table)
+ #endif /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
-#define CONFIGURE_MEMORY_FOR_ITRON \
- ( \
- CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
- CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
- CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
- CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
- CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
- CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
- CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
- CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
- CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
- CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
- CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
- CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
- CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
- CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
- CONFIGURE_ITRON_INIT_TASK_STACK_SIZE \
- )
+ #else /* CONFIGURE_ITRON_INIT_TASK_TABLE */
+
+ #define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
+ #define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
+ #define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE 0
+
+ #endif
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API 0
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
+ _Configure_Object_RAM(_semaphores, sizeof(ITRON_Semaphore_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
+ _Configure_Object_RAM(_eventflags, sizeof(ITRON_Eventflags_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
+ _Configure_Object_RAM(_mailboxes, sizeof(ITRON_Mailbox_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
+ _Configure_Object_RAM(_message_buffers, \
+ sizeof(ITRON_Message_buffer_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
+ _Configure_Object_RAM(_ports, sizeof(ITRON_Port_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
+ _Configure_Object_RAM( \
+ _memory_pools, sizeof(ITRON_Variable_memory_pool_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
+ _Configure_Object_RAM( \
+ _fixed_memory_pools, sizeof(ITRON_Fixed_memory_pool_Control))
+
+ #define CONFIGURE_MEMORY_FOR_ITRON \
+ ( \
+ CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
+ CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
+ CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
+ CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
+ CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
+ CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
+ CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
+ CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
+ CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
+ CONFIGURE_ITRON_INIT_TASK_STACK_SIZE \
+ )
#else
-#define CONFIGURE_MAXIMUM_ITRON_TASKS 0
-#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES 0
-#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS 0
-#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES 0
-#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS 0
-#define CONFIGURE_MAXIMUM_ITRON_PORTS 0
-#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS 0
-#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS 0
-#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API 0
-#define CONFIGURE_MEMORY_FOR_ITRON 0
+ #define CONFIGURE_MAXIMUM_ITRON_TASKS 0
+ #define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES 0
+ #define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS 0
+ #define CONFIGURE_MAXIMUM_ITRON_MAILBOXES 0
+ #define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS 0
+ #define CONFIGURE_MAXIMUM_ITRON_PORTS 0
+ #define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS 0
+ #define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS 0
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API 0
+ #define CONFIGURE_MEMORY_FOR_ITRON 0
#endif /* RTEMS_ITRON_API */
+#if defined(RTEMS_NEWLIB)
+ #include <reent.h>
+
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
+#else
+ #define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
+#endif
/*
* Calculate the RAM size based on the maximum number of objects configured.
@@ -1036,76 +1140,75 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
-#define CONFIGURE_OBJECT_TABLE_STUFF \
- ( sizeof(Objects_Control *) )
-
-#if defined(RTEMS_NEWLIB)
-#include <reent.h>
+/**
+ * Account for allocating the following per object
+ * + array of object control structures
+ * + local pointer table -- pointer per object plus a zero'th
+ * entry in the local pointer table.
+ */
-#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
-#else
-#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
-#endif
+#define CONFIGURE_MEMORY_FOR_TASKS(_tasks, _number_FP_tasks) \
+ ( \
+ _Configure_Object_RAM(_tasks, sizeof(Thread_Control)) + \
+ ((_tasks) * \
+ (_Configure_From_workspace(STACK_MINIMUM_SIZE) + \
+ _Configure_From_workspace(sizeof(RTEMS_API_Control)) + \
+ _Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY) + \
+ _Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API) + \
+ _Configure_From_workspace(CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API))) + \
+ _Configure_From_workspace((_number_FP_tasks) * CONTEXT_FP_SIZE) \
+ )
-#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
- (((_tasks) + 1 ) * \
- ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
- STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
- CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
- CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
- CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY + \
- CONFIGURE_OBJECT_TABLE_STUFF)) \
- )
+/**
+ * This macro calculates the memory required for task variables.
+ *
+ * @note Each task variable is individually allocated from the Workspace.
+ * Hence, we do the multiplication on the configured size.
+ */
+#define CONFIGURE_MEMORY_FOR_TASK_VARIABLES(_task_variables) \
+ (_task_variables) * _Configure_From_workspace(sizeof(rtems_task_variable_t))
#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
- ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_timers, sizeof(Timer_Control) )
#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
- ((_semaphores) * \
- ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_semaphores, sizeof(Semaphore_Control) )
#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
- ( (_queues) * \
- ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_queues, sizeof(Message_queue_Control) )
#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
- ( (_partitions) * \
- ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_partitions, sizeof(Partition_Control) )
#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
- ( (_regions) * \
- ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_regions, sizeof(Region_Control) )
#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
- ( (_ports) * \
- ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_ports, sizeof(Dual_ported_memory_Control) )
#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
- ( (_periods) * \
- ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_periods, sizeof(Rate_monotonic_Control) )
#define CONFIGURE_MEMORY_FOR_BARRIERS(_barriers) \
- ( (_barriers) * \
- ( sizeof(Barrier_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_barriers, sizeof(Barrier_Control) )
#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
- ( (_extensions) * \
- ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
+ _Configure_Object_RAM(_extensions, sizeof(Extension_Control) )
#ifdef CONFIGURE_MP_APPLICATION
#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
- ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) ) )
+ _Configure_Object_RAM((_proxies) + 1, sizeof(Thread_Proxy_control) )
#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
- ((_global_objects) * ( sizeof(Objects_MP_Control) ) )
+ _Configure_Object_RAM((_global_objects), sizeof(Objects_MP_Control))
#define CONFIGURE_MEMORY_FOR_MP \
( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
- CONFIGURE_MEMORY_FOR_TASKS(1) + \
+ CONFIGURE_MEMORY_FOR_TASKS(1, 1) + \
CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK \
)
@@ -1117,40 +1220,90 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
#endif
-/*
+/**
* This is so we can account for tasks with stacks greater than minimum
* size. This is in bytes.
*/
#ifndef CONFIGURE_EXTRA_TASK_STACKS
-#define CONFIGURE_EXTRA_TASK_STACKS 0
+ #define CONFIGURE_EXTRA_TASK_STACKS 0
#endif
-/*
- * Account for pending message buffers in bytes.
+/**
+ * The following macro is used to calculate the memory allocated by RTEMS
+ * for the message buffers associated with a particular message queue.
+ * There is a fixed amount of overhead per message.
+ */
+#define CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(_messages, _size) \
+ _Configure_From_workspace( \
+ (_messages) * ((_size) + sizeof(CORE_message_queue_Buffer_control)))
+
+/**
+ * This macros is set to the amount of memory required for pending message
+ * buffers in bytes. It should be constructed by adding together a
+ * set of values determined by CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE.
*/
#ifndef CONFIGURE_MESSAGE_BUFFER_MEMORY
-#define CONFIGURE_MESSAGE_BUFFER_MEMORY 0
+ #define CONFIGURE_MESSAGE_BUFFER_MEMORY 0
#endif
-/*
- * Catch all for extra memory in case something broken and underestimates.
- * Historically this was used for message buffers.
+/**
+ * This macro is available just in case the confdefs.h file underallocates
+ * memory for a particular application. This lets the user add some extra
+ * memory in case something broken and underestimates.
+ *
+ * It is also possible for cases where confdefs.h overallocates memory,
+ * you could substract memory from the allocated. The estimate is just
+ * that, an estimate, and assumes worst case alignment and padding on
+ * each allocated element. So in some cases it could be too conservative.
+ *
+ * @note Historically this was used for message buffers.
*/
#ifndef CONFIGURE_MEMORY_OVERHEAD
-#define CONFIGURE_MEMORY_OVERHEAD 0
+ #define CONFIGURE_MEMORY_OVERHEAD 0
+#endif
+
+/**
+ * On architectures that use Simple Vectored Interrupts, it is RTEMS
+ * responsibility to allocate the vector table. This avoids reserving
+ * the memory on architectures that use the Programmable Interrupt
+ * Controller Vectored Interrupts.
+ */
+#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE)
+ /*
+ * This is a (hopefully) temporary hack. On the mips, the number of
+ * vectors is NOT statically defined. But it has to be statically
+ * defined for this to work. This is an issue looking for a nice
+ * solution.
+ */
+ #if defined(__mips__)
+ #define CONFIGURE_INTERRUPT_VECTOR_TABLE (sizeof(ISR_Handler_entry) * 256)
+ #else
+ #define CONFIGURE_INTERRUPT_VECTOR_TABLE \
+ (sizeof(ISR_Handler_entry) * ISR_NUMBER_OF_VECTORS)
+ #endif
+#else
+ #define CONFIGURE_INTERRUPT_VECTOR_TABLE 0
#endif
+/**
+ * RTEMS uses one instance of an internal mutex class. This accounts
+ * for that mutex
+ */
#define CONFIGURE_API_MUTEX_MEMORY \
- ( (1) * \
- ( sizeof(API_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) \
- )
+ _Configure_Object_RAM(1, sizeof(API_Mutex_Control))
+/**
+ * This macro accounts for general RTEMS system overhead.
+ */
#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
- ( CONFIGURE_MEMORY_FOR_TASKS(1) + /* IDLE */ \
- ((PRIORITY_MAXIMUM+1) * sizeof(Chain_Control)) + /* Ready chains */ \
- 256 + /* name/ptr table overhead */ \
- CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
- CONFIGURE_API_MUTEX_MEMORY /* allocation mutex */ \
+ ( \
+ CONFIGURE_MEMORY_FOR_TASKS(1, 0) + /* IDLE and stack */ \
+ (CONFIGURE_IDLE_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
+ _Configure_From_workspace( /* Ready chains */ \
+ ((PRIORITY_MAXIMUM+1) * sizeof(Chain_Control)) ) + \
+ CONFIGURE_INTERRUPT_VECTOR_TABLE + /* interrupt vectors */ \
+ CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
+ CONFIGURE_API_MUTEX_MEMORY /* allocation mutex */ \
)
/*
@@ -1158,36 +1311,76 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
* may have requested.
*/
-#ifdef RTEMS_POSIX_API
-#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
- (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
+/**
+ * This accounts for any extra memory required by the Classic API
+ * Initialization Task.
+ */
+#if (CONFIGURE_INIT_TASK_STACK_SIZE > RTEMS_MINIMUM_STACK_SIZE)
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART \
+ (CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
#else
-#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART 0
#endif
-#ifdef RTEMS_ITRON_API
-#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART \
- (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
+
+/**
+ * This accounts for any extra memory required by the POSIX API
+ * Initialization Thread.
+ */
+#if defined(RTEMS_POSIX_API) && \
+ (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE > RTEMS_MINIMUM_STACK_SIZE)
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
+ (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
+#else
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
+#endif
+
+/**
+ * This accounts for any extra memory required by the ITRON API
+ * Initialization Task.
+ */
+#if defined(RTEMS_ITRON_API) && \
+ (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE > RTEMS_MINIMUM_STACK_SIZE)
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART \
+ (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
#else
-#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART 0
+ #define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART 0
#endif
+/**
+ * This macro provides a summation of the various initialization task
+ * and thread stack requirements.
+ */
#define CONFIGURE_INITIALIZATION_THREADS_STACKS \
- ((CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
+ (CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART + \
CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART + \
CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART)
-/*
- * POSIX Threads have a default stack size of 2x minimum. The code
- * below CONFIGURE_MEMORY_FOR_TASKS(...) takes this into account.
+/**
+ * This macro provides a summation of the various task and thread
+ * requirements.
*/
-#define CONFIGURE_EXECUTIVE_RAM_SIZE \
-(( CONFIGURE_MEMORY_FOR_POSIX + \
- CONFIGURE_MEMORY_FOR_ITRON + \
- CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
- CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
- CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
- (CONFIGURE_MAXIMUM_POSIX_THREADS * RTEMS_MINIMUM_STACK_SIZE ) + \
- CONFIGURE_INITIALIZATION_THREADS_STACKS + \
+#define CONFIGURE_TOTAL_TASKS_AND_THREADS \
+ (CONFIGURE_MAXIMUM_TASKS + \
+ CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
+ CONFIGURE_MAXIMUM_ITRON_TASKS \
+ )
+
+/**
+ * This macro reserves the memory required by the statically configured
+ * user extensions.
+ */
+#define CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS \
+ _Configure_From_workspace( \
+ (CONFIGURE_NEWLIB_EXTENSION + CONFIGURE_STACK_CHECKER_EXTENSION) * \
+ sizeof(User_extensions_Control) \
+ )
+
+/**
+ * This macro provides a summation of the memory required by the
+ * Classic API as configured.
+ */
+#define CONFIGURE_MEMORY_FOR_CLASSIC \
+ (CONFIGURE_MEMORY_FOR_TASK_VARIABLES(CONFIGURE_MAXIMUM_TASK_VARIABLES) + \
CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
@@ -1197,130 +1390,151 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
CONFIGURE_MEMORY_FOR_BARRIERS(CONFIGURE_MAXIMUM_BARRIERS) + \
- CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
- CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
- CONFIGURE_STACK_CHECKER_EXTENSION ) + \
- CONFIGURE_MEMORY_FOR_MP + \
+ CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(CONFIGURE_MAXIMUM_USER_EXTENSIONS) \
+ )
+
+#if 1 && defined(CONFIGURE_INIT)
+ /**
+ * This is a debug mechanism, so if you need to, the executable will
+ * have a structure with various partial values. Add to this as you
+ * need to. Viewing this structure in gdb combined with dumping
+ * the Configuration structures generated should help a lot in tracing
+ * down errors and analyzing where over and under allocations are.
+ */
+ typedef struct {
+ uint32_t Classic;
+ uint32_t ITRON;
+ uint32_t POSIX;
+ uint32_t TASKS;
+ uint32_t INIT_TASK_STACKS;
+ } Configuration_Debug_t;
+
+ Configuration_Debug_t Configuration_Memory_Debug = {
+ CONFIGURE_MEMORY_FOR_CLASSIC, /* MEMORY_CLASSIC */
+ CONFIGURE_MEMORY_FOR_ITRON, /* MEMORY_ITRON */
+ CONFIGURE_MEMORY_FOR_POSIX, /* MEMORY_POSIX */
+ CONFIGURE_MEMORY_FOR_TASKS( /* MEMORY_TASKS */
+ CONFIGURE_TOTAL_TASKS_AND_THREADS, CONFIGURE_TOTAL_TASKS_AND_THREADS),
+ CONFIGURE_INITIALIZATION_THREADS_STACKS /* INIT_TASK_STACKS */
+ };
+#endif
+
+/**
+ * This calculates the memory required for the executive workspace.
+ */
+#define CONFIGURE_EXECUTIVE_RAM_SIZE \
+(( \
CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
+ CONFIGURE_MEMORY_FOR_TASKS( \
+ CONFIGURE_TOTAL_TASKS_AND_THREADS, CONFIGURE_TOTAL_TASKS_AND_THREADS) + \
+ CONFIGURE_MEMORY_FOR_CLASSIC + \
+ CONFIGURE_MEMORY_FOR_POSIX + \
+ (CONFIGURE_MAXIMUM_POSIX_THREADS * RTEMS_MINIMUM_STACK_SIZE ) + \
+ CONFIGURE_MEMORY_FOR_ITRON + \
+ CONFIGURE_INITIALIZATION_THREADS_STACKS + \
+ CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS + \
+ CONFIGURE_MEMORY_FOR_MP + \
CONFIGURE_MESSAGE_BUFFER_MEMORY + \
(CONFIGURE_MEMORY_OVERHEAD * 1024) + \
(CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
) & ~0x7)
#endif
-#ifdef CONFIGURE_GNAT_RTEMS
-#define CONFIGURE_GNAT_MUTEXES 10
-/* GNAT/RTEMS provides an optimized Ada self and does not use POSIX Keys */
-#define CONFIGURE_GNAT_KEYS 0
-
-/* 20 are required to run all tests in the ACVC */
-#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
-#define CONFIGURE_MAXIMUM_ADA_TASKS 20
-#endif
-
-/* This is the number of non-Ada tasks which invoked Ada code. */
-#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
-#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
-#endif
-
-/* Ada tasks are allocated twice the minimum stack space */
-#define CONFIGURE_ADA_TASKS_STACK \
- (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
-
-#else
-#define CONFIGURE_GNAT_MUTEXES 0
-#define CONFIGURE_GNAT_KEYS 0
-#define CONFIGURE_MAXIMUM_ADA_TASKS 0
-#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
-#define CONFIGURE_ADA_TASKS_STACK 0
-#endif
-
-
#ifdef CONFIGURE_INIT
+ /**
+ * This is the Classic API Configuration Table.
+ */
+ rtems_api_configuration_table Configuration_RTEMS_API = {
+ CONFIGURE_MAXIMUM_TASKS,
+ CONFIGURE_MAXIMUM_TIMERS,
+ CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
+ CONFIGURE_TERMIOS_SEMAPHORES,
+ CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
+ CONFIGURE_MAXIMUM_PARTITIONS,
+ CONFIGURE_MAXIMUM_REGIONS,
+ CONFIGURE_MAXIMUM_PORTS,
+ CONFIGURE_MAXIMUM_PERIODS,
+ CONFIGURE_MAXIMUM_BARRIERS,
+ CONFIGURE_INIT_TASK_TABLE_SIZE,
+ CONFIGURE_INIT_TASK_TABLE
+ };
-rtems_api_configuration_table Configuration_RTEMS_API = {
- CONFIGURE_MAXIMUM_TASKS,
- CONFIGURE_MAXIMUM_TIMERS,
- CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
- CONFIGURE_TERMIOS_SEMAPHORES,
- CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
- CONFIGURE_MAXIMUM_PARTITIONS,
- CONFIGURE_MAXIMUM_REGIONS,
- CONFIGURE_MAXIMUM_PORTS,
- CONFIGURE_MAXIMUM_PERIODS,
- CONFIGURE_MAXIMUM_BARRIERS,
- CONFIGURE_INIT_TASK_TABLE_SIZE,
- CONFIGURE_INIT_TASK_TABLE
-};
+ #ifdef RTEMS_POSIX_API
+ /**
+ * This is the POSIX API Configuration Table.
+ */
+ posix_api_configuration_table Configuration_POSIX_API = {
+ CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
+ CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
+ CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
+ CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
+ CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
+ CONFIGURE_MAXIMUM_POSIX_KEYS,
+ CONFIGURE_MAXIMUM_POSIX_TIMERS,
+ CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
+ CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
+ CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
+ CONFIGURE_MAXIMUM_POSIX_BARRIERS,
+ CONFIGURE_MAXIMUM_POSIX_RWLOCKS,
+ CONFIGURE_MAXIMUM_POSIX_SPINLOCKS,
+ CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
+ CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
+ };
+ #endif
-#ifdef RTEMS_POSIX_API
-posix_api_configuration_table Configuration_POSIX_API = {
- CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
- CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
- CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
- CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
- CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
- CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
- CONFIGURE_MAXIMUM_POSIX_TIMERS,
- CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
- CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
- CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
- CONFIGURE_MAXIMUM_POSIX_BARRIERS,
- CONFIGURE_MAXIMUM_POSIX_RWLOCKS,
- CONFIGURE_MAXIMUM_POSIX_SPINLOCKS,
- CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
- CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
-};
-#endif
+ #ifdef RTEMS_ITRON_API
+ /**
+ * This is the ITRON API Configuration Table.
+ */
+ itron_api_configuration_table Configuration_ITRON_API = {
+ CONFIGURE_MAXIMUM_ITRON_TASKS,
+ CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
+ CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
+ CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
+ CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
+ CONFIGURE_MAXIMUM_ITRON_PORTS,
+ CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
+ CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
+ CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
+ CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
+ };
+ #endif
-#ifdef RTEMS_ITRON_API
-itron_api_configuration_table Configuration_ITRON_API = {
- CONFIGURE_MAXIMUM_ITRON_TASKS,
- CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
- CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
- CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
- CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
- CONFIGURE_MAXIMUM_ITRON_PORTS,
- CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
- CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
- CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
- CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
-};
-#endif
-
-rtems_configuration_table Configuration = {
- CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
- CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */
- CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
- CONFIGURE_STACK_CHECKER_EXTENSION, /* maximum user extensions */
- CONFIGURE_MICROSECONDS_PER_TICK, /* microseconds per clock tick */
- CONFIGURE_TICKS_PER_TIMESLICE, /* ticks per timeslice quantum */
- CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */
- CONFIGURE_IDLE_TASK_STACK_SIZE, /* IDLE task stack size */
- CONFIGURE_INTERRUPT_STACK_SIZE, /* interrupt stack size */
- CONFIGURE_TASK_STACK_ALLOCATOR, /* stack allocator */
- CONFIGURE_TASK_STACK_DEALLOCATOR, /* stack deallocator */
- CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY, /* true to clear memory */
- CONFIGURE_MAXIMUM_DRIVERS, /* maximum device drivers */
- CONFIGURE_NUMBER_OF_DRIVERS, /* static device drivers */
- Device_drivers, /* pointer to driver table */
- CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS, /* number of initial extensions */
- CONFIGURE_INITIAL_EXTENSION_TABLE, /* pointer to initial extensions */
-#if defined(RTEMS_MULTIPROCESSING)
- CONFIGURE_MULTIPROCESSING_TABLE, /* pointer to MP config table */
-#endif
- &Configuration_RTEMS_API, /* pointer to RTEMS API config */
-#ifdef RTEMS_POSIX_API
- &Configuration_POSIX_API, /* pointer to POSIX API config */
-#else
- NULL, /* pointer to POSIX API config */
-#endif
-#ifdef RTEMS_ITRON_API
- &Configuration_ITRON_API /* pointer to ITRON API config */
-#else
- NULL /* pointer to ITRON API config */
-#endif
-};
+ /**
+ * This is the primary Configuration Table for this application.
+ */
+ rtems_configuration_table Configuration = {
+ CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
+ CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */
+ CONFIGURE_MAXIMUM_USER_EXTENSIONS, /* maximum dynamic extensions */
+ CONFIGURE_MICROSECONDS_PER_TICK, /* microseconds per clock tick */
+ CONFIGURE_TICKS_PER_TIMESLICE, /* ticks per timeslice quantum */
+ CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */
+ CONFIGURE_IDLE_TASK_STACK_SIZE, /* IDLE task stack size */
+ CONFIGURE_INTERRUPT_STACK_SIZE, /* interrupt stack size */
+ CONFIGURE_TASK_STACK_ALLOCATOR, /* stack allocator */
+ CONFIGURE_TASK_STACK_DEALLOCATOR, /* stack deallocator */
+ CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY, /* true to clear memory */
+ CONFIGURE_MAXIMUM_DRIVERS, /* maximum device drivers */
+ CONFIGURE_NUMBER_OF_DRIVERS, /* static device drivers */
+ Device_drivers, /* pointer to driver table */
+ CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS, /* number of static extensions */
+ CONFIGURE_INITIAL_EXTENSION_TABLE, /* pointer to static extensions */
+ #if defined(RTEMS_MULTIPROCESSING)
+ CONFIGURE_MULTIPROCESSING_TABLE, /* pointer to MP config table */
+ #endif
+ &Configuration_RTEMS_API, /* pointer to RTEMS API config */
+ #ifdef RTEMS_POSIX_API
+ &Configuration_POSIX_API, /* pointer to POSIX API config */
+ #else
+ NULL, /* pointer to POSIX API config */
+ #endif
+ #ifdef RTEMS_ITRON_API
+ &Configuration_ITRON_API /* pointer to ITRON API config */
+ #else
+ NULL /* pointer to ITRON API config */
+ #endif
+ };
#endif
#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */