source: rtems/cpukit/sapi/include/confdefs.h @ 76deaf0c

4.104.114.95
Last change on this file since 76deaf0c was 76deaf0c, checked in by Joel Sherrill <joel.sherrill@…>, on 05/06/08 at 19:38:19

2008-05-06 Joel Sherrill <joel.sherrill@…>

  • rtems/include/rtems/rtems/message.h, sapi/include/confdefs.h, score/src/coresemseize.c, score/src/threadhandler.c: Comment improvements from class.
  • 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-2008.
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 the
1455 *        drivers are assumed to use the same "timer" hardware
1456 *        on many boards.
1457 */
1458#if !defined(CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE)
1459  #if !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
1460      !defined(CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER) && \
1461      !defined(CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER)
1462    #error "CONFIGURATION ERROR: Do you want the clock driver or not?!?"
1463   #endif
1464#endif
1465
1466/*
1467 *  These names have been obsoleted so make the user application stop compiling
1468 */
1469#if defined(CONFIGURE_TEST_NEEDS_TIMER_DRIVER) || \
1470    defined(CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER) || \
1471    defined(CONFIGURE_TEST_NEEDS_CLOCK_DRIVER) || \
1472    defined(CONFIGURE_TEST_NEEDS_RTC_DRIVER) || \
1473    defined(CONFIGURE_TEST_NEEDS_STUB_DRIVER)
1474#error "CONFIGURATION ERROR: CONFIGURE_TEST_XXX constants are obsolete"
1475#endif
1476
1477#endif
1478/* end of include file */
Note: See TracBrowser for help on using the repository browser.