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

4.104.114.84.95
Last change on this file since c9b005a9 was c9b005a9, checked in by Thomas Doerfler <Thomas.Doerfler@…>, on 07/09/06 at 10:05:27

applied patches for PR1117/1118/1119/1120

  • Property mode set to 100644
File size: 33.8 KB
Line 
1/**
2 * @file rtems/confdefs.h
3 *
4 *  This include file contains the configuration table template that will
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
8 *
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.
26 */
27 
28/*
29 *  COPYRIGHT (c) 1989-2002.
30 *  On-Line Applications Research Corporation (OAR).
31 *
32 *  The license and distribution terms for this file may be
33 *  found in the file LICENSE in this distribution or at
34 *  http://www.rtems.com/license/LICENSE.
35 *
36 *  $Id$
37 */
38
39#ifndef __CONFIGURATION_TEMPLATE_h
40#define __CONFIGURATION_TEMPLATE_h
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/*
47 * Include the executive's configuration
48 */
49#include <rtems/score/cpuopts.h>
50#include <rtems/score/apimutex.h>
51
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;
56#ifdef RTEMS_POSIX_API
57extern posix_api_configuration_table    Configuration_POSIX_API;
58#endif
59#ifdef RTEMS_ITRON_API
60extern itron_api_configuration_table    Configuration_ITRON_API;
61#endif
62
63/*
64 *  RTEMS C Library and Newlib support
65 */
66
67#ifdef RTEMS_NEWLIB
68#define CONFIGURE_NEWLIB_EXTENSION 1
69#else
70#define CONFIGURE_NEWLIB_EXTENSION 0
71#endif
72
73#define CONFIGURE_MALLOC_REGION 1
74
75/*
76 *  File descriptors managed by libio
77 */
78
79#ifndef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
80#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
81#endif
82
83#define CONFIGURE_LIBIO_SEMAPHORES \
84  (CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS + 1)
85
86#ifdef CONFIGURE_INIT
87uint32_t   rtems_libio_number_iops = CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS;
88#endif
89
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
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
120/*
121 *  Mount Table Configuration
122 */
123
124#include <rtems/imfs.h>
125
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
130#ifdef CONFIGURE_INIT
131  int imfs_rq_memfile_bytes_per_block = CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK;
132#endif /* CONFIGURE_INIT */
133
134#ifdef CONFIGURE_INIT
135#ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
136rtems_filesystem_mount_table_t configuration_mount_table = {
137#ifdef CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
138  &IMFS_ops,
139#else  /* using miniIMFS as base filesystem */
140  &miniIMFS_ops,
141#endif
142  RTEMS_FILESYSTEM_READ_WRITE,
143  NULL,
144  NULL
145};
146
147rtems_filesystem_mount_table_t
148    *rtems_filesystem_mount_table = &configuration_mount_table;
149int rtems_filesystem_mount_table_size = 1;
150#endif
151
152#endif
153
154
155/*
156 *  Stack Checker Requirements
157 *
158 *  NOTE: This does not automatically enable reporting at program exit.
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
167/*
168 *  Interrupt Stack Space
169 *
170 *  NOTE: There is currently no way for the application to override
171 *        the interrupt stack size set by the BSP.
172 */
173
174#if (CPU_ALLOCATE_INTERRUPT_STACK == 0)
175#undef CONFIGURE_INTERRUPT_STACK_MEMORY
176#define CONFIGURE_INTERRUPT_STACK_MEMORY 0
177#else
178  #ifndef CONFIGURE_INTERRUPT_STACK_MEMORY
179  #define CONFIGURE_INTERRUPT_STACK_MEMORY RTEMS_MINIMUM_STACK_SIZE
180  #endif
181#endif
182
183/*
184 *  Default User Initialization Task Table.  This table guarantees that
185 *  one user initialization table is defined.
186 */
187
188#ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
189
190#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
191
192/*
193 *  The user is defining their own table information and setting the
194 *  appropriate variables.
195 */
196
197#else
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
204#define CONFIGURE_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
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
212#define CONFIGURE_INIT_TASK_ATTRIBUTES    RTEMS_DEFAULT_ATTRIBUTES
213#endif
214
215#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
216#define CONFIGURE_INIT_TASK_ENTRY_POINT   Init
217#endif
218
219#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
220#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
221#endif
222
223#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
224#define CONFIGURE_INIT_TASK_ARGUMENTS     0
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
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
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
251#define CONFIGURE_INIT_TASK_STACK_SIZE 0
252
253#endif
254
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
266#endif
267#ifdef CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
268#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
269#endif
270#ifdef CONFIGURE_TEST_NEEDS_RTC_DRIVER
271#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
272#endif
273#ifdef CONFIGURE_TEST_NEEDS_STUB_DRIVER
274#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
275#endif
276
277
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
286#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
287#include <rtems/console.h>
288#endif
289
290#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
291#include <rtems/clockdrv.h>
292#endif
293
294#ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
295#include <rtems/timerdrv.h>
296#endif
297
298#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
299#include <rtems/rtc.h>
300#endif
301
302#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
303#include <rtems/devnull.h>
304#endif
305
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
318#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
319
320#ifdef CONFIGURE_INIT
321rtems_driver_address_table Device_drivers[] = {
322#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
323  CONSOLE_DRIVER_TABLE_ENTRY,
324#endif
325#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
326  CLOCK_DRIVER_TABLE_ENTRY,
327#endif
328#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
329  RTC_DRIVER_TABLE_ENTRY,
330#endif
331#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
332  DEVNULL_DRIVER_TABLE_ENTRY,
333#endif
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
340#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
341  NULL_DRIVER_TABLE_ENTRY
342#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
343    !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
344    !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
345    !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
346    !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER)  && \
347    !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER)
348  NULL_DRIVER_TABLE_ENTRY
349#endif
350};
351#endif
352
353#endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
354
355/*
356 *  Default the number of drivers per node.  This value may be
357 *  overridden by the user.
358 */
359
360#define CONFIGURE_NUMBER_OF_DRIVERS \
361  ((sizeof(Device_drivers) / sizeof(rtems_driver_address_table)))
362
363#ifndef CONFIGURE_MAXIMUM_DRIVERS
364#define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
365#endif
366
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
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 */
422/*
423 *  Default Multiprocessing Configuration Table.  The defaults are
424 *  appropriate for most of the RTEMS Multiprocessor Test Suite.  Each
425 *  value may be overridden within each test to customize the environment.
426 */
427
428#ifdef CONFIGURE_MP_APPLICATION
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
470#endif /* CONFIGURE_MP_APPLICATION */
471
472/*
473 *  Default Configuration Table.
474 */
475
476#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
477
478#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
479#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA     NULL
480#endif
481
482#ifndef CONFIGURE_MAXIMUM_TASKS
483#define CONFIGURE_MAXIMUM_TASKS               0
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
514#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
515#define CONFIGURE_MAXIMUM_USER_EXTENSIONS     0
516#endif
517
518#ifndef CONFIGURE_MICROSECONDS_PER_TICK
519#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
520#endif
521
522#ifndef CONFIGURE_TICKS_PER_TIMESLICE
523#define CONFIGURE_TICKS_PER_TIMESLICE        50
524#endif
525
526/*
527 *  Initial Extension Set
528 */
529
530#ifdef CONFIGURE_INIT
531#ifdef STACK_CHECKER_ON
532#include <rtems/stackchk.h>
533#endif
534
535#if defined(CONFIGURE_INITIAL_EXTENSIONS) || \
536    defined(STACK_CHECKER_ON)
537rtems_extensions_table Configuration_Initial_Extensions[] = {
538#ifdef CONFIGURE_INITIAL_EXTENSIONS
539    CONFIGURE_INITIAL_EXTENSIONS,
540#endif
541#ifdef STACK_CHECKER_ON
542    STACK_CHECKER_EXTENSION,
543#endif
544};
545
546#define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
547#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
548  ((sizeof(Configuration_Initial_Extensions) / \
549    sizeof(rtems_extensions_table)))
550#else
551#define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
552#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
553#endif
554
555
556#endif
557
558/*
559 *  POSIX API Configuration Parameters
560 */
561
562#ifdef RTEMS_POSIX_API
563
564#include <sys/types.h>
565#include <signal.h>
566#include <limits.h>
567#include <mqueue.h>
568#include <rtems/posix/cond.h>
569#include <rtems/posix/mqueue.h>
570#include <rtems/posix/mutex.h>
571#include <rtems/posix/key.h>
572#include <rtems/posix/psignal.h>
573#include <rtems/posix/semaphore.h>
574#include <rtems/posix/threadsup.h>
575#include <rtems/posix/timer.h>
576
577#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
578#define CONFIGURE_MAXIMUM_POSIX_THREADS      0
579#endif
580
581#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
582#define CONFIGURE_MAXIMUM_POSIX_MUTEXES      0
583#endif
584
585#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
586#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  0
587#endif
588
589#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
590#define CONFIGURE_MAXIMUM_POSIX_KEYS         0
591#endif
592
593#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
594#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
595#endif
596
597#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
598#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
599#endif
600
601#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
602#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
603#endif
604
605#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
606#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
607#endif
608
609#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
610
611#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
612
613/*
614 *  The user is defining their own table information and setting the
615 *  appropriate variables for the POSIX Initialization Thread Table.
616 */
617
618#else
619
620#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
621#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT   POSIX_Init
622#endif
623
624#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
625#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
626#endif
627
628#ifdef CONFIGURE_INIT
629posix_initialization_threads_table POSIX_Initialization_threads[] = {
630  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
631      CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
632};
633#endif
634
635#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
636
637#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
638  sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
639      sizeof(posix_initialization_threads_table)
640
641#endif    /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
642
643#else     /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
644
645#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
646#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
647
648#endif
649
650#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
651  ( \
652    sizeof (POSIX_API_Control) + \
653   (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
654  )
655
656#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
657  ((_mutexes) * \
658   ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF + \
659     NAME_MAX ) )
660
661#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
662  ((_condition_variables) * \
663   ( sizeof(POSIX_Condition_variables_Control) + \
664        CONFIGURE_OBJECT_TABLE_STUFF ) )
665
666#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
667  ((_keys) * \
668   ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
669
670#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
671   ((_timers) * (sizeof(POSIX_Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
672
673#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
674  ((_queued_signals) * \
675   ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
676
677#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
678  ((_message_queues) * \
679   ( sizeof( POSIX_Message_queue_Control) + \
680    CONFIGURE_OBJECT_TABLE_STUFF + \
681    NAME_MAX ) )
682#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
683  ((_semaphores) * \
684   ( sizeof( POSIX_Semaphore_Control) + \
685    CONFIGURE_OBJECT_TABLE_STUFF + \
686    NAME_MAX ) )
687
688#define CONFIGURE_MEMORY_FOR_POSIX \
689  ( \
690    CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
691    CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
692        CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
693    CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
694    CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
695        CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
696    CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
697        CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
698    CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
699        CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
700    CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ) + \
701    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
702   )
703
704
705#else
706
707#define CONFIGURE_MAXIMUM_POSIX_THREADS         0
708#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
709#define CONFIGURE_MEMORY_FOR_POSIX              0
710
711
712#endif    /* RTEMS_POSIX_API */
713
714#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
715#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    0
716#endif
717
718/*
719 *  ITRON API Configuration Parameters
720 */
721
722#ifdef RTEMS_ITRON_API
723
724#include <rtems/itron.h>
725#include <rtems/itron/config.h>
726#include <rtems/itron/eventflags.h>
727#include <rtems/itron/fmempool.h>
728#include <rtems/itron/mbox.h>
729#include <rtems/itron/msgbuffer.h>
730#include <rtems/itron/port.h>
731#include <rtems/itron/semaphore.h>
732#include <rtems/itron/task.h>
733#include <rtems/itron/vmempool.h>
734
735#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
736#define CONFIGURE_MAXIMUM_ITRON_TASKS      0
737#endif
738
739#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
740#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES   0
741#endif
742
743#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
744#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS   0
745#endif
746
747#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
748#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES   0
749#endif
750
751#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
752#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS   0
753#endif
754
755#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
756#define CONFIGURE_MAXIMUM_ITRON_PORTS   0
757#endif
758
759#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
760#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS   0
761#endif
762
763#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
764#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS   0
765#endif
766
767#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
768
769#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
770
771/*
772 *  The user is defining their own table information and setting the
773 *  appropriate variables for the ITRON Initialization Task Table.
774 */
775
776#else
777
778#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
779#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT   ITRON_Init
780#endif
781
782#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
783#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES    TA_HLNG
784#endif
785
786#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
787#define CONFIGURE_ITRON_INIT_TASK_PRIORITY      1
788#endif
789
790#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
791#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
792#endif
793
794#ifdef CONFIGURE_INIT
795itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
796  { 1,                                    /* ID */
797    { (VP) 0,                                /* exinfo */
798      CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES,  /* task attributes */
799      CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
800      CONFIGURE_ITRON_INIT_TASK_PRIORITY,    /* initial task priority */
801      CONFIGURE_ITRON_INIT_TASK_STACK_SIZE   /* stack size */
802    }
803  }
804};
805#endif
806
807#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
808
809#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
810  sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
811      sizeof(itron_initialization_tasks_table)
812
813#endif    /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
814
815#else     /* CONFIGURE_ITRON_INIT_TASK_TABLE */
816
817#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
818#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
819
820#endif
821
822#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
823  ( \
824    sizeof (ITRON_API_Control) \
825  )
826
827#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
828  ((_semaphores) * \
829   ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
830
831#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
832  ((_eventflags) * \
833   ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
834
835#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
836  ((_mailboxes) * \
837   ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
838
839#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
840  ((_message_buffers) * \
841   ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
842
843#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
844  ((_ports) * \
845   ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
846
847#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
848  ((_memory_pools) * \
849   (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
850
851#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
852  ((_fixed_memory_pools) * \
853   ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
854
855#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
856#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
857#endif
858
859
860#define CONFIGURE_MEMORY_FOR_ITRON \
861  ( \
862    CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
863        CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
864    CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
865        CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
866    CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
867        CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
868    CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
869        CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
870    CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
871        CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
872    CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
873        CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
874    CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
875        CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
876    CONFIGURE_ITRON_INIT_TASK_STACK_SIZE \
877   )
878
879
880#else
881
882#define CONFIGURE_MAXIMUM_ITRON_TASKS               0
883#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES          0
884#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS          0
885#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES           0
886#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS     0
887#define CONFIGURE_MAXIMUM_ITRON_PORTS               0
888#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS        0
889#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS  0
890#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API     0
891#define CONFIGURE_MEMORY_FOR_ITRON                  0
892
893#endif    /* RTEMS_ITRON_API */
894
895
896/*
897 *  Calculate the RAM size based on the maximum number of objects configured.
898 */
899
900#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
901
902#define CONFIGURE_OBJECT_TABLE_STUFF \
903  ( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
904
905#if defined(RTEMS_NEWLIB)
906#include <reent.h>
907
908#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
909#else
910#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
911#endif
912
913#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
914  (((_tasks) + 1 ) * \
915   ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
916      STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
917      CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
918      CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
919      CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY + \
920      CONFIGURE_OBJECT_TABLE_STUFF)) \
921  )
922
923#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
924  ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
925
926#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
927  ((_semaphores) * \
928   ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
929
930#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
931  ( (_queues) * \
932    ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
933
934#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
935  ( (_partitions) * \
936    ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
937
938#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
939  ( (_regions) * \
940    ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
941
942#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
943  ( (_ports) * \
944    ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
945
946#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
947  ( (_periods) * \
948    ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
949
950#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
951  ( (_extensions) * \
952    ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
953
954#define CONFIGURE_MEMORY_FOR_DEVICES(_devices) \
955  (((_devices) + 1) * ( sizeof(rtems_driver_name_t) ) )
956
957#ifdef CONFIGURE_MP_APPLICATION
958
959#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
960
961#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
962  ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) )  )
963
964#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
965  ((_global_objects)  * ( sizeof(Objects_MP_Control) )  )
966
967#define CONFIGURE_MEMORY_FOR_MP \
968  ( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
969    CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
970    CONFIGURE_MEMORY_FOR_TASKS(1) \
971  )
972
973#endif  /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
974
975#else
976
977#define CONFIGURE_MEMORY_FOR_MP  0
978
979#endif
980
981#ifndef CONFIGURE_MEMORY_OVERHEAD
982#define CONFIGURE_MEMORY_OVERHEAD 0
983#endif
984
985#ifndef CONFIGURE_EXTRA_TASK_STACKS
986#define CONFIGURE_EXTRA_TASK_STACKS 0
987#endif
988
989#define CONFIGURE_API_MUTEX_MEMORY \
990  ( (1) * \
991    ( sizeof(API_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) \
992  )
993
994#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
995  ( CONFIGURE_MEMORY_FOR_TASKS(1) +    /* IDLE */ \
996    (256 * 12) +                       /* Ready chains */ \
997    256        +                       /* name/ptr table overhead */ \
998    CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \
999    CONFIGURE_API_MUTEX_MEMORY         /* allocation mutex */ \
1000  )
1001
1002/*
1003 *  Now account for any extra memory that initialization tasks or threads
1004 *  may have requested.
1005 */
1006
1007#ifdef RTEMS_POSIX_API
1008#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
1009    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1010#else
1011#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
1012#endif
1013#ifdef RTEMS_ITRON_API
1014#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART \
1015    (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1016#else
1017#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART 0
1018#endif
1019
1020#define CONFIGURE_INITIALIZATION_THREADS_STACKS \
1021   ((CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
1022    CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART + \
1023    CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART)
1024
1025#define CONFIGURE_EXECUTIVE_RAM_SIZE \
1026(( CONFIGURE_MEMORY_FOR_POSIX + \
1027   CONFIGURE_MEMORY_FOR_ITRON + \
1028   CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
1029      CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
1030      CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
1031   CONFIGURE_INITIALIZATION_THREADS_STACKS + \
1032   CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
1033   CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
1034     CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
1035   CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
1036   CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \
1037   CONFIGURE_MEMORY_FOR_REGIONS( \
1038      CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION ) + \
1039   CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
1040   CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
1041   CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
1042      CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
1043      CONFIGURE_STACK_CHECKER_EXTENSION ) + \
1044   CONFIGURE_MEMORY_FOR_DEVICES(CONFIGURE_MAXIMUM_DEVICES) + \
1045   CONFIGURE_MEMORY_FOR_MP + \
1046   CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
1047   (((CONFIGURE_MEMORY_OVERHEAD)+1) * 1024) + \
1048   (CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
1049) & 0xfffffc00)
1050#endif
1051
1052#ifdef CONFIGURE_GNAT_RTEMS
1053#define CONFIGURE_GNAT_MUTEXES 10
1054#define CONFIGURE_GNAT_KEYS    1
1055
1056/* 20 are required to run all tests in the ACVC */
1057#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
1058#define CONFIGURE_MAXIMUM_ADA_TASKS  20
1059#endif
1060
1061/* This is the number of non-Ada tasks which invoked Ada code. */
1062#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
1063#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
1064#endif
1065
1066/* Ada tasks are allocated twice the minimum stack space */
1067#define CONFIGURE_ADA_TASKS_STACK \
1068  (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
1069
1070#else
1071#define CONFIGURE_GNAT_MUTEXES           0
1072#define CONFIGURE_GNAT_KEYS              0
1073#define CONFIGURE_MAXIMUM_ADA_TASKS      0
1074#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
1075#define CONFIGURE_ADA_TASKS_STACK        0
1076#endif
1077
1078
1079#ifdef CONFIGURE_INIT
1080
1081rtems_api_configuration_table Configuration_RTEMS_API = {
1082  CONFIGURE_MAXIMUM_TASKS,
1083  CONFIGURE_MAXIMUM_TIMERS,
1084  CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
1085    CONFIGURE_TERMIOS_SEMAPHORES,
1086  CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
1087  CONFIGURE_MAXIMUM_PARTITIONS,
1088  CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION,
1089  CONFIGURE_MAXIMUM_PORTS,
1090  CONFIGURE_MAXIMUM_PERIODS,
1091  CONFIGURE_INIT_TASK_TABLE_SIZE,
1092  CONFIGURE_INIT_TASK_TABLE
1093};
1094
1095#ifdef RTEMS_POSIX_API
1096posix_api_configuration_table Configuration_POSIX_API = {
1097  CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
1098  CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
1099    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1100  CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
1101    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1102  CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
1103  CONFIGURE_MAXIMUM_POSIX_TIMERS,
1104  CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
1105  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
1106  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
1107  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
1108  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
1109};
1110#endif
1111
1112#ifdef RTEMS_ITRON_API
1113itron_api_configuration_table Configuration_ITRON_API = {
1114  CONFIGURE_MAXIMUM_ITRON_TASKS,
1115  CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
1116  CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
1117  CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
1118  CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
1119  CONFIGURE_MAXIMUM_ITRON_PORTS,
1120  CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
1121  CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
1122  CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
1123  CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
1124};
1125#endif
1126
1127rtems_configuration_table Configuration = {
1128  CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
1129  CONFIGURE_EXECUTIVE_RAM_SIZE,
1130  CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
1131      CONFIGURE_STACK_CHECKER_EXTENSION,
1132  CONFIGURE_MICROSECONDS_PER_TICK,
1133  CONFIGURE_TICKS_PER_TIMESLICE,
1134  CONFIGURE_MAXIMUM_DEVICES,
1135  CONFIGURE_MAXIMUM_DRIVERS,
1136  CONFIGURE_NUMBER_OF_DRIVERS,               /* number of device drivers */
1137  Device_drivers,                            /* pointer to driver table */
1138  CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,    /* number of initial extensions */
1139  CONFIGURE_INITIAL_EXTENSION_TABLE,         /* pointer to initial extensions */
1140  CONFIGURE_MULTIPROCESSING_TABLE,           /* pointer to MP config table */
1141  &Configuration_RTEMS_API,                  /* pointer to RTEMS API config */
1142#ifdef RTEMS_POSIX_API
1143  &Configuration_POSIX_API,                  /* pointer to POSIX API config */
1144#else
1145  NULL,                                      /* pointer to POSIX API config */
1146#endif
1147#ifdef RTEMS_ITRON_API
1148  &Configuration_ITRON_API                   /* pointer to ITRON API config */
1149#else
1150  NULL                                       /* pointer to ITRON API config */
1151#endif
1152};
1153#endif
1154
1155#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */
1156
1157#ifdef __cplusplus
1158}
1159#endif
1160
1161/*
1162 *  Some warnings and error checking
1163 */
1164
1165/*
1166 *  Make sure a task/thread of some sort is configured
1167 */
1168
1169#if (CONFIGURE_MAXIMUM_TASKS == 0) && \
1170    (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
1171    (CONFIGURE_MAXIMUM_ADA_TASKS == 0) &&  \
1172    (CONFIGURE_MAXIMUM_ITRON_TASKS == 0)
1173#error "CONFIGURATION ERROR: No tasks or threads configured!!"
1174#endif
1175
1176/*
1177 *  Make sure at least one of the initialization task/thread
1178 *  tables was defined.
1179 */
1180
1181#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
1182    !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
1183    !defined(CONFIGURE_ITRON_INIT_TASK_TABLE)
1184#error "CONFIGURATION ERROR: No initialization tasks or threads configured!!"
1185#endif
1186
1187#endif
1188/* end of include file */
Note: See TracBrowser for help on using the repository browser.