source: rtems/cpukit/sapi/include/confdefs.h @ c461430

4.104.114.84.95
Last change on this file since c461430 was c461430, checked in by Ralf Corsepius <ralf.corsepius@…>, on 10/18/06 at 10:43:41

2006-10-18 Ralf Corsépius <ralf.corsepius@…>

  • sapi/include/confdefs.h: s/STACK_CHECKER_EXTENSION/RTEMS_STACK_CHECKER_EXTENSION/ (Reflect 2006-09-13's changes to libmisc/stackchk).
  • Property mode set to 100644
File size: 35.5 KB
RevLine 
[b96254f]1/**
2 * @file rtems/confdefs.h
[08bae5e6]3 *
4 *  This include file contains the configuration table template that will
[df49c60]5 *  be instantiated by an application based on the setting of a number
6 *  of macros.  The macros are documented in the Configuring a System
7 *  chapter of the Classic API User's Guide
[08bae5e6]8 *
[df49c60]9 *  The model is to estimate the memory required for each configured item
10 *  and sum those estimates.  The estimate can be too high or too low for
11 *  a variety of reasons:
12 *
13 *  Reasons estimate is too high:
14 *    + FP contexts (not all tasks are FP)
15 *
16 *  Reasons estimate is too low:
17 *    + stacks greater than minimum size
18 *    + messages
19 *    + application must account for device driver resources
20 *    + application must account for add-on library resource requirements
21 *
22 *  NOTE:  Eventually this may be able to take into account some of
23 *         the above.  This procedure has evolved from just enough to
24 *         support the RTEMS Test Suites into something that can be
25 *         used remarkably reliably by most applications.
[b96254f]26 */
27 
28/*
[7fa1ce86]29 *  COPYRIGHT (c) 1989-2006.
[08bae5e6]30 *  On-Line Applications Research Corporation (OAR).
31 *
[98e4ebf5]32 *  The license and distribution terms for this file may be
33 *  found in the file LICENSE in this distribution or at
[2ba508b]34 *  http://www.rtems.com/license/LICENSE.
[08bae5e6]35 *
36 *  $Id$
37 */
38
39#ifndef __CONFIGURATION_TEMPLATE_h
40#define __CONFIGURATION_TEMPLATE_h
[8486081]41
[08bae5e6]42#ifdef __cplusplus
43extern "C" {
44#endif
[9c63d90]45
46/*
47 * Include the executive's configuration
48 */
49#include <rtems/score/cpuopts.h>
[b2b143f4]50#include <rtems/score/apimutex.h>
[9c63d90]51
[08bae5e6]52extern rtems_initialization_tasks_table Initialization_tasks[];
53extern rtems_driver_address_table       Device_drivers[];
54extern rtems_configuration_table        Configuration;
55extern rtems_multiprocessing_table      Multiprocessing_configuration;
[2eba45d]56#ifdef RTEMS_POSIX_API
[be1c11ed]57extern posix_api_configuration_table    Configuration_POSIX_API;
[2eba45d]58#endif
[352c9b2]59#ifdef RTEMS_ITRON_API
60extern itron_api_configuration_table    Configuration_ITRON_API;
61#endif
[08bae5e6]62
[3b89891]63/*
64 *  RTEMS C Library and Newlib support
65 */
66
[9c63d90]67#ifdef RTEMS_NEWLIB
[3b89891]68#define CONFIGURE_NEWLIB_EXTENSION 1
[623893c]69#else
70#define CONFIGURE_NEWLIB_EXTENSION 0
[9c63d90]71#endif
[623893c]72
[3b89891]73#define CONFIGURE_MALLOC_REGION 1
74
[df49c60]75/*
76 *  File descriptors managed by libio
77 */
78
[bd9c3d1]79#ifndef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
[df49c60]80#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
[bd9c3d1]81#endif
82
83#define CONFIGURE_LIBIO_SEMAPHORES \
84  (CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS + 1)
85
[43908825]86#ifdef CONFIGURE_INIT
[8bd41178]87uint32_t   rtems_libio_number_iops = CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS;
[43908825]88#endif
89
[df49c60]90/*
91 *  Termios resources
92 */
93
94#ifdef CONFIGURE_TERMIOS_DISABLED
95#define CONFIGURE_TERMIOS_SEMAPHORES 0
96#else
97
98#ifndef CONFIGURE_NUMBER_OF_TERMIOS_PORTS
99#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 1
100#endif
101
102#define CONFIGURE_TERMIOS_SEMAPHORES \
103  ((CONFIGURE_NUMBER_OF_TERMIOS_PORTS * 4) + 1)
104#endif
105
[d3d2afdf]106/*
107 *  PTYs
108 */
109
110#ifndef CONFIGURE_MAXIMUM_PTYS
111#define CONFIGURE_MAXIMUM_PTYS 0
112#endif
113
114#ifdef CONFIGURE_INIT
115int rtems_telnetd_maximum_ptys = CONFIGURE_MAXIMUM_PTYS;
116#else
117extern int rtems_telnetd_maximum_ptys;
118#endif
119
[43f7a90]120/*
121 *  Mount Table Configuration
122 */
123
[ebbe119e]124#include <rtems/imfs.h>
[43f7a90]125
[c9b005a9]126#ifndef CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
127#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \
128                  IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
129#endif
[43f7a90]130#ifdef CONFIGURE_INIT
[c9b005a9]131  int imfs_rq_memfile_bytes_per_block = CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK;
132#endif /* CONFIGURE_INIT */
[43f7a90]133
[c9b005a9]134#ifdef CONFIGURE_INIT
[43f7a90]135#ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
136rtems_filesystem_mount_table_t configuration_mount_table = {
[df49c60]137#ifdef CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
[86ed4f0]138  &IMFS_ops,
[df49c60]139#else  /* using miniIMFS as base filesystem */
140  &miniIMFS_ops,
[43f7a90]141#endif
142  RTEMS_FILESYSTEM_READ_WRITE,
143  NULL,
144  NULL
145};
146
[8486081]147rtems_filesystem_mount_table_t
[43f7a90]148    *rtems_filesystem_mount_table = &configuration_mount_table;
149int rtems_filesystem_mount_table_size = 1;
150#endif
151
152#endif
153
154
[ab97da95]155/*
156 *  Stack Checker Requirements
[458bd34]157 *
158 *  NOTE: This does not automatically enable reporting at program exit.
[ab97da95]159 */
160
161#ifdef STACK_CHECKER_ON
162#define CONFIGURE_STACK_CHECKER_EXTENSION 1
163#else
164#define CONFIGURE_STACK_CHECKER_EXTENSION 0
165#endif
166
[01a4990]167/*
168 *  Interrupt Stack Space
[df49c60]169 *
170 *  NOTE: There is currently no way for the application to override
171 *        the interrupt stack size set by the BSP.
[01a4990]172 */
173
[71d07b9d]174#if (CPU_ALLOCATE_INTERRUPT_STACK == 0)
[df49c60]175#undef CONFIGURE_INTERRUPT_STACK_MEMORY
[01a4990]176#define CONFIGURE_INTERRUPT_STACK_MEMORY 0
[71d07b9d]177#else
178  #ifndef CONFIGURE_INTERRUPT_STACK_MEMORY
179  #define CONFIGURE_INTERRUPT_STACK_MEMORY RTEMS_MINIMUM_STACK_SIZE
180  #endif
[01a4990]181#endif
182
[08bae5e6]183/*
184 *  Default User Initialization Task Table.  This table guarantees that
185 *  one user initialization table is defined.
186 */
187
[be1c11ed]188#ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
189
190#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
191
192/*
[8486081]193 *  The user is defining their own table information and setting the
[be1c11ed]194 *  appropriate variables.
195 */
196
197#else
[08bae5e6]198
199#ifndef CONFIGURE_INIT_TASK_NAME
200#define CONFIGURE_INIT_TASK_NAME          rtems_build_name( 'U', 'I', '1', ' ' )
201#endif
202
203#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
[8486081]204#define CONFIGURE_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
[08bae5e6]205#endif
206
207#ifndef CONFIGURE_INIT_TASK_PRIORITY
208#define CONFIGURE_INIT_TASK_PRIORITY      1
209#endif
210
211#ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
[8486081]212#define CONFIGURE_INIT_TASK_ATTRIBUTES    RTEMS_DEFAULT_ATTRIBUTES
[08bae5e6]213#endif
214
215#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
[8486081]216#define CONFIGURE_INIT_TASK_ENTRY_POINT   Init
[08bae5e6]217#endif
218
219#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
[8486081]220#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
[08bae5e6]221#endif
222
223#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
[8486081]224#define CONFIGURE_INIT_TASK_ARGUMENTS     0
[08bae5e6]225#endif
226
227#ifdef CONFIGURE_INIT
228rtems_initialization_tasks_table Initialization_tasks[] = {
229  { CONFIGURE_INIT_TASK_NAME,
230    CONFIGURE_INIT_TASK_STACK_SIZE,
231    CONFIGURE_INIT_TASK_PRIORITY,
232    CONFIGURE_INIT_TASK_ATTRIBUTES,
233    CONFIGURE_INIT_TASK_ENTRY_POINT,
234    CONFIGURE_INIT_TASK_INITIAL_MODES,
235    CONFIGURE_INIT_TASK_ARGUMENTS
236  }
237};
238#endif
239
[d9a0689e]240#define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
241
242#define CONFIGURE_INIT_TASK_TABLE_SIZE \
243  sizeof(CONFIGURE_INIT_TASK_TABLE) / sizeof(rtems_initialization_tasks_table)
244
[be1c11ed]245#endif    /* CONFIGURE_HAS_OWN_INIT_TASK_TABLE */
246
247#else     /* CONFIGURE_RTEMS_INIT_TASKS_TABLE */
248
249#define CONFIGURE_INIT_TASK_TABLE      NULL
250#define CONFIGURE_INIT_TASK_TABLE_SIZE 0
[45c3da3]251#define CONFIGURE_INIT_TASK_STACK_SIZE 0
[be1c11ed]252
[08bae5e6]253#endif
254
[df49c60]255/*
256 *  Map obsolete names to current ones
257 *
258 *  NOTE: These should be obsoleted in a future release.
259 */
260
261#ifdef CONFIGURE_TEST_NEEDS_TIMER_DRIVER
262#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
263#endif
264#ifdef CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
265#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
[8486081]266#endif
[df49c60]267#ifdef CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
268#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[8486081]269#endif
[df49c60]270#ifdef CONFIGURE_TEST_NEEDS_RTC_DRIVER
271#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
[8486081]272#endif
[df49c60]273#ifdef CONFIGURE_TEST_NEEDS_STUB_DRIVER
274#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
275#endif
276
277
[08bae5e6]278/*
279 *  Default Device Driver Table.  Each driver needed by the test is explicitly
280 *  choosen by that test.  There is always a null driver entry.
281 */
282
283#define NULL_DRIVER_TABLE_ENTRY \
284 { NULL, NULL, NULL, NULL, NULL, NULL }
285
[df49c60]286#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
[ebbe119e]287#include <rtems/console.h>
[df49c60]288#endif
289
290#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[ebbe119e]291#include <rtems/clockdrv.h>
[df49c60]292#endif
293
294#ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
[ebbe119e]295#include <rtems/timerdrv.h>
[08bae5e6]296#endif
297
[1d4bac9]298#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
[ebbe119e]299#include <rtems/rtc.h>
[1d4bac9]300#endif
301
[df49c60]302#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
[9c63d90]303#include <rtems/devnull.h>
[08bae5e6]304#endif
305
[c9b005a9]306#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
307  /* the ide driver needs the ATA driver */
308#  ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
309#  define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
310#  endif
311#include <libchip/ide_ctrl.h>
312#endif
313
314#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
315#include <libchip/ata.h>
316#endif
317
[08bae5e6]318#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
319
320#ifdef CONFIGURE_INIT
321rtems_driver_address_table Device_drivers[] = {
[df49c60]322#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
[08bae5e6]323  CONSOLE_DRIVER_TABLE_ENTRY,
324#endif
[df49c60]325#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[08bae5e6]326  CLOCK_DRIVER_TABLE_ENTRY,
327#endif
[1d4bac9]328#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
329  RTC_DRIVER_TABLE_ENTRY,
330#endif
[df49c60]331#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
[9c63d90]332  DEVNULL_DRIVER_TABLE_ENTRY,
[08bae5e6]333#endif
[c9b005a9]334#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
335  IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
336#endif
337#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
338  ATA_DRIVER_TABLE_ENTRY,
339#endif
[96e6a86c]340#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
[08bae5e6]341  NULL_DRIVER_TABLE_ENTRY
[96e6a86c]342#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
343    !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
344    !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
[c9b005a9]345    !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
346    !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER)  && \
347    !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER)
[96e6a86c]348  NULL_DRIVER_TABLE_ENTRY
349#endif
[08bae5e6]350};
351#endif
352
353#endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
354
[059a3714]355/*
356 *  Default the number of drivers per node.  This value may be
357 *  overridden by the user.
358 */
359
[96e6a86c]360#define CONFIGURE_NUMBER_OF_DRIVERS \
361  ((sizeof(Device_drivers) / sizeof(rtems_driver_address_table)))
362
[059a3714]363#ifndef CONFIGURE_MAXIMUM_DRIVERS
[96e6a86c]364#define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
[059a3714]365#endif
366
[08bae5e6]367/*
368 *  Default the number of devices per device driver.  This value may be
369 *  overridden by the user.
370 */
371
372#ifndef CONFIGURE_MAXIMUM_DEVICES
373#define CONFIGURE_MAXIMUM_DEVICES   20
374#endif
375
[c9b005a9]376#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
377  /*
378   * configure the priority of the ATA driver task
379   */
380#  ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
381#    define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
382#  endif
383#  ifdef CONFIGURE_INIT
384  rtems_task_priority ata_driver_task_priority
385    = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
386#  endif /* CONFIGURE_INIT */
387#endif
388
389/*
390 * add bdbuf configuration and values for swapout task priority
391 */
392#ifdef CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
393#include <rtems/bdbuf.h>
394/*
395 * configure the priority of the bdbuf swapout task
396 */
397#ifndef CONFIGURE_SWAPOUT_TASK_PRIORITY
398#define CONFIGURE_SWAPOUT_TASK_PRIORITY SWAPOUT_TASK_DEFAULT_PRIORITY
399#endif
400#ifdef CONFIGURE_INIT
401  rtems_task_priority swapout_task_priority
402    = CONFIGURE_SWAPOUT_TASK_PRIORITY;
403#endif  /* CONFIGURE_INIT */
404#ifndef CONFIGURE_HAS_OWN_BDBUF_TABLE
405
406#ifndef CONFIGURE_BDBUF_BUFFER_COUNT
407#define CONFIGURE_BDBUF_BUFFER_COUNT 64
408#endif /* CONFIGURE_BDBUF_BUFFER_COUNT */
409
410#ifndef CONFIGURE_BDBUF_BUFFER_SIZE
411#define CONFIGURE_BDBUF_BUFFER_SIZE 512
412#endif /* CONFIGURE_BDBUF_BUFFER_SIZE */
413#ifdef CONFIGURE_INIT
414rtems_bdbuf_config rtems_bdbuf_configuration[] = {
415  {CONFIGURE_BDBUF_BUFFER_SIZE,CONFIGURE_BDBUF_BUFFER_COUNT,NULL}
416};
417int rtems_bdbuf_configuration_size =( sizeof(rtems_bdbuf_configuration)
418                                     /sizeof(rtems_bdbuf_configuration[0]));
419#endif /* CONFIGURE_INIT */
420#endif /* CONFIGURE_HAS_OWN_BDBUF_TABLE        */
421#endif /* CONFIGURE_APPLICATION_NEEDS_LIBBLOCK */
[08bae5e6]422/*
[df49c60]423 *  Default Multiprocessing Configuration Table.  The defaults are
424 *  appropriate for most of the RTEMS Multiprocessor Test Suite.  Each
[8486081]425 *  value may be overridden within each test to customize the environment.
[08bae5e6]426 */
427
[df49c60]428#ifdef CONFIGURE_MP_APPLICATION
[08bae5e6]429#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
430
431#ifndef CONFIGURE_MP_NODE_NUMBER
432#define CONFIGURE_MP_NODE_NUMBER                NODE_NUMBER
433#endif
434
435#ifndef CONFIGURE_MP_MAXIMUM_NODES
436#define CONFIGURE_MP_MAXIMUM_NODES              2
437#endif
438
439#ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
440#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS     32
441#endif
442
443#ifndef CONFIGURE_MP_MAXIMUM_PROXIES
444#define CONFIGURE_MP_MAXIMUM_PROXIES            32
445#endif
446
447#ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
448#include <mpci.h>
449#define CONFIGURE_MP_MPCI_TABLE_POINTER         &MPCI_table
450#endif
451
452#ifdef CONFIGURE_INIT
453rtems_multiprocessing_table Multiprocessing_configuration = {
454  CONFIGURE_MP_NODE_NUMBER,              /* local node number */
455  CONFIGURE_MP_MAXIMUM_NODES,            /* maximum # nodes in system */
456  CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS,   /* maximum # global objects */
457  CONFIGURE_MP_MAXIMUM_PROXIES,          /* maximum # proxies */
458  CONFIGURE_MP_MPCI_TABLE_POINTER        /* pointer to MPCI config table */
459};
460#endif
461
462#define CONFIGURE_MULTIPROCESSING_TABLE    &Multiprocessing_configuration
463
464#endif /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
465
466#else
467
468#define CONFIGURE_MULTIPROCESSING_TABLE    NULL
469
[df49c60]470#endif /* CONFIGURE_MP_APPLICATION */
[8486081]471
[08bae5e6]472/*
[8486081]473 *  Default Configuration Table.
[08bae5e6]474 */
475
476#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
[8486081]477
[08bae5e6]478#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
479#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA     NULL
480#endif
481
482#ifndef CONFIGURE_MAXIMUM_TASKS
[df49c60]483#define CONFIGURE_MAXIMUM_TASKS               0
[08bae5e6]484#endif
485
486#ifndef CONFIGURE_MAXIMUM_TIMERS
487#define CONFIGURE_MAXIMUM_TIMERS              0
488#endif
489
490#ifndef CONFIGURE_MAXIMUM_SEMAPHORES
491#define CONFIGURE_MAXIMUM_SEMAPHORES          0
492#endif
493
494#ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
495#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES      0
496#endif
497
498#ifndef CONFIGURE_MAXIMUM_PARTITIONS
499#define CONFIGURE_MAXIMUM_PARTITIONS          0
500#endif
501
502#ifndef CONFIGURE_MAXIMUM_REGIONS
503#define CONFIGURE_MAXIMUM_REGIONS             0
504#endif
505
506#ifndef CONFIGURE_MAXIMUM_PORTS
507#define CONFIGURE_MAXIMUM_PORTS               0
508#endif
509
510#ifndef CONFIGURE_MAXIMUM_PERIODS
511#define CONFIGURE_MAXIMUM_PERIODS             0
512#endif
513
[7fa1ce86]514#ifndef CONFIGURE_MAXIMUM_BARRIERS
515#define CONFIGURE_MAXIMUM_BARRIERS            0
516#endif
517
[08bae5e6]518#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
519#define CONFIGURE_MAXIMUM_USER_EXTENSIONS     0
520#endif
521
[8486081]522#ifndef CONFIGURE_MICROSECONDS_PER_TICK
[08bae5e6]523#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
524#endif
525
526#ifndef CONFIGURE_TICKS_PER_TIMESLICE
527#define CONFIGURE_TICKS_PER_TIMESLICE        50
528#endif
529
[0451b44]530/*
531 *  Initial Extension Set
532 */
533
534#ifdef CONFIGURE_INIT
535#ifdef STACK_CHECKER_ON
[31bce9b]536#include <rtems/stackchk.h>
[0451b44]537#endif
538
[96e6a86c]539#if defined(CONFIGURE_INITIAL_EXTENSIONS) || \
540    defined(STACK_CHECKER_ON)
[0451b44]541rtems_extensions_table Configuration_Initial_Extensions[] = {
542#ifdef CONFIGURE_INITIAL_EXTENSIONS
543    CONFIGURE_INITIAL_EXTENSIONS,
544#endif
545#ifdef STACK_CHECKER_ON
[c461430]546    RTEMS_STACK_CHECKER_EXTENSION,
[0451b44]547#endif
548};
549
[96e6a86c]550#define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
[0451b44]551#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
552  ((sizeof(Configuration_Initial_Extensions) / \
[96e6a86c]553    sizeof(rtems_extensions_table)))
554#else
555#define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
556#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
557#endif
558
[0451b44]559
[08bae5e6]560#endif
561
[2eba45d]562/*
563 *  POSIX API Configuration Parameters
564 */
565
566#ifdef RTEMS_POSIX_API
567
[308aed9b]568#include <sys/types.h>
[72ad6aa]569#include <signal.h>
[b2b143f4]570#include <limits.h>
[be0fc099]571#include <mqueue.h>
[7fb2bb2]572/* #include <rtems/posix/barrier.h> */
[308aed9b]573#include <rtems/posix/cond.h>
[be0fc099]574#include <rtems/posix/mqueue.h>
[308aed9b]575#include <rtems/posix/mutex.h>
576#include <rtems/posix/key.h>
577#include <rtems/posix/psignal.h>
[7fb2bb2]578/* #include <rtems/posix/rwlock.h> */
[be0fc099]579#include <rtems/posix/semaphore.h>
[7fb2bb2]580/* #include <rtems/posix/spinlock.h> */
[308aed9b]581#include <rtems/posix/threadsup.h>
[8c51e48c]582#include <rtems/posix/timer.h>
[308aed9b]583
[2eba45d]584#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
[df49c60]585#define CONFIGURE_MAXIMUM_POSIX_THREADS      0
[2eba45d]586#endif
587
588#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
[da33d26]589#define CONFIGURE_MAXIMUM_POSIX_MUTEXES      0
[2eba45d]590#endif
591
592#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
593#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  0
594#endif
595
[da33d26]596#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
597#define CONFIGURE_MAXIMUM_POSIX_KEYS         0
598#endif
599
[0747e2d]600#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
601#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
602#endif
603
[eb0551f]604#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
605#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
606#endif
607
[be0fc099]608#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
609#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
610#endif
611
612#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
613#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
614#endif
615
[7fa1ce86]616#ifndef CONFIGURE_MAXIMUM_POSIX_BARRIERS
617#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 0
618#endif
619
620#ifndef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
621#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 0
622#endif
623
624#ifndef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
625#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 0
626#endif
627
[be1c11ed]628#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
629
630#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
[5240c71c]631
[be1c11ed]632/*
633 *  The user is defining their own table information and setting the
[df49c60]634 *  appropriate variables for the POSIX Initialization Thread Table.
[be1c11ed]635 */
[8486081]636
[be1c11ed]637#else
638
639#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
[8486081]640#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT   POSIX_Init
[5240c71c]641#endif
642
[9583f6e]643#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
644#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
[adbb578]645#endif
646
[5240c71c]647#ifdef CONFIGURE_INIT
[be1c11ed]648posix_initialization_threads_table POSIX_Initialization_threads[] = {
[16775a5]649  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
[9583f6e]650      CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
[5240c71c]651};
[2eba45d]652#endif
653
[be1c11ed]654#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
[8486081]655
[be1c11ed]656#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
657  sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
658      sizeof(posix_initialization_threads_table)
[5240c71c]659
660#endif    /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
661
[be1c11ed]662#else     /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
663
664#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
665#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
666
667#endif
668
[308aed9b]669#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
670  ( \
671    sizeof (POSIX_API_Control) + \
672   (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
673  )
674
675#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
676  ((_mutexes) * \
[b2b143f4]677   ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF + \
678     NAME_MAX ) )
[308aed9b]679
680#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
681  ((_condition_variables) * \
682   ( sizeof(POSIX_Condition_variables_Control) + \
683        CONFIGURE_OBJECT_TABLE_STUFF ) )
684
685#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
686  ((_keys) * \
687   ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
688
[0747e2d]689#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
[8c51e48c]690   ((_timers) * (sizeof(POSIX_Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
[0747e2d]691
[308aed9b]692#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
693  ((_queued_signals) * \
694   ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
695
[be0fc099]696#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
697  ((_message_queues) * \
[b2b143f4]698   ( sizeof( POSIX_Message_queue_Control) + \
699    CONFIGURE_OBJECT_TABLE_STUFF + \
700    NAME_MAX ) )
[7fa1ce86]701
[be0fc099]702#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
703  ((_semaphores) * \
[b2b143f4]704   ( sizeof( POSIX_Semaphore_Control) + \
705    CONFIGURE_OBJECT_TABLE_STUFF + \
706    NAME_MAX ) )
[308aed9b]707
[7fb2bb2]708#define CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(_barriers) 0
709#define CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS(_spinlocks) 0
710#define CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS(_rwlocks) 0
711
712#if 0
713#define CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(_barriers) \
714  ((_barriers) * \
[7fa1ce86]715   ( sizeof( POSIX_Barrier_Control) + \
716    CONFIGURE_OBJECT_TABLE_STUFF + \
717    NAME_MAX ) )
718
719#define CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS(_spinlocks) \
720  ((_spinlocks) * \
721   ( sizeof( POSIX_Spinlock_Control) + \
722    CONFIGURE_OBJECT_TABLE_STUFF + \
723    NAME_MAX ) )
724
725#define CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS(_rwlocks) \
726  ((_rwlocks) * \
727   ( sizeof( POSIX_RWLock_Control) + \
728    CONFIGURE_OBJECT_TABLE_STUFF + \
729    NAME_MAX ) )
[7fb2bb2]730#endif
[7fa1ce86]731
[308aed9b]732#define CONFIGURE_MEMORY_FOR_POSIX \
733  ( \
734    CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
735    CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
736        CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
737    CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
738    CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
[16775a5]739        CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
[be0fc099]740    CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
741        CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
742    CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
743        CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
[7fa1ce86]744    CONFIGURE_MEMORY_FOR_POSIX_BARRIERS( CONFIGURE_MAXIMUM_POSIX_BARRIERS ) + \
745    CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS( \
746        CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ) + \
747    CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS( \
748        CONFIGURE_MAXIMUM_POSIX_RWLOCKS ) + \
[8c51e48c]749    CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ) + \
[9583f6e]750    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
[308aed9b]751   )
752#else
753
[10b3c9b]754#define CONFIGURE_MAXIMUM_POSIX_THREADS         0
[308aed9b]755#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
756#define CONFIGURE_MEMORY_FOR_POSIX              0
757
[cc17eba]758
[5240c71c]759#endif    /* RTEMS_POSIX_API */
760
[9583f6e]761#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
762#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    0
[cc17eba]763#endif
764
[352c9b2]765/*
766 *  ITRON API Configuration Parameters
767 */
768
769#ifdef RTEMS_ITRON_API
770
[ebbe119e]771#include <rtems/itron.h>
[352c9b2]772#include <rtems/itron/config.h>
773#include <rtems/itron/eventflags.h>
774#include <rtems/itron/fmempool.h>
775#include <rtems/itron/mbox.h>
776#include <rtems/itron/msgbuffer.h>
777#include <rtems/itron/port.h>
778#include <rtems/itron/semaphore.h>
779#include <rtems/itron/task.h>
780#include <rtems/itron/vmempool.h>
781
782#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
[df49c60]783#define CONFIGURE_MAXIMUM_ITRON_TASKS      0
[352c9b2]784#endif
785
786#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
787#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES   0
788#endif
789
790#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
791#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS   0
792#endif
793
794#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
795#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES   0
796#endif
797
798#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
799#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS   0
800#endif
801
802#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
803#define CONFIGURE_MAXIMUM_ITRON_PORTS   0
804#endif
805
806#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
807#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS   0
808#endif
809
810#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
811#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS   0
812#endif
813
814#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
815
816#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
817
818/*
819 *  The user is defining their own table information and setting the
[df49c60]820 *  appropriate variables for the ITRON Initialization Task Table.
[352c9b2]821 */
822
823#else
824
825#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
826#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT   ITRON_Init
827#endif
828
829#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
830#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES    TA_HLNG
831#endif
832
833#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
834#define CONFIGURE_ITRON_INIT_TASK_PRIORITY      1
835#endif
836
837#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
838#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
839#endif
840
841#ifdef CONFIGURE_INIT
842itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
843  { 1,                                    /* ID */
844    { (VP) 0,                                /* exinfo */
845      CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES,  /* task attributes */
846      CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
847      CONFIGURE_ITRON_INIT_TASK_PRIORITY,    /* initial task priority */
848      CONFIGURE_ITRON_INIT_TASK_STACK_SIZE   /* stack size */
849    }
850  }
851};
852#endif
853
854#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
855
856#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
857  sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
858      sizeof(itron_initialization_tasks_table)
859
860#endif    /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
861
862#else     /* CONFIGURE_ITRON_INIT_TASK_TABLE */
863
864#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
865#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
866
867#endif
868
869#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
870  ( \
871    sizeof (ITRON_API_Control) \
872  )
873
874#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
875  ((_semaphores) * \
876   ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
877
878#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
879  ((_eventflags) * \
880   ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
881
882#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
883  ((_mailboxes) * \
884   ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
885
886#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
887  ((_message_buffers) * \
888   ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
889
890#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
891  ((_ports) * \
892   ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
893
894#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
895  ((_memory_pools) * \
896   (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
897
898#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
899  ((_fixed_memory_pools) * \
900   ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
901
[399c2e5d]902#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
903#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
[352c9b2]904#endif
905
906
907#define CONFIGURE_MEMORY_FOR_ITRON \
908  ( \
909    CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
910        CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
911    CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
912        CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
913    CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
914        CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
915    CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
916        CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
917    CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
918        CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
919    CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
920        CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
921    CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
922        CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
[399c2e5d]923    CONFIGURE_ITRON_INIT_TASK_STACK_SIZE \
[352c9b2]924   )
925
926
927#else
928
929#define CONFIGURE_MAXIMUM_ITRON_TASKS               0
930#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES          0
931#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS          0
932#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES           0
933#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS     0
934#define CONFIGURE_MAXIMUM_ITRON_PORTS               0
935#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS        0
936#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS  0
937#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API     0
938#define CONFIGURE_MEMORY_FOR_ITRON                  0
939
940#endif    /* RTEMS_ITRON_API */
941
942
[8486081]943/*
[3652ad35]944 *  Calculate the RAM size based on the maximum number of objects configured.
945 */
[08bae5e6]946
947#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
[3652ad35]948
949#define CONFIGURE_OBJECT_TABLE_STUFF \
950  ( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
951
[b2b143f4]952#if defined(RTEMS_NEWLIB)
953#include <reent.h>
954
955#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
956#else
957#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
958#endif
959
[3652ad35]960#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
[b3dcd9a2]961  (((_tasks) + 1 ) * \
[3652ad35]962   ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
963      STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
[308aed9b]964      CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
[352c9b2]965      CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
[b2b143f4]966      CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY + \
[3652ad35]967      CONFIGURE_OBJECT_TABLE_STUFF)) \
968  )
969
970#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
971  ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
972
973#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
974  ((_semaphores) * \
975   ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
976
977#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
978  ( (_queues) * \
979    ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
980
981#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
982  ( (_partitions) * \
983    ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
984
985#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
986  ( (_regions) * \
987    ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
988
989#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
990  ( (_ports) * \
991    ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
992
993#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
994  ( (_periods) * \
995    ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
996
[7fa1ce86]997#define CONFIGURE_MEMORY_FOR_BARRIERS(_barriers) \
998  ( (_barriers) * \
999    ( sizeof(Barrier_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1000
[3652ad35]1001#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
1002  ( (_extensions) * \
1003    ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1004
1005#define CONFIGURE_MEMORY_FOR_DEVICES(_devices) \
1006  (((_devices) + 1) * ( sizeof(rtems_driver_name_t) ) )
1007
[df49c60]1008#ifdef CONFIGURE_MP_APPLICATION
[3652ad35]1009
1010#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
1011
1012#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
1013  ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) )  )
1014
1015#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
1016  ((_global_objects)  * ( sizeof(Objects_MP_Control) )  )
1017
1018#define CONFIGURE_MEMORY_FOR_MP \
1019  ( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
[b3dcd9a2]1020    CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
[a66186e]1021    CONFIGURE_MEMORY_FOR_TASKS(1) \
[3652ad35]1022  )
1023
1024#endif  /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
1025
1026#else
1027
1028#define CONFIGURE_MEMORY_FOR_MP  0
1029
1030#endif
[3b89891]1031
[0312defb]1032#ifndef CONFIGURE_MEMORY_OVERHEAD
1033#define CONFIGURE_MEMORY_OVERHEAD 0
1034#endif
1035
[308aed9b]1036#ifndef CONFIGURE_EXTRA_TASK_STACKS
1037#define CONFIGURE_EXTRA_TASK_STACKS 0
1038#endif
1039
[b2b143f4]1040#define CONFIGURE_API_MUTEX_MEMORY \
1041  ( (1) * \
1042    ( sizeof(API_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) \
[8486081]1043  )
[b2b143f4]1044
[df49c60]1045#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
[b3dcd9a2]1046  ( CONFIGURE_MEMORY_FOR_TASKS(1) +    /* IDLE */ \
1047    (256 * 12) +                       /* Ready chains */ \
[01a4990]1048    256        +                       /* name/ptr table overhead */ \
[b2b143f4]1049    CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
1050    CONFIGURE_API_MUTEX_MEMORY         /* allocation mutex */ \
[b3dcd9a2]1051  )
1052
[399c2e5d]1053/*
1054 *  Now account for any extra memory that initialization tasks or threads
1055 *  may have requested.
1056 */
1057
1058#ifdef RTEMS_POSIX_API
1059#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
1060    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1061#else
1062#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
1063#endif
1064#ifdef RTEMS_ITRON_API
1065#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART \
1066    (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1067#else
1068#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART 0
1069#endif
1070
[563ed95]1071#define CONFIGURE_INITIALIZATION_THREADS_STACKS \
1072   ((CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
[399c2e5d]1073    CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART + \
1074    CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART)
[563ed95]1075
[08bae5e6]1076#define CONFIGURE_EXECUTIVE_RAM_SIZE \
[308aed9b]1077(( CONFIGURE_MEMORY_FOR_POSIX + \
[352c9b2]1078   CONFIGURE_MEMORY_FOR_ITRON + \
[308aed9b]1079   CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
[352c9b2]1080      CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
1081      CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
[563ed95]1082   CONFIGURE_INITIALIZATION_THREADS_STACKS + \
[3652ad35]1083   CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
[bd9c3d1]1084   CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
[df49c60]1085     CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
[3652ad35]1086   CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
1087   CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \
[3b89891]1088   CONFIGURE_MEMORY_FOR_REGIONS( \
1089      CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION ) + \
[3652ad35]1090   CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
1091   CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
[7fa1ce86]1092   CONFIGURE_MEMORY_FOR_BARRIERS(CONFIGURE_MAXIMUM_BARRIERS) + \
[3b89891]1093   CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
[ab97da95]1094      CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
1095      CONFIGURE_STACK_CHECKER_EXTENSION ) + \
[3652ad35]1096   CONFIGURE_MEMORY_FOR_DEVICES(CONFIGURE_MAXIMUM_DEVICES) + \
1097   CONFIGURE_MEMORY_FOR_MP + \
[df49c60]1098   CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
[b7be9c30]1099   (((CONFIGURE_MEMORY_OVERHEAD)+1) * 1024) + \
[bac7b61]1100   (CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
[0312defb]1101) & 0xfffffc00)
[08bae5e6]1102#endif
1103
[b61e6e1]1104#ifdef CONFIGURE_GNAT_RTEMS
1105#define CONFIGURE_GNAT_MUTEXES 10
[4f7fd59]1106#define CONFIGURE_GNAT_KEYS    1
[b61e6e1]1107
1108/* 20 are required to run all tests in the ACVC */
1109#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
1110#define CONFIGURE_MAXIMUM_ADA_TASKS  20
1111#endif
1112
[308aed9b]1113/* This is the number of non-Ada tasks which invoked Ada code. */
1114#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
1115#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
1116#endif
1117
1118/* Ada tasks are allocated twice the minimum stack space */
1119#define CONFIGURE_ADA_TASKS_STACK \
[bac7b61]1120  (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
[308aed9b]1121
[b61e6e1]1122#else
[4f7fd59]1123#define CONFIGURE_GNAT_MUTEXES           0
1124#define CONFIGURE_GNAT_KEYS              0
1125#define CONFIGURE_MAXIMUM_ADA_TASKS      0
1126#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
[308aed9b]1127#define CONFIGURE_ADA_TASKS_STACK        0
[b61e6e1]1128#endif
1129
1130
[08bae5e6]1131#ifdef CONFIGURE_INIT
[e6d4b1d]1132
1133rtems_api_configuration_table Configuration_RTEMS_API = {
[08bae5e6]1134  CONFIGURE_MAXIMUM_TASKS,
1135  CONFIGURE_MAXIMUM_TIMERS,
[df49c60]1136  CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
1137    CONFIGURE_TERMIOS_SEMAPHORES,
[08bae5e6]1138  CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
1139  CONFIGURE_MAXIMUM_PARTITIONS,
[3b89891]1140  CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION,
[08bae5e6]1141  CONFIGURE_MAXIMUM_PORTS,
1142  CONFIGURE_MAXIMUM_PERIODS,
[7fa1ce86]1143  CONFIGURE_MAXIMUM_BARRIERS,
[d9a0689e]1144  CONFIGURE_INIT_TASK_TABLE_SIZE,
1145  CONFIGURE_INIT_TASK_TABLE
[e6d4b1d]1146};
1147
[2eba45d]1148#ifdef RTEMS_POSIX_API
1149posix_api_configuration_table Configuration_POSIX_API = {
[b61e6e1]1150  CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
[4f7fd59]1151  CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
1152    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1153  CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
1154    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1155  CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
[0747e2d]1156  CONFIGURE_MAXIMUM_POSIX_TIMERS,
[eb0551f]1157  CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
[be0fc099]1158  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
1159  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
[7fb2bb2]1160#if 0
[7fa1ce86]1161  CONFIGURE_MAXIMUM_POSIX_BARRIERS,
1162  CONFIGURE_MAXIMUM_POSIX_RWLOCKS,
1163  CONFIGURE_MAXIMUM_POSIX_SPINLOCKS,
[7fb2bb2]1164#endif
[be1c11ed]1165  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
1166  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
[2eba45d]1167};
1168#endif
1169
[352c9b2]1170#ifdef RTEMS_ITRON_API
1171itron_api_configuration_table Configuration_ITRON_API = {
1172  CONFIGURE_MAXIMUM_ITRON_TASKS,
1173  CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
1174  CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
1175  CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
1176  CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
1177  CONFIGURE_MAXIMUM_ITRON_PORTS,
1178  CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
1179  CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
1180  CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
1181  CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
1182};
1183#endif
1184
[e6d4b1d]1185rtems_configuration_table Configuration = {
1186  CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
1187  CONFIGURE_EXECUTIVE_RAM_SIZE,
[8486081]1188  CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
[ab97da95]1189      CONFIGURE_STACK_CHECKER_EXTENSION,
[08bae5e6]1190  CONFIGURE_MICROSECONDS_PER_TICK,
1191  CONFIGURE_TICKS_PER_TIMESLICE,
[e6d4b1d]1192  CONFIGURE_MAXIMUM_DEVICES,
[059a3714]1193  CONFIGURE_MAXIMUM_DRIVERS,
[96e6a86c]1194  CONFIGURE_NUMBER_OF_DRIVERS,               /* number of device drivers */
[08bae5e6]1195  Device_drivers,                            /* pointer to driver table */
[0451b44]1196  CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,    /* number of initial extensions */
[96e6a86c]1197  CONFIGURE_INITIAL_EXTENSION_TABLE,         /* pointer to initial extensions */
[e6d4b1d]1198  CONFIGURE_MULTIPROCESSING_TABLE,           /* pointer to MP config table */
1199  &Configuration_RTEMS_API,                  /* pointer to RTEMS API config */
[2eba45d]1200#ifdef RTEMS_POSIX_API
[352c9b2]1201  &Configuration_POSIX_API,                  /* pointer to POSIX API config */
1202#else
1203  NULL,                                      /* pointer to POSIX API config */
1204#endif
1205#ifdef RTEMS_ITRON_API
1206  &Configuration_ITRON_API                   /* pointer to ITRON API config */
[2eba45d]1207#else
[352c9b2]1208  NULL                                       /* pointer to ITRON API config */
[2eba45d]1209#endif
[08bae5e6]1210};
1211#endif
1212
1213#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */
1214
1215#ifdef __cplusplus
1216}
1217#endif
[8486081]1218
[df49c60]1219/*
1220 *  Some warnings and error checking
1221 */
1222
1223/*
1224 *  Make sure a task/thread of some sort is configured
1225 */
1226
1227#if (CONFIGURE_MAXIMUM_TASKS == 0) && \
1228    (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
1229    (CONFIGURE_MAXIMUM_ADA_TASKS == 0) &&  \
1230    (CONFIGURE_MAXIMUM_ITRON_TASKS == 0)
[168ba07]1231#error "CONFIGURATION ERROR: No tasks or threads configured!!"
[df49c60]1232#endif
1233
1234/*
1235 *  Make sure at least one of the initialization task/thread
1236 *  tables was defined.
1237 */
1238
1239#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
1240    !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
1241    !defined(CONFIGURE_ITRON_INIT_TASK_TABLE)
[168ba07]1242#error "CONFIGURATION ERROR: No initialization tasks or threads configured!!"
[df49c60]1243#endif
1244
[08bae5e6]1245#endif
1246/* end of include file */
Note: See TracBrowser for help on using the repository browser.