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

4.104.114.95
Last change on this file since df0bfdf was df0bfdf, checked in by Joel Sherrill <joel.sherrill@…>, on 04/17/08 at 22:42:10

2008-04-17 Joel Sherrill <joel.sherrill@…>

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