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

4.104.114.95
Last change on this file since cfcc4e20 was cfcc4e20, checked in by Joel Sherrill <joel.sherrill@…>, on 01/08/08 at 22:59:14

2008-01-08 Joel Sherrill <joel.sherrill@…>

  • libcsupport/Makefile.am: Add malloc_sbrk_helpers.c.
  • libcsupport/include/rtems/malloc.h, libcsupport/src/malloc.c, libcsupport/src/malloc_initialize.c, libcsupport/src/malloc_p.h, libcsupport/src/malloc_statistics_helpers.c: Make sbrk() support pluggable and optional. This eliminates the need for heap extend and sbrk in the minimum footprint which is ~2.5K on the SPARC.
  • sapi/include/confdefs.h: Add the following configuration points: + CONFIGURE_MALLOC_STATISTICS + CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
  • libcsupport/src/malloc_sbrk_helpers.c: New file.
  • Property mode set to 100644
File size: 40.6 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-2007.
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;
55#if defined(RTEMS_MULTIPROCESSING)
56  extern rtems_multiprocessing_table      Multiprocessing_configuration;
57#endif
58#ifdef RTEMS_POSIX_API
59extern posix_api_configuration_table    Configuration_POSIX_API;
60#endif
61#ifdef RTEMS_ITRON_API
62extern itron_api_configuration_table    Configuration_ITRON_API;
63#endif
64
65/*
66 *  RTEMS C Library and Newlib support
67 */
68
69#if (defined(RTEMS_NEWLIB) && defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
70  #define CONFIGURE_NEWLIB_EXTENSION 1
71#else
72  #define CONFIGURE_NEWLIB_EXTENSION 0
73#endif
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
136    rtems_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
147    rtems_filesystem_mount_table_t
148        *rtems_filesystem_mount_table = &configuration_mount_table;
149    int rtems_filesystem_mount_table_size = 1;
150  #endif
151#endif
152
153/*
154 *  Stack Checker Requirements
155 *
156 *  NOTE: This does not automatically enable reporting at program exit.
157 */
158
159#ifdef STACK_CHECKER_ON
160#define CONFIGURE_STACK_CHECKER_EXTENSION 1
161#else
162#define CONFIGURE_STACK_CHECKER_EXTENSION 0
163#endif
164
165
166/*
167 *  Idle task body configuration
168 *
169 *  There is a default IDLE thread body provided by RTEMS which
170 *  has the possibility of being CPU specific.  There may be a
171 *  BSP specific override of the RTEMS default body and in turn,
172 *  the application may override and provide its own.
173 */
174#ifndef CONFIGURE_IDLE_TASK_BODY
175  #ifdef BSP_IDLE_TASK_BODY
176    #define CONFIGURE_IDLE_TASK_BODY BSP_IDLE_TASK_BODY
177  #else
178    #define CONFIGURE_IDLE_TASK_BODY NULL
179  #endif
180#endif
181
182/*
183 *  Idle task stack size configuration
184 *
185 *  By default, the IDLE task will have a stack of minimum size.
186 *  The BSP or application may override this value.
187 */
188#ifndef CONFIGURE_IDLE_TASK_STACK_SIZE
189  #ifdef BSP_IDLE_TASK_STACK_SIZE
190    #define CONFIGURE_IDLE_TASK_STACK_SIZE BSP_IDLE_TASK_STACK_SIZE
191  #else
192    #define CONFIGURE_IDLE_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
193  #endif
194#endif
195
196/*
197 *  Interrupt stack size configuration
198 *
199 *  By default, the interrupt stack will be of minimum size.
200 *  The BSP or application may override this value.
201 */
202#ifndef CONFIGURE_INTERRUPT_STACK_SIZE
203  #ifdef BSP_INTERRUPT_STACK_SIZE
204    #define CONFIGURE_INTERRUPT_STACK_SIZE BSP_INTERRUPT_STACK_SIZE
205  #else
206    #define CONFIGURE_INTERRUPT_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
207  #endif
208#endif
209
210/* XXX try to get to the point where all BSP support allocating the
211 * XXX memory from the Workspace
212 */
213#if (CPU_ALLOCATE_INTERRUPT_STACK == 0)
214  #define CONFIGURE_INTERRUPT_STACK_MEMORY 0
215#else
216  #define CONFIGURE_INTERRUPT_STACK_MEMORY CONFIGURE_INTERRUPT_STACK_SIZE
217#endif
218
219/*
220 *  Task stack allocator configuration
221 */
222
223#ifndef CONFIGURE_TASK_STACK_ALLOCATOR
224  #define CONFIGURE_TASK_STACK_ALLOCATOR NULL
225#endif
226
227#ifndef CONFIGURE_TASK_STACK_DEALLOCATOR
228  #define CONFIGURE_TASK_STACK_DEALLOCATOR NULL
229#endif
230
231/*
232 *  Should the RTEMS Workspace and C Program Heap be cleared automatically
233 *  at system start up?
234 */
235
236#ifndef CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
237  #ifdef BSP_ZERO_WORKSPACE_AUTOMATICALLY
238    #define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY \
239            BSP_ZERO_WORKSPACE_AUTOMATICALLY
240  #else
241    #define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY FALSE
242  #endif
243#endif
244
245/*
246 *  RTEMS Malloc configuration
247 */
248
249#include <rtems/malloc.h>
250
251#ifdef CONFIGURE_INIT
252  rtems_malloc_statistics_functions_t *rtems_malloc_statistics_helpers =
253    #ifndef CONFIGURE_MALLOC_STATISTICS
254      NULL;
255    #else
256      &rtems_malloc_statistics_helpers_table;
257    #endif
258#endif
259
260#ifdef CONFIGURE_INIT
261  rtems_malloc_sbrk_functions_t *rtems_malloc_sbrk_helpers =
262    #ifndef CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
263      NULL;
264    #else
265      &rtems_malloc_sbrk_helpers_table;
266    #endif
267#endif
268
269/*
270 *  Default User Initialization Task Table.  This table guarantees that
271 *  one user initialization table is defined.
272 */
273
274#ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
275
276#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
277
278/*
279 *  The user is defining their own table information and setting the
280 *  appropriate variables.
281 */
282
283#else
284
285#ifndef CONFIGURE_INIT_TASK_NAME
286#define CONFIGURE_INIT_TASK_NAME          rtems_build_name( 'U', 'I', '1', ' ' )
287#endif
288
289#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
290#define CONFIGURE_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
291#endif
292
293#ifndef CONFIGURE_INIT_TASK_PRIORITY
294#define CONFIGURE_INIT_TASK_PRIORITY      1
295#endif
296
297#ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
298#define CONFIGURE_INIT_TASK_ATTRIBUTES    RTEMS_DEFAULT_ATTRIBUTES
299#endif
300
301#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
302#define CONFIGURE_INIT_TASK_ENTRY_POINT   Init
303#endif
304
305#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
306#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
307#endif
308
309#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
310#define CONFIGURE_INIT_TASK_ARGUMENTS     0
311#endif
312
313#ifdef CONFIGURE_INIT
314rtems_initialization_tasks_table Initialization_tasks[] = {
315  { CONFIGURE_INIT_TASK_NAME,
316    CONFIGURE_INIT_TASK_STACK_SIZE,
317    CONFIGURE_INIT_TASK_PRIORITY,
318    CONFIGURE_INIT_TASK_ATTRIBUTES,
319    CONFIGURE_INIT_TASK_ENTRY_POINT,
320    CONFIGURE_INIT_TASK_INITIAL_MODES,
321    CONFIGURE_INIT_TASK_ARGUMENTS
322  }
323};
324#endif
325
326#define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
327
328#define CONFIGURE_INIT_TASK_TABLE_SIZE \
329  sizeof(CONFIGURE_INIT_TASK_TABLE) / sizeof(rtems_initialization_tasks_table)
330
331#endif    /* CONFIGURE_HAS_OWN_INIT_TASK_TABLE */
332
333#else     /* CONFIGURE_RTEMS_INIT_TASKS_TABLE */
334
335#define CONFIGURE_INIT_TASK_TABLE      NULL
336#define CONFIGURE_INIT_TASK_TABLE_SIZE 0
337#define CONFIGURE_INIT_TASK_STACK_SIZE 0
338
339#endif
340
341/*
342 *  Default Device Driver Table.  Each driver needed by the test is explicitly
343 *  choosen by that test.  There is always a null driver entry.
344 */
345
346#define NULL_DRIVER_TABLE_ENTRY \
347 { NULL, NULL, NULL, NULL, NULL, NULL }
348
349#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
350#include <rtems/console.h>
351#endif
352
353#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
354#include <rtems/clockdrv.h>
355#endif
356
357#ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
358#include <rtems/timerdrv.h>
359#endif
360
361#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
362#include <rtems/rtc.h>
363#endif
364
365#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
366#include <rtems/devnull.h>
367#endif
368
369#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
370  /* the ide driver needs the ATA driver */
371#  ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
372#  define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
373#  endif
374#include <libchip/ide_ctrl.h>
375#endif
376
377#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
378#include <libchip/ata.h>
379#endif
380
381#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
382
383#ifdef CONFIGURE_INIT
384rtems_driver_address_table Device_drivers[] = {
385#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
386  CONSOLE_DRIVER_TABLE_ENTRY,
387#endif
388#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
389  CLOCK_DRIVER_TABLE_ENTRY,
390#endif
391#ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
392  RTC_DRIVER_TABLE_ENTRY,
393#endif
394#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
395  DEVNULL_DRIVER_TABLE_ENTRY,
396#endif
397#ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
398  IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
399#endif
400#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
401  ATA_DRIVER_TABLE_ENTRY,
402#endif
403#ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
404  CONFIGURE_APPLICATION_EXTRA_DRIVERS,
405#endif
406#ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
407  NULL_DRIVER_TABLE_ENTRY
408#elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
409    !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
410    !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
411    !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
412    !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
413    !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
414    !defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
415  NULL_DRIVER_TABLE_ENTRY
416#endif
417};
418#endif
419
420#endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
421
422/*
423 *  Default the number of drivers per node.  This value may be
424 *  overridden by the user.
425 */
426
427#define CONFIGURE_NUMBER_OF_DRIVERS \
428  ((sizeof(Device_drivers) / sizeof(rtems_driver_address_table)))
429
430#ifndef CONFIGURE_MAXIMUM_DRIVERS
431#define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
432#endif
433
434/*
435 *  Default the number of devices per device driver.  This value may be
436 *  overridden by the user.
437 *
438 *  NOTE: This configuration parameter is obsolete. Thus we will warn the
439 *        user that it is obsolete.
440 */
441
442#ifdef CONFIGURE_MAXIMUM_DEVICES
443#warning "CONFIGURE_MAXIMUM_DEVICES is obsolete.  Do not use any longer."
444#endif
445
446#ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
447  /*
448   * configure the priority of the ATA driver task
449   */
450#  ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
451#    define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
452#  endif
453#  ifdef CONFIGURE_INIT
454  rtems_task_priority ata_driver_task_priority
455    = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
456#  endif /* CONFIGURE_INIT */
457#endif
458
459/*
460 * add bdbuf configuration and values for swapout task priority
461 */
462#ifdef CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
463#include <rtems/bdbuf.h>
464/*
465 * configure the priority of the bdbuf swapout task
466 */
467#ifndef CONFIGURE_SWAPOUT_TASK_PRIORITY
468#define CONFIGURE_SWAPOUT_TASK_PRIORITY SWAPOUT_TASK_DEFAULT_PRIORITY
469#endif
470#ifdef CONFIGURE_INIT
471  rtems_task_priority swapout_task_priority
472    = CONFIGURE_SWAPOUT_TASK_PRIORITY;
473#endif  /* CONFIGURE_INIT */
474#ifndef CONFIGURE_HAS_OWN_BDBUF_TABLE
475
476#ifndef CONFIGURE_BDBUF_BUFFER_COUNT
477#define CONFIGURE_BDBUF_BUFFER_COUNT 64
478#endif /* CONFIGURE_BDBUF_BUFFER_COUNT */
479
480#ifndef CONFIGURE_BDBUF_BUFFER_SIZE
481#define CONFIGURE_BDBUF_BUFFER_SIZE 512
482#endif /* CONFIGURE_BDBUF_BUFFER_SIZE */
483#ifdef CONFIGURE_INIT
484rtems_bdbuf_config rtems_bdbuf_configuration[] = {
485  {CONFIGURE_BDBUF_BUFFER_SIZE,CONFIGURE_BDBUF_BUFFER_COUNT,NULL}
486};
487int rtems_bdbuf_configuration_size =( sizeof(rtems_bdbuf_configuration)
488                                     /sizeof(rtems_bdbuf_configuration[0]));
489#endif /* CONFIGURE_INIT */
490#endif /* CONFIGURE_HAS_OWN_BDBUF_TABLE        */
491#endif /* CONFIGURE_APPLICATION_NEEDS_LIBBLOCK */
492
493#if defined(RTEMS_MULTIPROCESSING)
494/*
495 *  Default Multiprocessing Configuration Table.  The defaults are
496 *  appropriate for most of the RTEMS Multiprocessor Test Suite.  Each
497 *  value may be overridden within each test to customize the environment.
498 */
499
500#ifdef CONFIGURE_MP_APPLICATION
501#ifndef CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
502
503#ifndef CONFIGURE_MP_NODE_NUMBER
504#define CONFIGURE_MP_NODE_NUMBER                NODE_NUMBER
505#endif
506
507#ifndef CONFIGURE_MP_MAXIMUM_NODES
508#define CONFIGURE_MP_MAXIMUM_NODES              2
509#endif
510
511#ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
512#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS     32
513#endif
514
515#ifndef CONFIGURE_MP_MAXIMUM_PROXIES
516#define CONFIGURE_MP_MAXIMUM_PROXIES            32
517#endif
518
519#ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
520#include <mpci.h>
521#define CONFIGURE_MP_MPCI_TABLE_POINTER         &MPCI_table
522#endif
523
524#ifdef CONFIGURE_INIT
525rtems_multiprocessing_table Multiprocessing_configuration = {
526  CONFIGURE_MP_NODE_NUMBER,              /* local node number */
527  CONFIGURE_MP_MAXIMUM_NODES,            /* maximum # nodes in system */
528  CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS,   /* maximum # global objects */
529  CONFIGURE_MP_MAXIMUM_PROXIES,          /* maximum # proxies */
530  CONFIGURE_MP_MPCI_TABLE_POINTER        /* pointer to MPCI config table */
531};
532#endif
533
534#define CONFIGURE_MULTIPROCESSING_TABLE    &Multiprocessing_configuration
535
536#endif /* CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE */
537
538#else
539
540#define CONFIGURE_MULTIPROCESSING_TABLE    NULL
541
542#endif /* CONFIGURE_MP_APPLICATION */
543#endif /* RTEMS_MULTIPROCESSING */
544
545/*
546 *  Default Configuration Table.
547 */
548
549#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
550
551#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
552#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA     NULL
553#endif
554
555#ifndef CONFIGURE_MAXIMUM_TASKS
556#define CONFIGURE_MAXIMUM_TASKS               0
557#endif
558
559#ifndef CONFIGURE_MAXIMUM_TIMERS
560#define CONFIGURE_MAXIMUM_TIMERS              0
561#endif
562
563#ifndef CONFIGURE_MAXIMUM_SEMAPHORES
564#define CONFIGURE_MAXIMUM_SEMAPHORES          0
565#endif
566
567#ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
568#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES      0
569#endif
570
571#ifndef CONFIGURE_MAXIMUM_PARTITIONS
572#define CONFIGURE_MAXIMUM_PARTITIONS          0
573#endif
574
575#ifndef CONFIGURE_MAXIMUM_REGIONS
576#define CONFIGURE_MAXIMUM_REGIONS             0
577#endif
578
579#ifndef CONFIGURE_MAXIMUM_PORTS
580#define CONFIGURE_MAXIMUM_PORTS               0
581#endif
582
583#ifndef CONFIGURE_MAXIMUM_PERIODS
584#define CONFIGURE_MAXIMUM_PERIODS             0
585#endif
586
587#ifndef CONFIGURE_MAXIMUM_BARRIERS
588#define CONFIGURE_MAXIMUM_BARRIERS            0
589#endif
590
591#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
592#define CONFIGURE_MAXIMUM_USER_EXTENSIONS     0
593#endif
594
595#ifndef CONFIGURE_MICROSECONDS_PER_TICK
596#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
597#endif
598
599#ifndef CONFIGURE_TICKS_PER_TIMESLICE
600#define CONFIGURE_TICKS_PER_TIMESLICE        50
601#endif
602
603/*
604 *  Initial Extension Set
605 */
606
607#ifdef CONFIGURE_INIT
608#ifdef STACK_CHECKER_ON
609#include <rtems/stackchk.h>
610#endif
611#include <rtems/libcsupport.h>
612
613#if defined(CONFIGURE_INITIAL_EXTENSIONS) || \
614    defined(STACK_CHECKER_ON) || \
615    (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
616  rtems_extensions_table Configuration_Initial_Extensions[] = {
617    #if !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY)
618      RTEMS_NEWLIB_EXTENSION,
619    #endif
620    #if defined(STACK_CHECKER_ON)
621      RTEMS_STACK_CHECKER_EXTENSION,
622    #endif
623    #if defined(CONFIGURE_INITIAL_EXTENSIONS)
624      CONFIGURE_INITIAL_EXTENSIONS,
625    #endif
626  };
627
628  #define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
629  #define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
630    ((sizeof(Configuration_Initial_Extensions) / \
631      sizeof(rtems_extensions_table)))
632#else
633  #define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
634  #define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
635#endif
636
637
638#endif
639
640/*
641 *  POSIX API Configuration Parameters
642 */
643
644#ifdef RTEMS_POSIX_API
645
646#include <sys/types.h>
647#include <signal.h>
648#include <limits.h>
649#include <mqueue.h>
650#include <rtems/posix/barrier.h>
651#include <rtems/posix/cond.h>
652#include <rtems/posix/mqueue.h>
653#include <rtems/posix/mutex.h>
654#include <rtems/posix/key.h>
655#include <rtems/posix/psignal.h>
656#include <rtems/posix/rwlock.h>
657#include <rtems/posix/semaphore.h>
658#include <rtems/posix/spinlock.h>
659#include <rtems/posix/threadsup.h>
660#include <rtems/posix/timer.h>
661
662#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
663#define CONFIGURE_MAXIMUM_POSIX_THREADS      0
664#endif
665
666#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
667#define CONFIGURE_MAXIMUM_POSIX_MUTEXES      0
668#endif
669
670#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
671#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  0
672#endif
673
674#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
675#define CONFIGURE_MAXIMUM_POSIX_KEYS         0
676#endif
677
678#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
679#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
680#endif
681
682#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
683#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
684#endif
685
686#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
687#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
688#endif
689
690#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
691#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
692#endif
693
694#ifndef CONFIGURE_MAXIMUM_POSIX_BARRIERS
695#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 0
696#endif
697
698#ifndef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
699#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 0
700#endif
701
702#ifndef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
703#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 0
704#endif
705
706#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
707
708#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
709
710/*
711 *  The user is defining their own table information and setting the
712 *  appropriate variables for the POSIX Initialization Thread Table.
713 */
714
715#else
716
717#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
718#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT   POSIX_Init
719#endif
720
721#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
722#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
723#endif
724
725#ifdef CONFIGURE_INIT
726posix_initialization_threads_table POSIX_Initialization_threads[] = {
727  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
728      CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
729};
730#endif
731
732#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
733
734#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
735  sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
736      sizeof(posix_initialization_threads_table)
737
738#endif    /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
739
740#else     /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
741
742#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
743#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
744
745#endif
746
747#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
748  ( \
749    sizeof (POSIX_API_Control) + \
750   (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
751  )
752
753#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
754  ((_mutexes) * \
755   ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF + \
756     NAME_MAX ) )
757
758#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
759  ((_condition_variables) * \
760   ( sizeof(POSIX_Condition_variables_Control) + \
761        CONFIGURE_OBJECT_TABLE_STUFF ) )
762
763#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
764  ((_keys) * \
765   ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
766
767#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
768   ((_timers) * (sizeof(POSIX_Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
769
770#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
771  ((_queued_signals) * \
772   ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
773
774#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
775  ((_message_queues) * \
776   ( sizeof( POSIX_Message_queue_Control) + \
777    CONFIGURE_OBJECT_TABLE_STUFF + \
778    NAME_MAX ) )
779
780#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
781  ((_semaphores) * \
782   ( sizeof( POSIX_Semaphore_Control) + \
783    CONFIGURE_OBJECT_TABLE_STUFF + \
784    NAME_MAX ) )
785
786#define CONFIGURE_MEMORY_FOR_POSIX_BARRIERS(_barriers) \
787  ((_barriers) * \
788   ( sizeof( POSIX_Barrier_Control) + \
789    CONFIGURE_OBJECT_TABLE_STUFF + \
790    NAME_MAX ) )
791
792#define CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS(_spinlocks) \
793  ((_spinlocks) * \
794   ( sizeof( POSIX_Spinlock_Control) + \
795    CONFIGURE_OBJECT_TABLE_STUFF + \
796    NAME_MAX ) )
797
798#define CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS(_rwlocks) \
799  ((_rwlocks) * \
800   ( sizeof( POSIX_RWLock_Control) + \
801    CONFIGURE_OBJECT_TABLE_STUFF + \
802    NAME_MAX ) )
803
804#define CONFIGURE_MEMORY_FOR_POSIX \
805  ( \
806    CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
807    CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
808        CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
809    CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
810    CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
811        CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
812    CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
813        CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
814    CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
815        CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
816    CONFIGURE_MEMORY_FOR_POSIX_BARRIERS( CONFIGURE_MAXIMUM_POSIX_BARRIERS ) + \
817    CONFIGURE_MEMORY_FOR_POSIX_SPINLOCKS( \
818        CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ) + \
819    CONFIGURE_MEMORY_FOR_POSIX_RWLOCKS( \
820        CONFIGURE_MAXIMUM_POSIX_RWLOCKS ) + \
821    CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ) + \
822    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
823   )
824#else
825
826#define CONFIGURE_MAXIMUM_POSIX_THREADS         0
827#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
828#define CONFIGURE_MEMORY_FOR_POSIX              0
829
830
831#endif    /* RTEMS_POSIX_API */
832
833#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
834#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    0
835#endif
836
837/*
838 *  ITRON API Configuration Parameters
839 */
840
841#ifdef RTEMS_ITRON_API
842
843#include <rtems/itron.h>
844#include <rtems/itron/config.h>
845#include <rtems/itron/eventflags.h>
846#include <rtems/itron/fmempool.h>
847#include <rtems/itron/mbox.h>
848#include <rtems/itron/msgbuffer.h>
849#include <rtems/itron/port.h>
850#include <rtems/itron/semaphore.h>
851#include <rtems/itron/task.h>
852#include <rtems/itron/vmempool.h>
853
854#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
855#define CONFIGURE_MAXIMUM_ITRON_TASKS      0
856#endif
857
858#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
859#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES   0
860#endif
861
862#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
863#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS   0
864#endif
865
866#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
867#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES   0
868#endif
869
870#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
871#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS   0
872#endif
873
874#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
875#define CONFIGURE_MAXIMUM_ITRON_PORTS   0
876#endif
877
878#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
879#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS   0
880#endif
881
882#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
883#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS   0
884#endif
885
886#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
887
888#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
889
890/*
891 *  The user is defining their own table information and setting the
892 *  appropriate variables for the ITRON Initialization Task Table.
893 */
894
895#else
896
897#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
898#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT   ITRON_Init
899#endif
900
901#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
902#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES    TA_HLNG
903#endif
904
905#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
906#define CONFIGURE_ITRON_INIT_TASK_PRIORITY      1
907#endif
908
909#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
910#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
911#endif
912
913#ifdef CONFIGURE_INIT
914itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
915  { 1,                                    /* ID */
916    { (VP) 0,                                /* exinfo */
917      CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES,  /* task attributes */
918      CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
919      CONFIGURE_ITRON_INIT_TASK_PRIORITY,    /* initial task priority */
920      CONFIGURE_ITRON_INIT_TASK_STACK_SIZE   /* stack size */
921    }
922  }
923};
924#endif
925
926#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
927
928#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
929  sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
930      sizeof(itron_initialization_tasks_table)
931
932#endif    /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
933
934#else     /* CONFIGURE_ITRON_INIT_TASK_TABLE */
935
936#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
937#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
938
939#endif
940
941#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
942  ( \
943    sizeof (ITRON_API_Control) \
944  )
945
946#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
947  ((_semaphores) * \
948   ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
949
950#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
951  ((_eventflags) * \
952   ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
953
954#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
955  ((_mailboxes) * \
956   ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
957
958#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
959  ((_message_buffers) * \
960   ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
961
962#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
963  ((_ports) * \
964   ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
965
966#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
967  ((_memory_pools) * \
968   (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
969
970#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
971  ((_fixed_memory_pools) * \
972   ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
973
974#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
975#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
976#endif
977
978
979#define CONFIGURE_MEMORY_FOR_ITRON \
980  ( \
981    CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
982        CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
983    CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
984        CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
985    CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
986        CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
987    CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
988        CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
989    CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
990        CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
991    CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
992        CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
993    CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
994        CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
995    CONFIGURE_ITRON_INIT_TASK_STACK_SIZE \
996   )
997
998
999#else
1000
1001#define CONFIGURE_MAXIMUM_ITRON_TASKS               0
1002#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES          0
1003#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS          0
1004#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES           0
1005#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS     0
1006#define CONFIGURE_MAXIMUM_ITRON_PORTS               0
1007#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS        0
1008#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS  0
1009#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API     0
1010#define CONFIGURE_MEMORY_FOR_ITRON                  0
1011
1012#endif    /* RTEMS_ITRON_API */
1013
1014
1015/*
1016 *  Calculate the RAM size based on the maximum number of objects configured.
1017 */
1018
1019#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
1020
1021#define CONFIGURE_OBJECT_TABLE_STUFF \
1022  ( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
1023
1024#if defined(RTEMS_NEWLIB)
1025#include <reent.h>
1026
1027#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY sizeof(struct _reent)
1028#else
1029#define CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY 0
1030#endif
1031
1032#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
1033  (((_tasks) + 1 ) * \
1034   ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
1035      STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
1036      CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
1037      CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
1038      CONFIGURE_MEMORY_PER_TASK_FOR_LIBC_REENTRANCY + \
1039      CONFIGURE_OBJECT_TABLE_STUFF)) \
1040  )
1041
1042#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
1043  ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1044
1045#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
1046  ((_semaphores) * \
1047   ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1048
1049#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
1050  ( (_queues) * \
1051    ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1052
1053#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
1054  ( (_partitions) * \
1055    ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1056
1057#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
1058  ( (_regions) * \
1059    ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1060
1061#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
1062  ( (_ports) * \
1063    ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1064
1065#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
1066  ( (_periods) * \
1067    ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1068
1069#define CONFIGURE_MEMORY_FOR_BARRIERS(_barriers) \
1070  ( (_barriers) * \
1071    ( sizeof(Barrier_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1072
1073#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
1074  ( (_extensions) * \
1075    ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
1076
1077#ifdef CONFIGURE_MP_APPLICATION
1078
1079#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
1080
1081#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
1082  ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) )  )
1083
1084#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
1085  ((_global_objects)  * ( sizeof(Objects_MP_Control) )  )
1086
1087#define CONFIGURE_MEMORY_FOR_MP \
1088  ( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
1089    CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
1090    CONFIGURE_MEMORY_FOR_TASKS(1) \
1091  )
1092
1093#endif  /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
1094
1095#else
1096
1097#define CONFIGURE_MEMORY_FOR_MP  0
1098
1099#endif
1100
1101/*
1102 *  This is so we can account for tasks with stacks greater than minimum
1103 *  size.  This is in bytes.
1104 */
1105#ifndef CONFIGURE_EXTRA_TASK_STACKS
1106#define CONFIGURE_EXTRA_TASK_STACKS 0
1107#endif
1108
1109/*
1110 * Account for pending message buffers in bytes.
1111 */
1112#ifndef CONFIGURE_MESSAGE_BUFFER_MEMORY
1113#define CONFIGURE_MESSAGE_BUFFER_MEMORY 0
1114#endif
1115
1116/*
1117 * Catch all for extra memory in case something broken and underestimates.
1118 * Historically this was used for message buffers.
1119 */
1120#ifndef CONFIGURE_MEMORY_OVERHEAD
1121#define CONFIGURE_MEMORY_OVERHEAD 0
1122#endif
1123
1124#define CONFIGURE_API_MUTEX_MEMORY \
1125  ( (1) * \
1126    ( sizeof(API_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) \
1127  )
1128
1129#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
1130  ( CONFIGURE_MEMORY_FOR_TASKS(1) +                  /* IDLE */ \
1131    ((PRIORITY_MAXIMUM+1) * sizeof(Chain_Control)) + /* Ready chains */ \
1132    256 +                                 /* name/ptr table overhead */ \
1133    CONFIGURE_INTERRUPT_STACK_MEMORY +    /* interrupt stack */ \
1134    CONFIGURE_API_MUTEX_MEMORY            /* allocation mutex */ \
1135  )
1136
1137/*
1138 *  Now account for any extra memory that initialization tasks or threads
1139 *  may have requested.
1140 */
1141
1142#ifdef RTEMS_POSIX_API
1143#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
1144    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1145#else
1146#define CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
1147#endif
1148#ifdef RTEMS_ITRON_API
1149#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART \
1150    (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE)
1151#else
1152#define CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART 0
1153#endif
1154
1155#define CONFIGURE_INITIALIZATION_THREADS_STACKS \
1156   ((CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
1157    CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART + \
1158    CONFIGURE_INITIALIZATION_THREADS_STACKS_ITRON_PART)
1159
1160/*
1161 *  POSIX Threads have a default stack size of 2x minimum.  The code
1162 *  below CONFIGURE_MEMORY_FOR_TASKS(...) takes this into account.
1163 */
1164#define CONFIGURE_EXECUTIVE_RAM_SIZE \
1165(( CONFIGURE_MEMORY_FOR_POSIX + \
1166   CONFIGURE_MEMORY_FOR_ITRON + \
1167   CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
1168      CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
1169      CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
1170   (CONFIGURE_MAXIMUM_POSIX_THREADS * RTEMS_MINIMUM_STACK_SIZE ) + \
1171   CONFIGURE_INITIALIZATION_THREADS_STACKS + \
1172   CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
1173   CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
1174     CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
1175   CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
1176   CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \
1177   CONFIGURE_MEMORY_FOR_REGIONS( CONFIGURE_MAXIMUM_REGIONS ) + \
1178   CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
1179   CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
1180   CONFIGURE_MEMORY_FOR_BARRIERS(CONFIGURE_MAXIMUM_BARRIERS) + \
1181   CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
1182      CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
1183      CONFIGURE_STACK_CHECKER_EXTENSION ) + \
1184   CONFIGURE_MEMORY_FOR_MP + \
1185   CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
1186   CONFIGURE_MESSAGE_BUFFER_MEMORY + \
1187   (CONFIGURE_MEMORY_OVERHEAD * 1024) + \
1188   (CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
1189) & ~0x7)
1190#endif
1191
1192#ifdef CONFIGURE_GNAT_RTEMS
1193#define CONFIGURE_GNAT_MUTEXES 10
1194/* GNAT/RTEMS provides an optimized Ada self and does not use POSIX Keys */
1195#define CONFIGURE_GNAT_KEYS    0
1196
1197/* 20 are required to run all tests in the ACVC */
1198#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
1199#define CONFIGURE_MAXIMUM_ADA_TASKS  20
1200#endif
1201
1202/* This is the number of non-Ada tasks which invoked Ada code. */
1203#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
1204#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
1205#endif
1206
1207/* Ada tasks are allocated twice the minimum stack space */
1208#define CONFIGURE_ADA_TASKS_STACK \
1209  (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
1210
1211#else
1212#define CONFIGURE_GNAT_MUTEXES           0
1213#define CONFIGURE_GNAT_KEYS              0
1214#define CONFIGURE_MAXIMUM_ADA_TASKS      0
1215#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
1216#define CONFIGURE_ADA_TASKS_STACK        0
1217#endif
1218
1219
1220#ifdef CONFIGURE_INIT
1221
1222rtems_api_configuration_table Configuration_RTEMS_API = {
1223  CONFIGURE_MAXIMUM_TASKS,
1224  CONFIGURE_MAXIMUM_TIMERS,
1225  CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
1226    CONFIGURE_TERMIOS_SEMAPHORES,
1227  CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
1228  CONFIGURE_MAXIMUM_PARTITIONS,
1229  CONFIGURE_MAXIMUM_REGIONS,
1230  CONFIGURE_MAXIMUM_PORTS,
1231  CONFIGURE_MAXIMUM_PERIODS,
1232  CONFIGURE_MAXIMUM_BARRIERS,
1233  CONFIGURE_INIT_TASK_TABLE_SIZE,
1234  CONFIGURE_INIT_TASK_TABLE
1235};
1236
1237#ifdef RTEMS_POSIX_API
1238posix_api_configuration_table Configuration_POSIX_API = {
1239  CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
1240  CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
1241    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1242  CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
1243    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
1244  CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
1245  CONFIGURE_MAXIMUM_POSIX_TIMERS,
1246  CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
1247  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
1248  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
1249  CONFIGURE_MAXIMUM_POSIX_BARRIERS,
1250  CONFIGURE_MAXIMUM_POSIX_RWLOCKS,
1251  CONFIGURE_MAXIMUM_POSIX_SPINLOCKS,
1252  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
1253  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
1254};
1255#endif
1256
1257#ifdef RTEMS_ITRON_API
1258itron_api_configuration_table Configuration_ITRON_API = {
1259  CONFIGURE_MAXIMUM_ITRON_TASKS,
1260  CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
1261  CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
1262  CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
1263  CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
1264  CONFIGURE_MAXIMUM_ITRON_PORTS,
1265  CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
1266  CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
1267  CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
1268  CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
1269};
1270#endif
1271
1272rtems_configuration_table Configuration = {
1273  CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
1274  CONFIGURE_EXECUTIVE_RAM_SIZE,              /* required RTEMS workspace */
1275  CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
1276      CONFIGURE_STACK_CHECKER_EXTENSION,     /* maximum user extensions */
1277  CONFIGURE_MICROSECONDS_PER_TICK,           /* microseconds per clock tick */
1278  CONFIGURE_TICKS_PER_TIMESLICE,             /* ticks per timeslice quantum */
1279  CONFIGURE_IDLE_TASK_BODY,                  /* user's IDLE task */
1280  CONFIGURE_IDLE_TASK_STACK_SIZE,            /* IDLE task stack size */
1281  CONFIGURE_INTERRUPT_STACK_SIZE,            /* interrupt stack size */
1282  CONFIGURE_TASK_STACK_ALLOCATOR,            /* stack allocator */
1283  CONFIGURE_TASK_STACK_DEALLOCATOR,          /* stack deallocator */
1284  CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY,    /* true to clear memory */
1285  CONFIGURE_MAXIMUM_DRIVERS,                 /* maximum device drivers */
1286  CONFIGURE_NUMBER_OF_DRIVERS,               /* static device drivers */
1287  Device_drivers,                            /* pointer to driver table */
1288  CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,    /* number of initial extensions */
1289  CONFIGURE_INITIAL_EXTENSION_TABLE,         /* pointer to initial extensions */
1290#if defined(RTEMS_MULTIPROCESSING)
1291  CONFIGURE_MULTIPROCESSING_TABLE,           /* pointer to MP config table */
1292#endif
1293  &Configuration_RTEMS_API,                  /* pointer to RTEMS API config */
1294#ifdef RTEMS_POSIX_API
1295  &Configuration_POSIX_API,                  /* pointer to POSIX API config */
1296#else
1297  NULL,                                      /* pointer to POSIX API config */
1298#endif
1299#ifdef RTEMS_ITRON_API
1300  &Configuration_ITRON_API                   /* pointer to ITRON API config */
1301#else
1302  NULL                                       /* pointer to ITRON API config */
1303#endif
1304};
1305#endif
1306
1307#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */
1308
1309/*
1310 *  If the user has configured a set of Classic API Initialization Tasks,
1311 *  then we need to install the code that runs that loop.
1312 */
1313#ifdef CONFIGURE_INIT
1314  #ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
1315    void (_RTEMS_tasks_Initialize_user_tasks_body)(void);
1316    void (*_RTEMS_tasks_Initialize_user_tasks_p)(void) =
1317              _RTEMS_tasks_Initialize_user_tasks_body;
1318  #else
1319    void (*_RTEMS_tasks_Initialize_user_tasks_p)(void) = NULL;
1320  #endif
1321#endif
1322
1323/*
1324 *  If the user has configured a set of POSIX Initialization Threads,
1325 *  then we need to install the code that runs that loop.
1326 */
1327#ifdef RTEMS_POSIX_API
1328  #ifdef CONFIGURE_INIT
1329    #ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
1330      void _POSIX_Threads_Initialize_user_threads_body(void);
1331      void (*_POSIX_Threads_Initialize_user_threads_p)(void) =
1332                _POSIX_Threads_Initialize_user_threads_body;
1333    #else
1334      void (*_POSIX_Threads_Initialize_user_threads_p)(void) = NULL;
1335    #endif
1336  #endif
1337#endif
1338
1339/*
1340 *  If the user has configured a set of ITRON Initialization Tasks,
1341 *  then we need to install the code that runs that loop.
1342 */
1343#ifdef RTEMS_ITRON_API
1344  #ifdef CONFIGURE_INIT
1345    #ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
1346      void _ITRON_Task_Initialize_user_tasks_body(void);
1347      void (*_ITRON_Initialize_user_tasks_p)(void) =
1348                _ITRON_Task_Initialize_user_tasks_body;
1349    #else
1350      void (*_ITRON_Initialize_user_tasks_p)(void) = NULL;
1351    #endif
1352  #endif
1353#endif
1354
1355#ifdef __cplusplus
1356}
1357#endif
1358
1359/*
1360 *  Some warnings and error checking
1361 */
1362
1363/*
1364 *  Make sure a task/thread of some sort is configured
1365 */
1366
1367#if (CONFIGURE_MAXIMUM_TASKS == 0) && \
1368    (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
1369    (CONFIGURE_MAXIMUM_ADA_TASKS == 0) &&  \
1370    (CONFIGURE_MAXIMUM_ITRON_TASKS == 0)
1371#error "CONFIGURATION ERROR: No tasks or threads configured!!"
1372#endif
1373
1374/*
1375 *  Make sure at least one of the initialization task/thread
1376 *  tables was defined.
1377 */
1378
1379#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
1380    !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
1381    !defined(CONFIGURE_ITRON_INIT_TASK_TABLE)
1382#error "CONFIGURATION ERROR: No initialization tasks or threads configured!!"
1383#endif
1384
1385/*
1386 *  These names have been obsoleted so make the user application stop compiling
1387 */
1388#if defined(CONFIGURE_TEST_NEEDS_TIMER_DRIVER) || \
1389    defined(CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER) || \
1390    defined(CONFIGURE_TEST_NEEDS_CLOCK_DRIVER) || \
1391    defined(CONFIGURE_TEST_NEEDS_RTC_DRIVER) || \
1392    defined(CONFIGURE_TEST_NEEDS_STUB_DRIVER)
1393#error "CONFIGURATION ERROR: CONFIGURE_TEST_XXX constants are obsolete"
1394#endif
1395
1396
1397#endif
1398/* end of include file */
Note: See TracBrowser for help on using the repository browser.